不同web系统的情况不尽相同,也许某些平台中不存在的命令在其他系统中是恒久存在的,审核时只需要需要注意判断所执行的命令在目标的系统中是否为通用的即可例如在不同系统中读取文件时,我们读取的文件一般是不同的
有回显命令执行(Revealed)
对于有回显的命令执行,虽然容易测试与编写,但是请注意编写过程中的一些问题
- 那么在执行输出命令的rule中
- 可以且建议使用的方案
- 可以选择使用读取文件的指令读取出系统中通用且稳定存在的文件来判断结果
- 可以选择使用读取文件的指令读取出web系统中通用的配置文件等内容,例如java系统常见的pom.xml等(较为推荐)
- linux中可以选择使用rev,expr等命令处理输入内容后再进行判断,对于内容的严谨性可以参阅通用部分的set内容
- 一些web系统中可以选择在能访问的文件中直接写入文件内容,通过访问产生的文件来判断漏洞的存在(不是很推荐,会残留文件)
- 如果使用这样的方式创建了一个文件,首先尽量不要创建脚本类型的文件,尽量是一个txt文件;其次,不要再多发一个包进行文件的删除,因为这一般就会使用rm命令,这个命令在目标系统上执行是非常危险的行为,所以宁愿留一个文件,也不要执行相关的命令
- 不可以且一般严禁执行的方案
- 使用
echo
之类的输出语句直接
输出一个内容,然后在返回里查找这个内容,此类POC很容易误报和漏报 - 尽量不要使用类似
id
,uname
这种输出不稳定的指令来进行判断,在不同的环境中输出可能会有些许的差异
- 使用
- 可以且建议使用的方案
2^31
和数字过短可能误报,目前要求乘法两个数字的取值范围必须在 40000
和 44800
之间,加法两个数字必须在 800000000
和 1000000000
之间
无回显命令执行(Unrevealed)
无回显命令执行要求我们使用反连平台进行测试,只要反连平台接收到相关的请求并能正确处理就说明目标系统成功执行相关命令需要注意,如果目标允许的情况下,使用反连平台时要尽可能地避免掉dns请求,尽量简化配置流程
漏洞如果能通过回显检测,就不要使用反连平台,鼓励将公开的无回显的POC改为有回显的。比如公开的struts2漏洞POC很多是反弹shell的POC,但几乎所有struts2的POC都可以修改为有回显的POC
curl
curl
http请求 某些系统可能不自带,需要额外进行安装,使用前需要充分考虑目标系统中的状况
ping
ping
dns请求 系统大概率自带,可以选择使用,但是优先级较低
/dev/tcp raw socket
/dev/tcp raw socket
dns请求 系统大概率自带,可以选择使用,但是优先级较低
curl
curl
http请求,windows系统中一定一定需要考虑目标系统中是否存在,虽然现在powershell中会以别名的形式存在,但是使用前千万要充分考虑漏报的风险
ping
ping
dns请求,系统中一定自带,windows中推荐使用
certutil
certutil
dns请求,系统中一定自带,windows中推荐使用
对于目标系统不出网的情况这里不多加赘述,可以参考此处