2022 2.11
前两天3d打印机玩的太嗨,效率低下,假期最后几天还是专心搞ctf吧。听说开学后还要面试,必须抓紧了,week4的题目难度可能达不到,至少adworld新手区刷光,进阶题要能做。不过对hgame题解的研究不能停,隔每天还是要看看,总是有收获的。
—————————————————————————————————————
今天主要看rop,是ctfwiki上的blog(实话说ctfwiki讲解的还是很细致的,这个网站师兄早就推给我了,但是现在才刚看了没几篇,这点说不过去)
有几点做个笔记:
1,lea汇编指令,是“load effective address”的缩写,lea指令可以用来将一个内存地址直接赋给目的操作数
例如:lea eax,[ebx+8]
就是将ebx+8这个值直接赋给eax,而不是把ebx+8处的内存地址里的数据赋给eax。
而mov指令则恰恰相反
例如:mov eax,[ebx+8]
把内存地址为ebx+8处的数据赋给eax。(来源:知乎)
2,伪c代码中出现的stevbuf函数用法
3,对于读取输入的c程序对应的汇编代码还不够理解
比如这个步骤,为什么把断点下在call?s指的是什么(联系上面的三行汇编代码可以看出来s的地址是esp+1Ch)?其实对于溢出这个操作在汇编层面上的过程还不够理解。
再具体一点,现在利用的是C语言代码中的gets()函数,exp中sendline()的目标也应该是它,而payload要求计算距离(应该是输入处到(栈的?)返回地址),那么终点是返回地址,现在要找的是覆盖的起点。
——22:00——
一下午看了几个例子,目前我总结的起点应该就是漏洞函数的地址,而上面这个例子的断点操作还没有搞明白,先接着看吧。
4,
这里就是上回提到的asm(shellcraft.sh())的出处,在阅读pwntools(看来就算是全英文也不得不啃完了)时找到了如下内容:
由此看来,asm(shellcraft.sh)应该是个用于输出覆写字符串的工具,可能只是看着逼格高一点,似乎ctfwiki的作者就是这样的风格,写文章花样很多,其实是一题多解给你看。
包括后面的ljust方法,其实就相当于'A' * 112
,没有十分的高深。
5,
这个知识点不太懂,好在告诉了是关于汇编int的知识,把王爽老师的书接着看完,后面应该有(之前恶补,只看到call和ret,正好借此机会把整本书巩固一下,毕竟也有很多原理性的知识,明天还要去找一本叫做《加密与解密》的书,再看别的题解的时候好像看到有大佬引用,里面对栈的结构有很清晰的讲解,别的书也要采购一波)。
6,flat这个东西
应该也是覆写的一个手段,应该在pwntools里面可以找到,下次一口气要看完。
7,安装ropgadgets最靠谱的一篇blog
太晚了,这个rop基础部分明天一定要搞完,中高级都至少看一遍,混个眼熟
早睡早起
——————
——————
文中留下的题目:
1,ret2shellcode:
sniperoj-pwn100-shellcode-x86-64
2,ret2libc:
train.cs.nctu.edu.tw: ret2libc
train.cs.nctu.edu.tw: rop
2013-PlaidCTF-ropasaurusrex
Defcon 2015 Qualifier: R0pbaby