-
-
[分享]文件上传学习【二】
-
发表于: 2025-4-9 16:35 4830
-
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 . '文件夹不存在,请手工创建!';赞赏
- [分享]文件上传学习【二】 4831
- [分享]文件上传学习【一】 7708
- [分享]内网渗透学习,只使用msf进行操作 4837
- [分享]SQL注入简单分享 7902