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. IIS写权限漏洞和XFF刷票原理

    IIS写权限漏洞 PUT写入漏洞 此漏洞主要是因为服务器开启了webdav的组件导致的 1.扫描漏洞,yes,可以PUT: 2.用老兵的工具上传一句话文件test.txt,然后move改名为shell ...

  2. 西安邀请赛-E(树链剖分+线段树)

    题目链接:https://nanti.jisuanke.com/t/39272 题意:给一棵树,n个结点,树根为1,n-1条边,每个结点有一个权值.进行3种操作: 1 s t:把1和s之间的最短路径上 ...

  3. Git的常见操作

    1.git init:初始化     git status:查看版本状态     git log : 查看提交日志

  4. JavaRMI框架

     RMI(即Remote Method Invoke 远程方法调用).在Java中,只要一个类extends了java.rmi.Remote接口,即可成为存在于服务器端的远程对象,供客户端访问并提供一 ...

  5. 数据库索引 B+树

    问题1.数据库为什么要设计索引?索引类似书本目录,用于提升数据库查找速度.问题2.哈希(hash)比树(tree)更快,索引结构为什么要设计成树型?加快查找速度的数据结构,常见的有两类:(1)哈希,例 ...

  6. mongoDB数据库文件路径和数据操作

    1.查看MongoDB在电脑上的安装路径 which mongod 2.默认mongodb 数据文件是放到根目录 data/db 文件夹下,如果没有这个文件,需要自行创建 mkdir -p /data ...

  7. 转载Spring Data JPA 指南——整理自官方参考文档

    转载:https://blog.csdn.net/u014633852/article/details/52607346 官方文档 https://docs.spring.io/spring-data ...

  8. scrapy爬取猫眼电影排行榜

    做爬虫的人,一定离不开的一个框架就是scrapy框架,写小项目的时候可以用requests模块就能得到结果,但是当爬取的数据量大的时候,就一定要用到框架. 下面先练练手,用scrapy写一个爬取猫眼电 ...

  9. scrapyd使用教程

    1. 安装服务器: pip install scrapyd 启动: scrapyd 访问:127.0.0.1:6800 2. 安装客户端 pip install scrapyd-client 3. 进 ...

  10. 关于ASP.NET中fileupload控件的缺点

    一.首我来理一理“FileUpload”控件的工作大概原理: FileUpload 控件显示一个文本框控件和一个浏览按钮,使用户可以选择客户端上的文件并将它上载到 Web 服务器.用户通过在控件的文本 ...