安全矩阵

 找回密码
 立即注册
搜索
查看: 1926|回复: 0

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

[复制链接]

180

主题

231

帖子

1180

积分

金牌会员

Rank: 6Rank: 6

积分
1180
发表于 2022-1-7 01:11:35 | 显示全部楼层 |阅读模式

原文链接:记一次文件上传引发的 SQL 注入


在一次测试过程中,发现一个文件上传的入口,如图:
测试时,使用 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
从测试上来看,大概猜测了下后端代码的实现方式,如下:
  1. <?php
  2. $target_dir = “uploads/”;   #存放文件的目录
  3. $target_file = $target_dir . basename($_FILES[“fileToUpload”][“name”]); #上传之后的文件路径
  4. $uploadOk = 1;
  5. $imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION)); #文件名扩展小写
  6. // 检查图片的格式是否是真实图片
  7. if(isset($_POST[“submit”])) {
  8. $check = getimagesize($_FILES[“fileToUpload”][“tmp_name”]);
  9. if($check !== false) {
  10. echo “File is an image - “ . $check[“mime”] . “.”;
  11. $uploadOk = 1;
  12. } else {
  13. echo “File is not an image.”;
  14. $uploadOk = 0;
  15. }
  16. }
  17. ?>
复制代码
以上代码没有检测文件名是否有效,从而导致,任意构造文件名,进入后续文件写入、数据入库的环节,导致漏洞产生,应该增加如下代码来检测文件名是否有效:
  1. $filename = ‘../../test.jpg’;
  2. if (preg_match(‘/^[\/\w\-. ]+$/’, $filename))
  3. echo ‘VALID FILENAME’;
  4. else
  5. echo ‘INVALID FILENAME’;
复制代码
至此这个测试的过程就分享到这里。虽不是什么特别高大上的测试过程,也算一个不错的漏洞案例,任何用户可控的参数都是不可信的,都是可能存在漏洞的,细节决定成败。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2025-5-3 05:05 , Processed in 0.017196 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表