pwn guess 中利用fork

checksec 查看保護機制 guess
在這裏插入圖片描述
只有一個保護,
發現程序自己把讀取flag到了棧中,所以思路就是:

1.通過覆蓋argv[0]先泄露puts的地址

2.通過泄漏的puts的地址,計算出基地址然後泄漏出environ的地址(也就是棧的地址),爲什麼泄漏environ:https://www.jianshu.com/p/cc9d09a3f65f 有詳細的解釋
在這裏插入圖片描述什麼是environ?
就是保存的環境變量,就是libc裏面的一個symbol_symbol_environ
想要得到environ,只有通過libc_add2,纔可以得到,
這道題主要就是得到stack__add2
附圖:在這裏插入圖片描述中間有出現 xxxxxxxxxx00是canary
裏面”./gueaa’就是打印
3.找到flag和environ的偏移(就是找到flag在棧上的位置)

打開ida看一下
在這裏插入圖片描述裏面有可以 ./fext.flag
找到handle函數
可以看到輸入是用fget函數處理的,限制了輸入的長度,所以不好溢出。再看看flag_correct( )函數。

裏面用到一個fork函數,就是一個複製一個,都是複製一模一樣的,就這存在漏洞,
在這裏插入圖片描述

首先看子類返回一個,父類返回pid
其實這道題就是先用父類繼承,得到pid
難的是就是子類得到0.
第二步就是
如何通過通過覆蓋argv[0]先泄露puts的地址,用到就是在gdb
start
下斷點 b *0000000000400B23
在這裏插入圖片描述c
n “aaaa“就是argv[0】地址
在這裏插入圖片描述stack 100
在這裏插入圖片描述**確定要可控字符串與argv[0]之間的距離
0x7fffffffe198-0x7FFFFFFFE070=0x128(296)

在environ下斷點
flag和棧地址之間的距離 0x7fffffffe1a8-0x7fffffffe040=0x168(360}在這裏插入圖片描述腳本:
在這裏插入圖片描述

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