RCTF
only

没有nx保护,用shellcode

sla(b”input:”, b”8.592564544313935e-246”)进入gift函数

执行addr时会把寄存器清零
设计read函数
read(0, addr, count)


之后继续构造shellcode接在后面
Shellcraft远端没成功
直接用orw
1 | from pwn import * |
only_rev
本解题思路参考了星盟安全团队
前面和only一样,但是

1 | add rsp,0x12345678 |

最开始的时候无可以利用的
执行该命令实现
1 | pay = b""" |
在 x86-64 Linux 上执行
syscall时,CPU 会把下一条指令地址保存到RCX(还会保存 flags 到R11),这是指令语义规定的副作用。你这里“寄存器全 0”的意思是:
RAX=0→ 系统调用号 0,即readRDI=0→ fd=0(stdin)RSI=0RDX=0所以第一个
syscall等价于执行:
1 >read(0, NULL, 0);它实际什么都不读(长度 0),马上返回;但返回时 RCX 被写成“syscall 后面那条指令的 RIP”,也就是你 rwx 区域里当前代码的位置。
结果:
RCX里拿到了 rwx 区域地址。
初次syscall之后

控制read之后

之后就是写入read就好
写入是在3a的位置,但是我们该执行41了,所以填充7个字节道要执行的位置
编写orw
用到了push等操作
所以先让栈飞回去
1 | orw = ''' |
完整脚本
1 | #!/usr/bin/env python3 |
add之后ebp,esp的范围不在映射范围内
为什么
push/pop/call无法执行这些指令都会隐式访问
[rsp]附近地址:
push x:先rsp -= 8,再写[rsp]pop x:先读[rsp],再rsp += 8call addr:等价于push rip_next; jmp addrret:等价于pop rip但现在
[rsp]就是 unmapped,任何一次读/写都会 page fault。
Comments
Comment plugin failed to load
Loading comment plugin
add之后ebp,esp的范围不在映射范围内