pwnable.krloveletter 经验总结

it2022-05-05  224

解题思路: 虽然程序开了CANARY保护,但是仔细观察在protect函数中存在缓冲区溢出," #&;`’"|*?~<>^()[]{}$\" 输入的名字中有其中之一的话该字符就会被拓展成一个3个字节大小的爱心,所以可以在发送的字符串中加入 ’ \ '字符来拓展字符串,从而造成溢出

一开始我是想缓冲区全部由爱心填满,然后覆盖 v5 ,v7 的值然后把/bin/sh 命令写进去,但是我发现发送了80 个 ’ \ ’ 个字符后,栈的数据就被弄的乱七八糟了,按理说 80个 ‘’ 会被拓展成240个字节,还没超过 s 的缓冲区, 但是程序确实崩溃了,想了很久也找不出原因,最后还是去找了别人的wp

看的wp中的思路比较清晰,溢出控制v5 的值为1, 先只读入’ echo i love ’ 中的 ’ e ‘, 之后再把 ’ nv sh -c sh …’ 发送过去,就能getshell了, payload = 'nv sh -c sh ’ + '\'2 + (256 - len('nv sh -c sh ') - 2 - 4)‘a’ + p32(0x1) 混入两个 ’ \ ’ 是字符串增加 4 个字节, 使得最后 的p32(0x1) 覆盖 v5, 另外 'env sh -c sh ’ 后面跟什么字符都不会影响getshell, 最后的sh 后面一定要有空格

学到的知识点: 1. 'env sh -c sh’ 在终端下 输入这条命令会 前面的env 好像不起什么作用,去掉它 这条命令的作用都是一样的

man 了一下 'sh‘ 命令的作用,sh -c ‘string’ ,会执行string字符串的内容 比如: 对这个 ‘sh’ 的作用还是不怎么清晰,先记着吧

参考的wp


最新回复(0)