【审计学习】PHP审计的危险函数概括

admin 2022年1月10日11:30:19代码审计评论20 views2699字阅读8分59秒阅读模式


【审计学习】PHP审计的危险函数概括

内容主要是给没有PHP基础的人看


1

一、初步了解结构


>  首先在你拿到代码的时候,先要看看源码是否加密,然后你需要去解密,找工具,或掏点钱去某宝,这里不细说,然后我们需要先了解一下源码的结构:


1、入口文件

    一般都是index.php,然后你需要仔细阅读一下该页面源码,了解整体结构,例如包含哪些配置文件、包含哪些过滤文件等。


2、配置文件

    一般都是config.php,然后你需要查看一些数据库相关信息,先看看数据库编码,如果是gbk则可能存在宽字节注入。如果变量的值用双引号、则可能存在双引号解析代码执行的问题。


3、过滤功能

     找到公共函数文件和安全过滤等文件 ,清晰地掌握用户输入的数据,哪些被过滤,哪些没有过滤,在哪里被过滤了,如何过滤的,能否绕过过滤的数据。过滤的方式是替换还是正则?有没有GPC?有没有使用addslasher()处理?


4、寻找未鉴权

    如果你只想审计前台漏洞的话,你需要先找到做鉴权功能文件,然后找到没有包含这个鉴权文件的PHP页面,再去进行审计,PHP鉴权方式就那几种,自己去了解一下。


2

二、审计方式


1、通过全文审计

    通读全文法作是一种最麻烦也是最全面的审计方法,但是对于没有PHP基础的人来说,还是放弃吧。


2、定位危险函数

    我们可以通过定位危险函数,然后逆向怎么调用链,找到可控参数,来挖掘漏洞,这个方法对于我们没有PHP基础的人来说,是最高效的方式,也是最常用的,大多数漏洞的产生原因就是因为函数的使用不当导致的,我们只要找到这样的一些使用不当的函数,就可以快速挖掘想要的漏洞。


3、功能分析方法

    我们可以在本地,使用phpstudy快速搭建网站,然后像黑盒测试一样,找各个功能点,分析其功能,然后在代码处找到该功能,看是否有过滤等。


3

三、常见危险函数及特殊函数


1、PHP代码执行函数


* eval函数,这是一个能将字符串识别为命令的高危函数,用法一般都是:

$a="phpinfo();"eval($a)

* assert函数,这本来是一个用来调试的函数,俗称“断言函数”,编写代码时,我们总是会做出一些假设,断言就是用于在代码中捕捉这些假设

assert('system("whoami");')


*preg_replace函数,这是一个正则表达式的替换函数,如果乱用的话也可能造成命令执行,详情请看链接:https://www.jb51.net/article/145646.htm

preg_replace("/test/e","phpinfo()","jutst test");


或者一些其他的匿名函数、回调函数

#匿名函数$cfunc = create_function('$v','return system($v);');//创建函数返回执⾏system的值$cfunc('whoami');
#匿名函数$sfunc = 'sys'.'tem'$sfunc('whoami');
#回调函数function test($var){echo "callable test $var"; }call_user_func('test','virink');


2、命令执行函数


只要以下函数的参数可控,那么就可以命令执行!当然,不止这些

exec(); 执行一个外部命令函数
system();执行一个外部命令函数,并回显
passthru();执行一个外部程序并显示原始输出
proc_open();执行一个命令,并且打开用来文件输出或输入的文件指针
shell_exec();通过shell环境执行命令,并以字符串的方式完整的返回输出
popen();通过该函数传递一条命令,并对popen打开的文件进行执行

举例:

system($code);只要变量$code我们可控,就会命令执行。
system('ping -c 4'.$IP);这种多数存在于路由器的网络测试功能,变量$IP可控,我们可以进行命令拼接达到命令执行的效果
<?phpshell_exec("id");?>shell_exec,是有返回的,但是它没有输出,所以命令执行了,但是没有回显,那么我们就可以使用dnslog把数据进行外带。


3、PHP文件包含函数


一共就有四个包含函数:

1include函数2require函数3include_once函数4require_once函数

文件包含原理大家应该都很清楚把,只要包含的那个变量可控,而且allow_url_include开启的话,那么我们就有能进行getshell,一般都只有本地包含,服务器都默认关闭远程包含,那我们可以找到一个被限制的文件上传位置,上传一个txt文件,里面写入一句话木马,然后用文件包含漏洞来进行读取并执行代码。

如果没有的话,只能读取一些内网的文件、源码、敏感信息等,可以配合伪协议来使用,例如:

include($_GET['file']);构造代码:?file=php://filter/convert.base64-encode/resource=config.php


4、文件操作函数

fopen 打开一个文件或者URLfile 把一个文件读入数组file_get_contents 将一个文件读入一个字符串内file_put_contents 将字符串写入文件copy 拷贝文件move_uploaded_file 将上传的文件移动到其他文章readfile 输出文件rename 重命名一个文件或目录rmdir 删除目录unlink 删除文件delete 删除文件

像任意文件读取、文件写入、文件删除漏洞,基本上都是因为用了这些函数,而没有控制好,像这些可以自己尝试研究一下。


5、特殊函数

    这个好多呢还有,以上的东西你基本都记住了,你去审计应该也能审计出一些东西来,特殊函数就以后自己多了解把,本篇就不在写了。


最后如果你真的要从事审计工作的话,那必须得深入学习代码,以上内容只不过是应该每个从事渗透测试工作者必须会的简单审计,如果你有目标的话,以后从事安全研究,这一行,少不了要深入学习代码,别想着混了,别像我一样,天天在那混,早点成为大佬才是你的目标。


【审计学习】PHP审计的危险函数概括






往期精彩:

  SSL指纹的识别与绕过阿里云WAF

【超详细 | 附EXP】Weblogic 新的RCE漏洞CVE-2021-2394

【入侵检测】Linux机器中马排查思路

【入侵检测】Windows机器中马排查思路

【代码审计】对一套钓鱼网站的代码审计

  Web安全——登录页面渗透测试思路整理


【审计学习】PHP审计的危险函数概括

点个在看你最好看


【审计学习】PHP审计的危险函数概括


本文始发于微信公众号(Qingy之安全):【审计学习】PHP审计的危险函数概括

特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年1月10日11:30:19
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  【审计学习】PHP审计的危险函数概括 http://cn-sec.com/archives/475839.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: