0x00: dragon 是一个UAF漏洞的利用。

  • UseAfterFree 是堆的漏洞利用的一种 简单介绍 https://www.owasp.org/index.php/Using_freed_memory
  • 简单的来说就是 再次使用了 free 掉的内存

0x01:简单看一下

运行起来看一下

是一个RPG游戏,有两种角色,每个角色的技能不一样(战士法师之类的吧...)

在进IDA分析的时候,发现龙是分两种的 baby_dragon 和 mommy_dragon,两种的血量和攻击力也各不相同。

而且龙的结构体是通过动态分配,填充数据,在龙死亡之后这部分内存free掉,再次游戏就会再分配内存...如此循环

此外,发现一个神秘关卡

看着很美好,但是没什么x用,读取字符串限定长度,所以从这里拿不到shell的~

0x02:分析

还是要从内存分配上下手,只有先打赢dragon才可以free内存,再次分配,才会有机会玩。

会去看看龙的结构体
在dragon结构体中,表示血量的数据存储在 eax+8 的地方,还是 1 byte 的大小,范围应该是 0~127
龙种类有两种,我们需要出现mama dragon(血多,打的少)

龙的血量在小于零的时候就会死亡!这点很关键。

RPG游戏的角色有两个,knight和priest。每个角色技能不一样。
priest 的 3 可以 使用mp 使得 dragon攻击无效,这时候dragon血量会恢复。那就可以使用priest,耗到dragon血量 溢出,一旦小于零(溢出),那么dragon就死了,也就是让它加血加到溢出。
 
0x03:控制流程
IDA里查看流程,在胜利之后,free() 之后又重新malloc分配了龙的结构体,这时候 在输入名字的时候,我们可以控制4字节。(call eax)
 
也就是:先死亡一次,再利用priest角色的技能使龙加血加到溢出 死亡后有控制4字节的机会,把那4字节填充成system("/bin/sh")的地址,就可以拿到shell了。
 
0x04:怎么操作
 
大概流程:
  1. 故意死亡一次
  2. 选择priest角色  332 的操作3轮
  3. 最后程序会有输入,这时候写入4字节到eax,之后程序会call eax
 
验证漏洞
 
写出exp打远程服务器
 
打一发之后
 
 
 
哈哈哈 搞定了
 
结束语: UAF 挺有意思~ 顺便把pwnable.kr的UAF那个关卡也给秒了~挺简单的 就不写了
 
 

[pwnable.kr]Dragon的更多相关文章

  1. Pwnable.kr

    Dragon —— 堆之 uaf 开始堆的学习之旅. uaf漏洞利用到了堆的管理中fastbin的特性,关于堆的各种分配方式参见堆之*bin理解 在SecretLevel函数中,发现了隐藏的syste ...

  2. pwnable.kr的passcode

    前段时间找到一个练习pwn的网站,pwnable.kr 这里记录其中的passcode的做题过程,给自己加深印象. 废话不多说了,看一下题目, 看到题目,就ssh连接进去,就看到三个文件如下 看了一下 ...

  3. pwnable.kr bof之write up

    这一题与前两题不同,用到了静态调试工具ida 首先题中给出了源码: #include <stdio.h> #include <string.h> #include <st ...

  4. pwnable.kr col之write up

    Daddy told me about cool MD5 hash collision today. I wanna do something like that too! ssh col@pwnab ...

  5. pwnable.kr brainfuck之write up

    I made a simple brain-fuck language emulation program written in C. The [ ] commands are not impleme ...

  6. pwnable.kr login之write up

    main函数如下: auth函数如下: 程序的流程如下: 输入Authenticate值,并base64解码,将解码的值代入md5_auth函数中 mad5_auth()生成其MD5值并与f87cd6 ...

  7. pwnable.kr详细通关秘籍(二)

    i春秋作家:W1ngs 原文来自:pwnable.kr详细通关秘籍(二) 0x00 input 首先看一下代码: 可以看到程序总共有五步,全部都满足了才可以得到flag,那我们就一步一步来看 这道题考 ...

  8. pwnable.kr simple login writeup

    这道题是pwnable.kr Rookiss部分的simple login,需要我们去覆盖程序的ebp,eip,esp去改变程序的执行流程   主要逻辑是输入一个字符串,base64解码后看是否与题目 ...

  9. pwnable.kr第二天

    3.bof 这题就是简单的数组越界覆盖,直接用gdb 调试出偏移就ok from pwn import * context.log_level='debug' payload='A'*52+p32(0 ...

随机推荐

  1. 什么是云数据库RDS PostgreSQL 版

    PostgreSQL被业界誉为“最先进的开源数据库”,面向企业复杂SQL处理的OLTP在线事务处理场景,支持NoSQL数据类型(JSON/XML/hstore).支持GIS地理信息处理. 优点 NoS ...

  2. 如何让 node 运行 es6 模块文件,及其原理

    如何让 node 运行 es6 模块文件,及其原理 最新版的 node 支持最新版 ECMAScript 几乎所有特性,但有一个特性却一直到现在都还没有支持,那就是从 ES2015 开始定义的模块化机 ...

  3. ProGuard 最全混淆规则说明

    Input/Output Options 输入输出选项 -include filename 递归引入目录的配置文件 -basedirectory directoryname -injars class ...

  4. EJS学习(二)之语法规则上

    标签含义 <% %> :'脚本' 标签,用于流程控制,无输出即直接使用JavaScript语言. <%= %>:转义输出数据到模板(输出是转义 HTML 标签)即在后端定义的变 ...

  5. Qt 按键键值 与 相关字符串 的映射表(转)

    Qt快捷键 映射     "Esc",/*Qt::Key_Escape 0x01000000 */ "Tab",/*Qt::Key_Tab 0x01000001 ...

  6. katalon设置Android SDK路径

    本文链接:https://blog.csdn.net/feiniao8651/article/details/82809147文章允许转载,请注明来源:https://blog.csdn.net/fe ...

  7. Spring Cloud netflix 概览和架构设计

    pring Cloud是基于Spring Boot的一整套实现微服务的框架.他提供了微服务开发所需的配置管理.服务发现.断路器.智能路由.微代理.控制总线.全局锁.决策竞选.分布式会话和集群状态管理等 ...

  8. C# 递归式快速排序算法

    static void Main(string[] args) { Console.WriteLine("************快速排序*****************"); ...

  9. 02-jar包操作---引用本地包--maven项目

    在idea工具中,普通项目的话,直接在jar上右键add as library就行了. 如果是maven项目 可以将包,放入lib目录下,然后在pom文件配置引用.例子: <!--引入非本地仓库 ...

  10. 个人作业4-ALpha项目测试

    这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1/ 这个作业要求在哪里 https://edu.cnbl ...