君莫笑系列视频学习(2)
早上九点起床,洗漱吃饭,要十点了,明天早点睡,希望寒假越起越早。。。
现在又到了开心的学习时间。
pwn入门系列-2-一个简单的例子
https://www.bilibili.com/video/av14824239/?spm_id_from=333.788.videocard.2
第2讲,开!
bss段上是未初始化的局部变量和静态变量,大小0x1000
这讲讲的是一个小例子
漏洞点就在vuln()函数,buffer数组局部变量只有8个字节,但是read函数可以读入0x40个数
程序中有read函数,所以plt表中有read函数,我们也可以拿来用(写exp的时候)了
拿到程序第一步先运行一下
查找多少个字节开始可以覆盖返回地址:
cyclic 100--复制生成的字符串--gdb ./程序--运行起来--输入的时候,把字符串粘贴进去--得到一个无效的pc地址--cyclic -l 地址--得到需要覆盖的地址长度
pwntools官方文档:https://pwntools.readthedocs.io/en/stable/
可以上官方文档查询一些知识
pwn ROP模块总结
rop = ROP(' .file)
rop.raw()
print rop.dump()
rop.call('read', [1,2,3])
rop.read(1,2,3)|
str(rop)
Linux下打开ida:
打开IDA文件夹所在位置--wine idaq.exe
View -- Open subviews -- Segments -- 找到bss段的起始位置
是最大后的exp,给了我一个新的思路,但是有些地方我不是很懂,希望在下面几节课里听明白吧。
为什么是str(rop)?
为什么要sleep(1)?
为什么感觉是先read,才传入的shellcode?
我的理解:
p.send的时候,用到了rop,像函数调用一样走到了上面。
第2讲done!