高质量规范
远程代码执行
这个类型的poc所匹配的内容非常不固定,这里给出在验证中大致需要注意的问题
与远程命令执行类似,这个也能够直接执行相关命令, 但是不同的是,这个直接执行的是对应的语言代码,一般情况下与系统无关,那么我们通常并不用考虑它在不同系统中的兼容性问题
有回显代码执行(Revealed)
与所有能够回显的判断方式类似,我们需要统一规范的就是一定不要在body中直接去匹配在request中出现的内容
- 各种 rce 通常都可以直接使用整数相乘相加或者md5的方法,然后再查找返回结果,这样只有在代码真正被执行的时候才会得到预期的结果
- 同时如果能把代码输出的结果反馈到response的header中,这或许是一个好的选择,在现在的反馈中一般没有出现过误报的问题(推荐)
- 或者可以选择以读取文件的方式来判断漏洞的存在
php中可能出的问题
php在现在来看使用的基数仍然够大,且配置灵活,很容易在一些我们想不到的点中出现问题
那么在php这门语言的环境中,一般我们有以下的要求
- 请不要使用
system
、shell_exec
、phpinfo
等函数测试漏洞,容易出现误报和漏报- 如果对方本身就是一个phpinfo页面,无法判断是否是成功执行了代码,导致出现误报
- 如果对方网站运行在一些虚拟主机环境下,如cpanel,则命令执行函数很可能已经被禁用,此时再用
system
等函数测试漏洞则会出现漏报
- 请不要使用
echo
、print
、var_dump
之类的输出语句直接输出一个内容,然后在返回里查找这个内容,此类POC很容易误报和漏报- 如果对方页面本身是一个类似phpinfo的调试页面,会将你的数据包细节完全打印出来,那么并不能证明存在命令执行漏洞
- 如果对方安装了xdebug等调试类扩展,
var_dump
等函数输出可能存在差异导致查找不成功
无回显代码执行(Unrevealed)
无回显命令执行要求我们使用反连平台进行测试,只要反连平台接收到相关的请求并能正确处理就说明目标系统成功执行相关命令
需要注意,如果目标允许的情况下,使用反连平台时要尽可能地避免掉dns请求,尽量简化配置流程
漏洞如果能通过回显检测,就不要使用反连平台,鼓励将公开的无回显的POC改为有回显的
与命令执行不同,当我们需要发出请求的时候,一定不要再去使用相关方法去调用系统命令,直接使用语言内提供的能力即可,这样
- 一方面简化了请求的流程,避免了繁琐的调用流程
- 另一方面防止差异再次扩大到系统的层级上,即然能有中间层已经替我们解决了这个问题,就不要再使用底层的内容
对于目标系统不出网的情况这里不多加赘述,可以参考第四章常见问题中内容