CTF PWN入门(一)
1.攻防世界get_shell
将下载好的附件用在Linux中打开命令是./ 文件名
发现没有权限,原来需要先添加权限可使用chmod +x ./ 文件名。
然后nc -nv 111.198.29.45 55973链接到远程主机
***更多chmod介绍https://www.cnblogs.com/peida/archive/2012/11/29/2794010.html
***更多nc命令请看https://www.cnblogs.com/nowgood/p/7219716.html
***更多cat命令详解
https://www.cnblogs.com/zhangchenliang/p/7717602.html
2.CGfsb
题目描述:菜鸡面对着pringf发愁,他不知道prinf除了输出还有什么作用
先用file命令查看文件类型
F5大法分析一波
可以看到取得flag的条件,此时需要找到printf函数的地:0x080486CD,然后利用gdb调试,使用命令gdb -q
,然后设置断点,
然后编写一个Python脚本,参考https://blog.csdn.net/zz_Caleb/article/details/88980866
然后执行该脚本,
得到flag。
**格式化字符串漏洞原理暂时还没看懂先放着https://www.cnblogs.com/ichunqiu/p/9329387.html
**gdb命令详解及技巧
https://blog.csdn.net/qq_31582127/article/details/86173000
3.level0
菜鸡了解了什么是溢出,他相信自己能得到shell
老规矩先用file看看,发现是64位文件,然后使用checksec命令看看开启了什么保护,
发现只开启了NX保护,然后ida f5大法
发现就简简单单的两行代码,也没显示啥大概空间啥的,既然是栈溢出,应该就看看返回的那个值,不难找到另一个函数
buf 这个字符数组的长度只有 0x80,而却可以输入 0x200 的东西,找到了关键的一步了,然后再看看返回的地址
然后再找一个可以夺得最高权限的命令,把三个含system的都看看,发现了在一个callsystem中存在
接下来就找callsystem的地址值了,发现是
0x00400596,
所以脚本关键的一个式子就是payload = ‘A’ * 0x80 + ‘A’ * 0x8 + p64(0x00400596)。
(p64应该是64位程序的意思吧???)
然后仿照第二题写出脚本
执行脚本,ls cat便可得。
**栈溢出原理参考该文章
https://www.anquanke.com/post/id/85138
**checksec文件分析详解
https://blog.csdn.net/luojiabin135/article/details/79638445