某安全竞赛题二

第二题

程序运行

开启端口12543

ida打开程序,在函数initFunctions中会将之后要使用的系统函数以及字符串的地址保存在一个表中。

如下图

之后会调用函数parrot如下图,在该函数中会调用unk_603820处的函数,通过之前的initFunction函数可发现该处对应函数callFuntion。

在callfunction函数中,首先会调用mmap函数分配一段可执行内存,之后会将加密过的服务器通信函数拷贝到该断内存中,然后解密这段内存,最后运行,而该题的溢出点也发生在该被加密的函数中。

调用mmap函数分配内存,该处分配的内存为0x7ffff7ff6000

之后将加密之后的函数字符串拷贝到该内存中(此处使用函数memcpy函数进行拷贝,源地址为0x400eb8,目标地址为0x7ffff7ff6000)

拷贝前后

之后调用函数dectyptFunction函数进行解密

解密之后

通过gdb的反编译很容易发现此处是一个函数,开头通用的堆栈操作

发送一段超长字符,程序崩溃

通过ida发现,改程序中可能造成溢出的函数只有memory,同时因为溢出漏洞的函数被加密,调试的时候不便直接对该处下断点(必须等到内存解密),因此我们对函数memory的函数表下硬件读断点(因为该处肯定会被加密函数使用到,因此断下之后肯定位于被解密的函数中)。

运行发包之后断在函数0x7ffff7ff6129中,此处读取了memcpy的地址,同时在0x7ffff7ff615a出发生了溢出

查看此时的堆栈,以及寄存器rbx,即可发现该处确实是memcpy

此时的堆栈,返回地址0x7fffffffe308处的数据已经被覆盖

查看覆盖偏移,为280

重新构造发送的数据包。

此时eip已被控制。

该题的总思路就是服务器会将用于和用通信的函数加密,只在程序运行的时候动态解密,但是该函数中对传入的数值长度没有做校验导致溢出,稍微麻烦的就是处理加密函数。

时间: 2024-08-01 22:49:28

某安全竞赛题二的相关文章

圆内接多边形面积最大值问题之探究: 从一道加拿大数学竞赛题谈起

1. 一道数学奥林匹克竞赛题: 给定半径为 $r$ 的圆上定点 $P$ 的切线 $l$, $R$ 是该圆上动点, $RQ\perp l$ 于 $Q$, 试确定面积最大的 $\triangle{PQR}$. (第13届加拿大数学奥林匹克竞赛) 解答: 本题难度不大, 只需考虑在 $\bigodot{O}$ 内找到与 $\triangle{PQR}$ 相关的三角形即可. 过 $R$ 作 $RS \parallel l$ 交 $\bigodot{O}$ 于 $S$, 作 $PM \perp RS$.

python接口自动化测试(二)-requests.post()

上一节介绍了  requests.get()  方法的基本使用,本节介绍  requests.post()  方法的使用: 本文目录: 一.方法定义 二.post方法简单使用 1.带数据的post 2.带header的post 3.带json的post 4.带参数的post 5.普通文件上传 6.定制化文件上传 7.多文件上传 一.方法定义: 1.到官方文档去了下requests.post()方法的定义,如下: 2.源码: 3.常用返回信息: 二.post方法简单使用: 1.带数据的post:

二维码扫码积分系统定制开发

微信积分系统 二维码扫码积分系统定制开发找丽姐[158.1816.6626/电微]二维码营销模式系统定制开发 微信扫二维码营销系统开发 扫码领积分系统开发 一.如何实现扫二维码领红包功能? 1.使用扫描二维码领取红包对活动进行设置,包括红包数量.红包金额.促销地区.中奖概率等. 2.将生成的二维码赋到商品上面并赋涂层,一方面可以起到保证二维码的一次性,另一方面也可以引起消费者的好奇心. 3.通过手机微信打开扫一扫,扫码商品二维码关注公众号并领取红包,如果参与分享还可以获得抽奖的机会. 二.微信扫

微信生成二维码 只需一个网址即刻 还有jquery生成二维码

<div class="orderDetails-info"> <img src="http://qr.topscan.com/api.php?text=http://123.net/index.php?s=/Home/Index/yanzheng/mai/{$dange.id}" style="width: 5rem; margin-bottom: 1rem;" > </div> http://qr.tops

家电二维码售后服务平台系统开发

家电二维码售后服务平台系统开发,家电二维码售后系统开发,小吴183.2071.6434微电,家电二维码售后软件开发,家电二维码售后平台开发. 互联网平台的节点有两大类型:第一基数节点,也就是弱连接的节点,其规模要大,越大越好,互联网的价值与节点数的平比成正比.第二活跃节点,也就是强连接的节点,其能量要强,越强越好,互联网的价值与其强度成正比. 一.家电维修行业"维修黑幕"层出不穷 记者从一位从事家电维修人士那里了解到,目前行业公认当前家电维修行业有陷阱,"维修黑幕"

MySQL(九)之数据表的查询详解(SELECT语法)二

上一篇讲了比较简单的单表查询以及MySQL的组函数,这一篇给大家分享一点比较难得知识了,关于多表查询,子查询,左连接,外连接等等.希望大家能都得到帮助! 在开始之前因为要多表查询,所以搭建好环境: 1)创建数据表suppliers 前面已经有一张表是book表,我们在建立一张suppliers(供应商)表和前面的book表对应. 也就是说 让book中s_id字段值指向suppliers的主键值,创建一个外键约束关系. 其实这里并没有达到真正的外键约束关系,只是模拟,让fruits中的s_id中

winform学习日志(二十三)---------------socket(TCP)发送文件

一:由于在上一个随笔的基础之上拓展的所以直接上代码,客户端: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Net.Sockets; using Sys

算法 排序NB二人组 堆排序 归并排序

参考博客:基于python的七种经典排序算法     常用排序算法总结(一) 序前传 - 树与二叉树 树是一种很常见的非线性的数据结构,称为树形结构,简称树.所谓数据结构就是一组数据的集合连同它们的储存关系和对它们的操作方法.树形结构就像自然界的一颗树的构造一样,有一个根和若干个树枝和树叶.根或主干是第一层的,从主干长出的分枝是第二层的,一层一层直到最后,末端的没有分支的结点叫做叶子,所以树形结构是一个层次结构.在<数据结构>中,则用人类的血统关系来命名,一个结点的分枝叫做该结点的"

python接口自动化测试(二)-requests.get()

环境搭建好后,接下来我们先来了解一下requests的一些简单使用,主要包括: requests常用请求方法使用,包括:get,post requests库中的Session.Cookie的使用 其它高级部分:认证.代理.证书验证.超时配置.错误异常处理等. 本节首先来了解一下requests库中如何发送get请求: 一.看下方法定义: 1.到官方文档去了下requests.get()方法的定义,如下: 2.点击右上角的[source],看一下它的源码如下: 看到最后一行return,get方法