记一次文件上传引发的 SQL 注入

本文作者:Jerry Shah (Jerry)

翻译作者:myh0st

在一次测试过程中,发现一个文件上传的入口,如图:

在这里插入图片描述
测试时,使用 burp 提交数据包时,将文件名处添加 XSS 的 Payload:("><img src=x onerror=alert(document.domain>.png)
在这里插入图片描述
然后,发现 xss 漏洞触发执行,算是一个 self-xss,危害有限:在这里插入图片描述
关闭弹窗后,发现一些错误信息:在这里插入图片描述
在这里插入图片描述
感觉文件是文件名在插入数据库时报的错,所以尝试将 xss 的 payload 修改为 SQL 注入的:
1、--sleep(15).png
在这里插入图片描述
2、--sleep(6*3).png
在这里插入图片描述
3、--sleep(25).png
在这里插入图片描述
4、 --sleep(5*7).png
在这里插入图片描述
从测试上来看,大概猜测了下后端代码的实现方式,如下:


<?php
$target_dir = “uploads/;   #存放文件的目录
$target_file = $target_dir . basename($_FILES[“fileToUpload”][“name”]); #上传之后的文件路径
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION)); #文件名扩展小写
// 检查图片的格式是否是真实图片
if(isset($_POST[“submit”])) {
$check = getimagesize($_FILES[“fileToUpload”][“tmp_name”]);
if($check !== false) {
echo “File is an image -. $check[“mime”] ..;
$uploadOk = 1;
} else {
echo “File is not an image.;
$uploadOk = 0;
}
}
?>

以上代码没有检测文件名是否有效,从而导致,任意构造文件名,进入后续文件写入、数据入库的环节,导致漏洞产生,应该增加如下代码来检测文件名是否有效:


$filename =../../test.jpg’;
if (preg_match(/^[\/\w\-. ]+$/, $filename))
echoVALID FILENAME;
else
echoINVALID FILENAME;

至此这个测试的过程就分享到这里。虽不是什么特别高大上的测试过程,也算一个不错的漏洞案例,任何用户可控的参数都是不可信的,都是可能存在漏洞的,细节决定成败。

转载自公众号:信安之路

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值