最新消息:

php中对特殊字符进行转义的选项 与phpweb的上传漏洞

php安全 admin 2574浏览 0评论

今天在大疯子的博客看到说phpweb的上传漏洞还需要gpc=off才行,不由纳闷了,无论是iis6/iis7/apache/nginx哪一个的解析漏洞,文件名再畸形好像都不会涉及到gpc的吧?

文章地址:http://fuck.0day5.com/?p=217

<ignore_js_op>22.png

来简单科普下php中具备对特殊字符进行转义功能的选项。

在php的配置文件中,有个布尔值的设置,就是magic_quotes_gpc。当它的值为on时,php的大部分函数自动的给所有GPC(GET/POST/COOKIE)提交的数据中的特殊字符加上反斜线。

<ignore_js_op>11.png

受影响的字符有:
单引号(\’)、双引号(\”)、反斜线(\\)与 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影响的函数列表:

  1. get_meta_tags()
  2. file_get_contents()
  3. file()
  4. fgets()
  5. fwrite()
  6. fread()
  7. fputcsv()
  8. stream_socket_recvfrom()
  9. exec()
  10. system()
  11. passthru()
  12. stream_get_contents()
  13. bzread()
  14. gzfile()
  15. gzgets()
  16. gzwrite()
  17. gzread()
  18. exif_read_data()
  19. dba_insert()
  20. dba_replace()
  21. dba_fetch()
  22. ibase_fetch_row()
  23. ibase_fetch_assoc()
  24. ibase_fetch_object()
  25. mssql_fetch_row()
  26. mssql_fetch_object()
  27. mssql_fetch_array()
  28. mssql_fetch_assoc()
  29. mysqli_fetch_row()
  30. mysqli_fetch_array()
  31. mysqli_fetch_assoc()
  32. mysqli_fetch_object()
  33. pg_fetch_row()
  34. pg_fetch_assoc()
  35. pg_fetch_array()
  36. pg_fetch_object()
  37. pg_fetch_all()
  38. pg_select()
  39. sybase_fetch_object()
  40. sybase_fetch_array()
  41. sybase_fetch_assoc()
  42. SplFileObject::fgets()
  43. SplFileObject::fgetcsv()
  44. 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

由此可见,网络上传的东西是亦真亦假,想要分辨还得靠自己的火眼真睛,只是人云亦云是肯定不行的。

转载请注明:jinglingshu的博客 » php中对特殊字符进行转义的选项 与phpweb的上传漏洞

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址