Pwn-CTF 2018红帽杯redhat GameServer题目writeup

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

开始前的例行叨叨:

学pwn萌新,欢迎交流赐教~



先放一波题目:

我传了github上 pwn2就是题目了。( 若有侵权,请博客留言立马删除)

https://github.com/staticStr/ForCTF/blob/master/pwn2



来看看这个程序是做什么用的

功能很简单,输入名字,职业,就会问你是否要修改,填Y修改,写一个新的进去。

ida打开分析一波,顺手把变量名能改就改了,分析看图吧。



开始想办法溢出

从图里看到了溢出点,是read函数的参数nbytes可控,溢出s变量。


那如何控制nbytes呢?

nbytes是snprintf函数的返回值,我们看一下snprintf这个函数。


snprintf这个函数用来格式化字符串,把name和occ会填入%s %s的位置中,拼成字符串,赋给s

若拼好的字符串长度大于第二个参数限定的0x100,返回值就会变成预计写入的长度。

也就是说,若字符串把name和occ拼进去后变成了0x200长度,那么snprintf的返回值就会是0x200,若出错返回-1。

那么可以控制输入的名字和职业,控制nbytes的长度了。



那么第二个问题:

需要多长才能溢出read函数呢?


具体的需要本地搭建后用语句测试了。

但大概猜一下,预期的变量&s的长度是sp+7

下一个变量v2是sp+107

之间隔了0x100也就是256个长度,那想要溢出至少要read256长度<

CTF总结-PWN 一、通用过程 通过file指令查看二进制文件是32位还是64位,这个影响特别大(涉及参数的传递方式) 通过checksec指令查看可执行文件的保护措施开启情况 运行一下这个可执行文件,了解一些程序运行流程 开始通过pwntools解题 pwntools 二、缓冲区溢出攻击 寻找可以进行攻击的位置 通过cyclic [number] 获得一个长度为number的序列 在攻击处输入上一步获得的序列,查看报错信息 通过cyclic -l [序列] 来判断从第几位开始覆盖的是返回地址 构造payload 构造 阅读详情

相关推荐

2021-RedHat-CTF-WP【WEB】

WEB 1.find_it:文件fuzz 代码审计 1.1 PHP代码分析 2.framework: Yii—CVE-2020-15148反序列化 2.1源码分析 3.WebsiteManger:布尔型盲注 4.easy cms for you WEB 1.find_it:文件fuzz 代码审计 拿到目标靶机,常规WEB渗透思路对目标进行信息搜集、端口探测、目录探测等等。目录探测在robots.txt文件中发现了信息。 告诉我们存在1ndexx.php,但是直接访...

afei001 670

pattern.py

pattern.py 用来触发错误,探测返回地址等等。按照规律生成输入,方便定位。

pattern.py脚本

很多情况下可能会用到pattern这个脚本,虽然在peda中有可以使用,不过还是上传一个源码使用起来比较方便。

PWN简单利用堆栈溢出漏洞

PWN简单利用堆栈溢出漏洞PWN简单利用堆栈溢出漏洞0x01 栈的介绍栈是什么栈的特点栈中如何存储数据0x02 函数调用栈寄存器分配0x03 栈帧结构例题:堆栈溢出漏洞利用0x01.运行程序、查看文件类型 和 保护措施0x02.反汇编分析0x03.调试分析payload0x04.payload生成脚本0x05.总结 PWN简单利用堆栈溢出漏洞 0x01 栈的介绍 栈是什么 栈都是一种数据项按序排列的数据结构。 栈的特点 先入先出,先后放入栈中的数据要先取出来。 栈的地址从高处向低处增长,且栈是一块连续区

weixin_43891422的博客 2107

一步一步学ROP之linux_x64篇

一步一步学ROP之linux_x64篇 一、序 **ROP的全称为Return-oriented programming(返回导向编程),这是一种高级的内存攻击技术可以用来绕过现代操作系统的各种通用防御(比如内存不可执行和代码签名等)。上次我们主要讨论了linux_x86的ROP攻击:《一步一步学ROP之linux_x86篇》,在这次的教程中我们会带来上...

weixin_34204057的博客 461

2018红帽icm WP

前言这题基本上就考察一个idea算法。简单分析一下程序,可以知道flag长度为42。显示使用idea进行加密,然后hex->逆序->异或过程这题的难点还是在idea算法的解密上。刚开始也不知道是什么加密方式。 无独有偶,看到了这个奇怪的字符串。然后百度了一下,发现是idea算法。但是有关这个算法的相关的资料很少,只找到了c的源程序,自己编译了一下,刚开始尝试发现找不到密匙,不对,于是IDA打开,进

BadRer的博客 500

2018红帽线上预选赛wp---Web

1. simple upload 首先使用弱口令登录试试,页面没啥变化,设置代理,Burp Suite抓包 发现cookieadmin=0,将其值改为1,跳转到新页面, 编辑php一句话,保存为jpg图片上传, 在Burp Suite中修改文件名为1.php, 可以上传,但是发现并不解析 尝试了asp,aspx,jsp,发现jsp可以执行,重新上传jsp即...

wkend的博客 704

BUUCTF - [2019红帽]easyRE

BUUCTF - [2019红帽]easyRE 个人认为这道题是最近我刷的题目中难度较高的了,也是自己能力问题,不多说了,开始做题 这篇文章配图规律为,图片在上文字在下,希望大家还看到习惯 拖入die分析,elf64位文件,打开Linux跑跑看 输错就退出,毫不讲理… 那咱直接上静态分析吧,这里跟大家说一下哈,我的做题的习惯一般是静态分析无果,才去寻求动态调试,并不是说这道题用动态的方法做不出来,有能力的师傅可以自己去动态,我就继续坚持我的习惯了。 shift+F12看看字符,看到字符表,肯定用到了

:-) 1260

24.Python-pattern匹配列表中的值

pattern匹配特定的内容

weixin_43346403的博客 288

第二届红帽线上初赛 RedHat 2018 WriteUp

又是一个划水的比赛,作看高中生吊打全场orz,太强了。WEBsimple upload进入一个登陆页面,抓包之后发现cookie有admin=0改成1之后进入了一个上传页面,获取指纹之后,明显是Apache Tomcat,传一个一句话asp马过去试试。上传yulige.jsp.jpg&lt;% if("023".equals(request.getParameter("pwd"))){ ...

郁离歌丶的博客 5963

ret2shellcode 的泄露puts@got表

现在rip在main+4处没执行puts,执行puts 后可以看到puts_got=> 0X601018里保存的是0X7FFDAA4E5430,可以使用ni si 进行调试看是否前后值有变化。手动设置栈上的值 发现 pop_rdi_ret设置的值 变换为0x4006f3 =》0x7fff004006f3(原因不明)发现read@got.pltb保存了read函数的blic中的地址。call read—> read的plt表 —>read的got表。jmp到的其实这是plt表对应函数的got表。

wing_7的博客 1356

CTFWIKI-PWN-ret2libc

一遍我们只能找到got表的泄露 我们要写入的话就要重新执行一下 所以等等通过把start的地址存入返回地址 让程序执行两次。puts函数的真实地址 和 通过LibcSearcher工具得到的偏移量 就可以计算出每个函数的基地址。这里有一个问题 为什么我们需要找到开始的地址 _start表示程序开始的地址。如果我们无法找到system的plt地址 那我们就无法调用system函数。不是地址不会变 是函数和puts真实地址的之间的链接是不会变的。所以我们只要使用puts函数的真实地址 求出他们之间的链接。

m0_64180167的博客 1469

CTF套路总结

命令连接符 一些绕过方法 WAF限制方法之 黑名单检测 !!!另类的绕过方法 很多ctf题目未对tar命令进行过滤,可以用tar命令将整个文件夹进行打包,然后下载下来 其他情况 空格检测绕过 一般情况:WAF对某些字符串做了过滤 用字符串拼接绕过 用编码绕过 用引号绕过 用\绕过 用通配符绕过 WAF限制方法:执行命令长度限制 用短文件名拼接进行绕过 php存在命名空间这个概念,所以内置函数都是在\这个根命名空间下(如\eval),利用这个特性可以绕过针对字符

weixin_44657855的博客 1072

[2019红帽]easyRE1题解

buuctf-[2019红帽]easyRE1题解

于高山之巅,方见大河奔涌;于群峰之上,更觉长风浩荡。 2586

CTF-PWN学习-为缺少指导的同学而生

入门PWN不可能无痛,但尽量会减轻大家的痛苦,怎么说呢,就像博主在你们前面一步的位置,帮你们挡着一点风浪前进。

yuwoxinanA3的博客 2万+

CTF PWN特点:入门难、进阶难、精通难

通过第1点中描述,在执行call sum的时候,会将sum 的下一条命令的执行地址0x8048438压入栈中,然后程序进入sum片段进行执行,此时,0x8048438地址就是sum函数的返回地址,即 return address。当执行到ret时,栈空间如下栈地址值0xffffceac0x8048438 # sum的下一条指令0xffffceb01 # a 的值0xffffceb42 # b 的值当执行完ret后,栈空间为。

IT_huanhuan的博客 2326

ctf pwn 萌新学习记录 基本rop(题目来自Wiki)

此后又发现在 secure 函数又发现了存在调用system(“/bin/sh”) 的代码,那么如果我们直接控制程序返回至 0x0804863A,那么就可以得到系统的 shell 了。我们控制执行程序已有的代码的时候也可以控制程序执行好几段不相邻的程序已有的代码 (也就是 gadgets),这就是我们所要说的 ROP。下面就是我们如何构造 payload 了,首先需要确定的是我们能够控制的内存的起始地址距离 main 函数的返回地址的字节数。发现错了(原因:IDE可能会把栈的长度测量错了)

weixin_73481933的博客 2025

ctf——pwn堆的基础知识

1前言 一、笔者想说 笔者是一个不大聪明的pwn的新手,这是我根据《ctf权威竞赛指南》,b站课程,一些师傅的博客,ctfviki做的笔记,便于学习和复习 如果有错误的地方还请给位师傅指正 二、调试 下面所展示的gdb调试是根据一下调试的 注意: 1、调试记得执行到malloc后再去查看 2、记得编译 一、glibc堆概述 1)堆概述 堆是程序虚拟内存中由低地址向高地址增长的线性区域,出于效率和页对齐的考虑,通常会分配相当大的连续内存。程序再次申请时便会从这片内存中分配,直到堆空间

m0_64195960的博客 4365

PWN学习总结

一、栈溢出原理     什么是栈溢出栈溢出就是缓冲区溢出的一种。 由于缓冲区溢出而使得有用的存储单元被改写,往往会引发不可预料的后果。程序在运行过程中,为了临时存取数据的需要,一般都要分配一些内存空间,通常称这些空间为缓冲区。如果向缓冲区中写入超过其本身长度的数据,以致于缓冲区无法容纳,就会造成缓冲区以外的存储单元被改写,这种现象就称为缓冲区溢出。缓冲区长度一般与用户自己定义的缓冲变量的类型有关。(PS:摘自百度百科)     简单来说,就是程序没有检查用户输入的数据长度,导致攻击者覆盖栈上不是程序希望写

windy_ll的博客 2758
上一篇: 从源码编译SqlCipher并修改代码实现c++中调用dll解密微信数据库
下一篇: SQL二阶注入写shell问题——Joomla3.8.2漏洞为例
publicStr
博客等级 码龄8年 40粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值