君莫笑系列视频学习(2)

早上九点起床,洗漱吃饭,要十点了,明天早点睡,希望寒假越起越早。。。

现在又到了开心的学习时间。

pwn入门系列-2-一个简单的例子

https://www.bilibili.com/video/av14824239/?spm_id_from=333.788.videocard.2

第2讲,开!

bss段上是未初始化的局部变量和静态变量,大小0x1000

这讲讲的是一个小例子

漏洞点就在vuln()函数,buffer数组局部变量只有8个字节,但是read函数可以读入0x40个数

扫描二维码关注公众号,回复: 8814556 查看本文章

程序中有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!

发布了7 篇原创文章 · 获赞 2 · 访问量 357

猜你喜欢

转载自blog.csdn.net/qq_43935969/article/details/104074211