君莫笑系列视频学习(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!

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章