今天在大疯子的博客看到说phpweb的上传漏洞还需要gpc=off才行,不由纳闷了,无论是iis6/iis7/apache/nginx哪一个的解析漏洞,文件名再畸形好像都不会涉及到gpc的吧?
来简单科普下php中具备对特殊字符进行转义功能的选项。
在php的配置文件中,有个布尔值的设置,就是magic_quotes_gpc。当它的值为on时,php的大部分函数自动的给所有GPC(GET/POST/COOKIE)提交的数据中的特殊字符加上反斜线。
受影响的字符有:
单引号(\’)、双引号(\”)、反斜线(\\)与 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中被移除。
最后提一句,phpweb的上传漏洞其实是不需要登录后台的,直接写好脚本上传就行了,所以大疯子博客里说需要登录后台也是错误的说法。当然,除了不登录后台直接用脚本上传之外,进入后台之后直接在编辑器处上传图片并拦截修改数据包中的fileName也是可以的。
由此可见,网络上传的东西是亦真亦假,想要分辨还得靠自己的火眼真睛,只是人云亦云是肯定不行的。