-
-
[分享]文件上传学习【二】
-
发表于: 2025-4-9 16:35 1626
-
7、php大小写绕过
原理:在服务器后台php后缀这个被过滤了,但其部分字母大写导致未被过滤,所以可以上传例如:Php、pHp来绕过上传,同时在后台会把这些部分字母大写的后缀当成php文件来解析
绕过:上传Php或pHp文件来进行绕过
实战:upload-labs第六关
查看提示可以看到
这里只禁止了.pHp这个大小写后缀没有限制其他的所以可以上传.Php后缀
可以看到上传成功了
这样就可以了,也可以用蚁剑去连接,这里我们选择看源码
这里可以看到过滤了很多,但没有过滤其他大小写的后缀,主要是这里没有函数将所有后缀变为小写字符
8. 空格绕过
原理:在验证过程中没有使用trim()去除空格,可以使用空格绕过黑名单,因为在php中php≠php“空格”所以导致绕过
绕过:将php的后缀改成php
实战:upload-labs第七关
上传成功
9、Nginx畸形解析
原理:产生条件是 php.ini 里的cgi.fix_pathinfo=1,在这种情况下,当 Nginx 遇到文件路径/test.png/x.php,若/test.png/x.php不存在,则会去掉最后的/x.php,然后判断/test.php是否存在,若存在,则把/test.png当做文件/test.png/x.php解析
绕过:上传一个test.jpg的文件,然后访问的是test.jpg/shell.php,这样就会把test.jpg当作shell.php来使用
实战:这里没办法实战了,我还没遇到过这样的题目,然后我自己要搭建靶机也不知道什么原因也没用了
10、windows文件名解析
原理:利用操作系统对文件命名规则进行绕过,在window操作系统中不允许文件名后缀有“.”、“ ”、“. .”、“:”、"::$DATA"这些后缀的,就会自动给他删除,从而变成正常的php后缀名
绕过:在上传的文件后面添加上这些后缀
实战:上传一个pass9.php::$DATA文件
然后就可以了绕过后端检查连接蚁剑了
11、图片马
原理:上传一个带有一句话木马的图片文件,本质上是有一个文件包含漏洞,然后将这个带有木马的图片文件包含在了php代码中,然后图片中有php代码从而导致执行木马。
实战:先创建两个文件,一个图片文件,一个一句话木马,在windows系统上就可以创造一个简单的图片马
注意这里不能用powershell,得用cmd
这样就制作好了图片马,然后将这个上传上去,在使用一个文件包含从而利用图片马
12、条件竞争
原理:就是在我们上传一个文件之后,这个文件会被保存在目录下,然后在对文件进行检查,如果文件检查通过就可以保存,如果不通过就会删除
绕过:这里就可以上传一个php文件,然后php会执行其中的代码,这个代码的用处是创建一个新的文件,这个文件就是一个一句话木马,在连接这个代码
实战:upload-18
根据代码审计可以看到,这里是先执行了
从而先将这个文件上传上去了,在进行检查后,发现php后缀不符合从而删除文件
因此可以写一个python脚本
就代表执行成功pass18.php的代码
这样就完成了shell.php代码的生成,这个代码不会被检查所以木马上传成功
if
(isset($_POST[
'submit'
])) {
if
(file_exists(UPLOAD_PATH)) {
$deny_ext
=
array(
".php"
,
".php5"
,
".php4"
,
".php3"
,
".php2"
,
".html"
,
".htm"
,
".phtml"
,
".pht"
,
".pHp"
,
".pHp5"
,
".pHp4"
,
".pHp3"
,
".pHp2"
,
".Html"
,
".Htm"
,
".pHtml"
,
".jsp"
,
".jspa"
,
".jspx"
,
".jsw"
,
".jsv"
,
".jspf"
,
".jtml"
,
".jSp"
,
".jSpx"
,
".jSpa"
,
".jSw"
,
".jSv"
,
".jSpf"
,
".jHtml"
,
".asp"
,
".aspx"
,
".asa"
,
".asax"
,
".ascx"
,
".ashx"
,
".asmx"
,
".cer"
,
".aSp"
,
".aSpx"
,
".aSa"
,
".aSax"
,
".aScx"
,
".aShx"
,
".aSmx"
,
".cEr"
,
".sWf"
,
".swf"
,
".htaccess"
,
".ini"
);
$file_name
=
trim($_FILES[
'upload_file'
][
'name'
]);
$file_name
=
deldot($file_name);
/
/
删除文件名末尾的点
$file_ext
=
strrchr($file_name,
'.'
);
$file_ext
=
str_ireplace(
'::$DATA'
, '', $file_ext);
/
/
去除字符串::$DATA
$file_ext
=
trim($file_ext);
/
/
首尾去空
if
(!in_array($file_ext, $deny_ext)) {
$temp_file
=
$_FILES[
'upload_file'
][
'tmp_name'
];
$img_path
=
UPLOAD_PATH.
'/'
.date(
"YmdHis"
).rand(
1000
,
9999
).$file_ext;
if
(move_uploaded_file($temp_file, $img_path)) {
$is_upload
=
true;
}
else
{
$msg
=
'上传出错!'
;
}
}
else
{
$msg
=
'此文件类型不允许上传!'
;
}
}
else
{
$msg
=
UPLOAD_PATH .
'文件夹不存在,请手工创建!'
;
}
}
if
(isset($_POST[
'submit'
])) {
if
(file_exists(UPLOAD_PATH)) {
$deny_ext
=
array(
".php"
,
".php5"
,
".php4"
,
".php3"
,
".php2"
,
".html"
,
".htm"
,
".phtml"
,
".pht"
,
".pHp"
,
".pHp5"
,
".pHp4"
,
".pHp3"
,
".pHp2"
,
".Html"
,
".Htm"
,
".pHtml"
,
".jsp"
,
".jspa"
,
".jspx"
,
".jsw"
,
".jsv"
,
".jspf"
,
".jtml"
,
".jSp"
,
".jSpx"
,
".jSpa"
,
".jSw"
,
".jSv"
,
".jSpf"
,
".jHtml"
,
".asp"
,
".aspx"
,
".asa"
,
".asax"
,
".ascx"
,
".ashx"
,
".asmx"
,
".cer"
,
".aSp"
,
".aSpx"
,
".aSa"
,
".aSax"
,
".aScx"
,
".aShx"
,
".aSmx"
,
".cEr"
,
".sWf"
,
".swf"
,
".htaccess"
,
".ini"
);
$file_name
=
trim($_FILES[
'upload_file'
][
'name'
]);
$file_name
=
deldot($file_name);
/
/
删除文件名末尾的点
$file_ext
=
strrchr($file_name,
'.'
);
$file_ext
=
str_ireplace(
'::$DATA'
, '', $file_ext);
/
/
去除字符串::$DATA
$file_ext
=
trim($file_ext);
/
/
首尾去空
if
(!in_array($file_ext, $deny_ext)) {
$temp_file
=
$_FILES[
'upload_file'
][
'tmp_name'
];
$img_path
=
UPLOAD_PATH.
'/'
.date(
"YmdHis"
).rand(
1000
,
9999
).$file_ext;
if
(move_uploaded_file($temp_file, $img_path)) {
$is_upload
=
true;
}
else
{
$msg
=
'上传出错!'
;
}
}
else
{
$msg
=
'此文件类型不允许上传!'
;
}
}
else
{
$msg
=
UPLOAD_PATH .
'文件夹不存在,请手工创建!'
;
赞赏
- [分享]文件上传学习【二】 1627
- [分享]文件上传学习【一】 4814
- [分享]内网渗透学习,只使用msf进行操作 3867
- [分享]SQL注入简单分享 7225