BUU UPLOAD COURSE
从页面源代码可以知道有一个文件包含的漏洞
<form action="index.php?file=upload.php" method="post" enctype="multipart/form-data">
先上传一个图片马,然后包含图片马试试。
显然图片马被重命名的扩展名也变了。但是不妨碍打开它。
成功
[极客大挑战 2019]Upload
测试时发现可以上传 .phtml文件
和文件内容不能含有 <?
访问 info.phtml
。
http://2dc69a31-ef8e-4683-8e36-96235b32a56b.node3.buuoj.cn/upload/info.phtml
成功
[SUCTF 2019]CheckIn
测试发现,不能上传有文件扩展名中有ph
字符串的文件,可以上传.htaccess
文件,但是用到了exif_imagetype()
函数来检查文件的格式。因为.htaccess
文件格式非常严格,所以也用不了。
.user.ini.与.htaccess
.htaccess
仅能用于apache下,并且内容严格,不能有错误行,如:GIF89a
.user.ini
网上对这个的分析有很多我就不复述了。下面是参考的链接
https://xz.aliyun.com/t/6091#toc-1
利用条件:
1.服务器脚本语言为PHP
2.apache,iis,nginx都可以,只要服务器使用CGI/FastCGI模式
3.上传目录下要有可执行的php文件
上传一个.user.ini
,配合 auto_prepend_file
或者 auto_append_file
GIF89a
auto_prepend_file=zjh.jpg
大概意思时:指定一个 zjh.jpg
文件,在执行某个php文件时会先把 zjh.jpg
包含到这个 php文件前面。
再上传图片马 zjh.jpg
只要访问 index.php
脚本就会先把 zjh.jpg
包含进去。
用蚁剑连接成功。
看源码发现用了
正则做 黑名单 。(出题人
.htaccess
少打了一个 c )
对<?
做了检测
用exif_imagetype()
函数检验图片的正确性
$extension = substr($name, strrpos($name, ".") + 1);
if (preg_match("/ph|htacess/i", $extension)) {
die("illegal suffix!");
}
if (mb_strpos(file_get_contents($tmp_name), "<?") !== FALSE) {
die("<? in contents!");
}
$image_type = exif_imagetype($tmp_name);
if (!$image_type) {
die("exif_imagetype:not image!");
}
[ACTF2020 新生赛]Upload
JS检验+黑名单漏洞
前端有一个checkFile()
的JS函数检验上传文件的扩展名,修改一下绕过。
burp suite黑盒发现可以上传 .phtml
文件。
直接上传图片马,burp suite 抓包改后缀为 .phtml
,成功。
看源码
$file_name = $_FILES['upload_file']['name'];
$ext = pathinfo($file_name,PATHINFO_EXTENSION);
if(in_array($ext, ['php', 'php3', 'php4', 'php5'])) {
exit('nonono~ Bad file!');
}
显然就是黑名单不全面。
[GXYCTF2019]BabyUpload
考点:
content-type
检验
<?
的检验
.htaccess
配置文件的上传
看源码:
if(preg_match("/ph/i", strtolower($uploaded_ext))){
die("后缀名不能有ph!");
}
else{
if ((($_FILES["uploaded"]["type"] == "
") || ($_FILES["uploaded"]["type"] == "image/jpeg") || ($_FILES["uploaded"]["type"] == "image/pjpeg")) && ($_FILES["uploaded"]["size"] < 2048)){
$content = file_get_contents($uploaded_tmp);
if(preg_match("/\<\?/i", $content)){
die("诶,别蒙我啊,这标志明显还是php啊");
}
else{
mkdir(iconv("UTF-8", "GBK", $target_path), 0777, true);
move_uploaded_file($uploaded_tmp, $t_path);
echo "{$t_path} succesfully uploaded!";
}
}
else{
die("上传类型也太露骨了吧!");
}
}
正则匹配了 后缀名(不能包含 ph
)、文件内容不能有 <?
和 content-type
检验
[MRCTF2020]你传你🐎呢
上传 .htaccess
配置文件
上传图片马