[BUUCTF]PWN12——[BJDCTF 2nd]r2t3

题目网址:https://buuoj.cn/challenges#[BJDCTF%202nd]r2t3

步骤:
例行检查,32位,开启了NX保护

nc一下看看程序的大概执行情况

32位ida载入,shift+f12查看程序里的字符串,看到了system函数和 ‘/bin/sh’ 字符串

双击跟进,ctrl+x找到调用改字符串的函数,找到了程序里的一个后门函数,shell_addr=0x804858B

根据nc得到的提示字符串,找到输入点,第10行的read对读入的buf进行了限制,没法造成溢出

看一下name_check函数,改函数检查了我们输入的字符串的长度,长度得要在4~7之间

这边注意一下,用来表示字符串长度的参数v3,它定义的类型是unsigned_int8(无符号整型),它所能表示的数的范围是0~2^8-1(255),而我们读入的字符串buf的最大长度是0x400(1024),1024超过了v3所能表示的范围,所以 这里存在整数溢出漏洞,关于整数溢出的具体讲解–>看这里

关于strlen()这个函数,上述链接里也有提到,如果参数的长度大于了它的固定的长度,就会将前面的扔掉,留下剩下的
举个例子:a的长度为260,b也是定义的unsigned_int8,因此b=strlen(a)=260-255=5
我们就可以利用strlen函数的这一点来绕过长度的检查,根据上述,我们可以用来绕过长度检查的字符串的长度应该是255+4(259) ~ 255+7(262)

这边提一下shell_addr=0x804858B,它的长度是4字节,0x08、0x04、0x85、0x8B,从后往前,两位一字节,不足补0

在我们通过长度检查之后,13行会将我们输入的字符串赋值到dest中,看一下dest在栈上的位置

在这里看到了它在栈上的位置,它距离返回地址r=0x4-(-0x11)=0x15,因此我们在构造输入字符串的时候可以先输入0x15个a用来定位到返回地址,然后将返回地址填上shell_addr,之后补上(260-0x15-4)个长度的a来绕过长度检查

完整EXP

from pwn import*

r=remote('node3.buuoj.cn',25177)
shell_addr=0x804858B payload='a'*0x15+p32(shell_addr)+'a'*(260-0x15-4) r.sendline(payload)
r.interactive()

[BUUCTF]PWN12——[BJDCTF 2nd]r2t3的更多相关文章

  1. [BUUCTF]PWN15——[BJDCTF 2nd]one_gadget

    [BUUCTF]PWN15--[BJDCTF 2nd]one_gadget 附件 步骤: 例行检查,64位,保护全开 nc试运行一下程序,看看情况,它一开始给了我们一个地址,然后让我们输入one ga ...

  2. [BUUCTF]PWN——[BJDCTF 2nd]ydsneedgirlfriend2

    [BJDCTF 2nd]ydsneedgirlfriend2 附件 步骤: 例行检查,64位程序,开启了canary和nx 试运行一下程序,看看大概的情况,经典的堆块的布局 64位ida载入,习惯性的 ...

  3. [BUUCTF]PWN——[BJDCTF 2nd]secret

    [BJDCTF 2nd]secret 附件 步骤: 例行检查,64位程序,开启了canary和nx 本地试运行一下,看看程序大概的情况,好像是一个什么游戏 64位ida载入,检索程序里的字符串,发现了 ...

  4. [BUUCTF]REVERSE——[BJDCTF 2nd]8086

    [BJDCTF 2nd]8086 附件 步骤: 首先查壳儿,无壳,直接上ida,检索字符串,程序里就一个字符串 没法f5反编译出伪代码,大致看了一下汇编,start函数之后调用了sub_10030函数 ...

  5. [BUUCTF]PWN——[BJDCTF 2nd]r2t4

    [BJDCTF 2nd]r2t4 附件 步骤 例行检查,64位,开启了canary和nx 64位ida载入,检索字符串的时候发现了后面函数,shell_addr=0x400626 main函数 可以溢 ...

  6. [BUUCTF]REVERSE——[BJDCTF 2nd]guessgame

    [BJDCTF 2nd]guessgame 附件 步骤: 例行查壳儿,64位程序,没有壳儿 64位ida载入,习惯性的检索程序里的字符串,看到了一串类似flag的字符串,拿去提交,成功 BJD{S1m ...

  7. [BUUCTF]PWN——[BJDCTF 2nd]test

    [BJDCTF 2nd]test 步骤 根据题目,ssh连接一下靶机 登录成功后,ls看一下当前目录下的文件,根据提示可知,我们没法直接获取flag字符串,但是我们可以读取test的源码, test. ...

  8. [BJDCTF 2nd]fake google

    [BJDCTF 2nd]fake google 进入页面: 试了几下发现输入xxx,一般会按的格式显示, P3's girlfirend is : xxxxx 然后猜测会不会执行代码,发现可以执行 & ...

  9. BUUOJ [BJDCTF 2nd]elementmaster

    [BJDCTF 2nd]elementmaster 进来就是这样的一个界面,然后就查看源代码 转换之后是Po.php,尝试在URL之后加上看看,出现了一个“.“ ....... 迷惑 然后看了wp 化 ...

随机推荐

  1. [loj2978]杜老师

    假设所有素数从小到大依次为$p_{1},p_{2},...,p_{k}$,我们将$x$转换为一个$k$位的二进制数,其中从低到高第$i$位为1当且仅当其$p_{i}$的幂次为奇数 不难发现以下两个性质 ...

  2. Nginx大厂面试需要掌握多少v1.21.3

    概述 **本人博客网站 **IT小神 www.itxiaoshen.com Nginx官网 最新版本为1.21.3 Nginx (engine x) 是一个开源的.高性能的HTTP和反向代理web服务 ...

  3. 【Cloud Computing】Hadoop环境安装、基本命令及MapReduce字数统计程序

    [Cloud Computing]Hadoop环境安装.基本命令及MapReduce字数统计程序 1.虚拟机准备 1.1 模板机器配置 1.1.1 主机配置 IP地址:在学校校园网Wifi下连接下 V ...

  4. HAOI 2018 Round 1 题解

    无聊了开一套省选题刷刷--u1s1 感觉三个题都不错,难度也挺有梯度,是一道标准的省选难度的题(话说 CSP 前你刷省选题干嘛/ts/ts) 小 C 珂海星 T1:P4495 [HAOI2018]奇怪 ...

  5. HDU 6116 路径计数

    HDU 6116 路径计数 普通生成函数常用于处理组合问题,指数生成函数常用于处理排列问题. 考虑 对于 $ a $ 个 $ A $ 分为很多堆,这么分的方案数是 $ C_{a-1}^{i-1} $ ...

  6. DirectX12 3D 游戏开发与实战第七章内容(上)

    利用Direct3D绘制几何体(续) 学习目标 学会一种无须每帧都要刷新命令队列的渲染流程,以此来优化性能 了解另外两种根签名参数类型:根常量和根描述符 探索如何在程序中生成和绘制常见的几何体:如栅格 ...

  7. Navicat 激活教程2021(Linux)

    Navicat 激活教程2021(Linux) 目录 背景 环境 激活 清理 使用 背景 Navicat 是香港卓软数字科技有限公司生产的一系列 MySQL.MariaDB.MongoDB.Oracl ...

  8. Linux下脚本文件第一行的作用

    Linux下脚本文件第一行的作用 在Linux/Unix系统中,你可以在脚本hello.py顶部添加以下命令让Python脚本可以像SHELL脚本一样可直接执行: #! /usr/bin/env py ...

  9. char和varchar2

    1.CHAR的长度是固定的,而VARCHAR2的长度是可以变化的. 比如,存储字符串"abc",对于CHAR (10),表示你存储的字符将占10个字节(包括7个空字符) 而同样的V ...

  10. RabbitMQ消息中介之Python使用

    本文介绍RabbitMQ在python下的基本使用 1. RabbitMQ安装,安装RabbitMQ需要预安装erlang语言,Windows直接下载双击安装即可 RabbitMQ下载地址:http: ...