今天在大疯子的博客看到说phpweb的上传漏洞还需要gpc=off才行,不由纳闷了,无论是iis6/iis7/apache/nginx哪一个的解析漏洞,文件名再畸形好像都不会涉及到gpc的吧?
文章地址:http://fuck.0day5.com/?p=217
<ignore_js_op>
来简单科普下php中具备对特殊字符进行转义功能的选项。
在php的配置文件中,有个布尔值的设置,就是magic_quotes_gpc。当它的值为on时,php的大部分函数自动的给所有GPC(GET/POST/COOKIE)提交的数据中的特殊字符加上反斜线。
<ignore_js_op>
受影响的字符有:
单引号(\’)、双引号(\”)、反斜线(\\)与 NUL(NULL 字符)。
magic_quotes_gpc和magic_quotes_runtime的区别
除了magic_quotes_gpc之外,php中还有一个magic_quotes_runtime,当它的值为on时,大多数返回任何形式外部数据的函数,包括数据库和文本段将会用反斜线转义引号。
magic_quotes_gpc和magic_quotes_runtime最大的区别在于作用范围不同,magic_quotes_gpc的值只影响程序通过Get/Post/Cookies获得的数据,magic_quotes_runtime的值只会影响程序从文件中读取的数据或从数据库查询得到的数据。
与magic_quotes_gpc和magic_quotes_runtime相关的magic_quotes_sybase
与magic_quotes_gpc和magic_quotes_runtime相关的还有一个magic_quotes_sybase,如果启用了 magic_quotes_sybase,单引号会被单引号转义而不是反斜线。
受 magic_quotes_runtime 影响的函数(不包括 PECL 里的函数):
上边说了,magic_quotes_runtime的值只会影响程序从文件中读取的数据或从数据库查询得到的数据,那么程序无论是从文件中读取数据还是从数据库中查询得到数据,都需要通过函数来完成这些操作,所以在php官方网站上可以明确的看到受到magic_quotes_runtime影响的函数列表。而对于magic_quotes_gpc来说,无论程序通过什么函数获得数据,只要数据是以GPC(GET/POST/COOKIE)方式提交的,都会受到影响,所以不存在明确的受到影响的函数列表。
下面是受magic_quotes_runtime影响的函数列表:
- get_meta_tags()
- file_get_contents()
- file()
- fgets()
- fwrite()
- fread()
- fputcsv()
- stream_socket_recvfrom()
- exec()
- system()
- passthru()
- stream_get_contents()
- bzread()
- gzfile()
- gzgets()
- gzwrite()
- gzread()
- exif_read_data()
- dba_insert()
- dba_replace()
- dba_fetch()
- ibase_fetch_row()
- ibase_fetch_assoc()
- ibase_fetch_object()
- mssql_fetch_row()
- mssql_fetch_object()
- mssql_fetch_array()
- mssql_fetch_assoc()
- mysqli_fetch_row()
- mysqli_fetch_array()
- mysqli_fetch_assoc()
- mysqli_fetch_object()
- pg_fetch_row()
- pg_fetch_assoc()
- pg_fetch_array()
- pg_fetch_object()
- pg_fetch_all()
- pg_select()
- sybase_fetch_object()
- sybase_fetch_array()
- sybase_fetch_assoc()
- SplFileObject::fgets()
- SplFileObject::fgetcsv()
- SplFileObject::fwrite()
受影响的PHP版本
无论是magic_quotes_gpc、magic_quotes_runtime,还是magic_quotes_sybase,都是PHP 5.3.0之前为了保证程序的安全性设定的,但是随着PHP版本的升高,这些当初的设定已经不能适应当前的开发环境,所以这3个选项都在PHP 5.3.0中被废弃,在5.4.0中被移除。
官方网站的说明:
http://www.php.net/manual/zh/inf … ni.magic-quotes-gpc
http://www.php.net/manual/zh/inf … agic-quotes-runtime
http://www.php.net/manual/zh/syb … magic-quotes-sybase
最后提一句,phpweb的上传漏洞其实是不需要登录后台的,直接写好脚本上传就行了,所以大疯子博客里说需要登录后台也是错误的说法。当然,除了不登录后台直接用脚本上传之外,进入后台之后直接在编辑器处上传图片并拦截修改数据包中的fileName也是可以的。
写好的脚本:http://sb.f4ck.org/thread-15390-1-1.html
由此可见,网络上传的东西是亦真亦假,想要分辨还得靠自己的火眼真睛,只是人云亦云是肯定不行的。