公司买的官网被政府网安检测出SQL注入漏洞:
隐患描述
SQL漏洞证明语句:
python3 sqlmap.py -u "http://xxxx?keywords=1" -p keywords --level=5 --risk=3 --tamper=space2comment.py,between.py --current-db --random-agent --time-sec=10 --batch --dbms="MySQL"
漏洞回显:
权重归属证明:https://www.aizhan.com/cha/
审查项目代码,发现整个页面都是模板生成。找到前端:lists_down.html:
<div class="boxBottom"> {zhl:list titlelen='30' addfields='file,ftype' orderby='sort_order desc,add_time desc' id="val" pagesize="8"} <div class="item"> <a href="javascript:;" onclick="go_down(this)" data-file="{$val.file}" class="flexBetween"> <div class="left"> <div>{$val.title} </div> <p>{$val.ftype} | {:date('Y年m月d日',$val.add_time)}</p> </div> <div class="right"> <p> <img src="{__PUBLIC_PATH}/images/icon19.png" class="img1"> <img src="{__PUBLIC_PATH}/images/icon19_.png" class="img2"> 资料下载 </p> </div> </a> </div> {/zhl:list} </div>
然后再无头绪,不知道后端代码在哪。直到偶然机会搜索到:\vendor\topthink\think-template\src\template\taglib\Zhl.php文件下的tagList方法,
顺藤摸瓜找到:vendor\topthink\think-template\src\template\taglib\zhl\TagList.php文件中,对keywords的处理,是通过sql拼接:
array_push($condition, "a.title like '%{$keywords}%'");
打上日志后发现果然在这,于是在其前面加上敏感字符处理:
//duxd 处理sql注入 240206 $keywords = $value; $keywords = str_replace('\\', '\\\\', $keywords); // 转义反斜杠 $keywords = str_replace('\'', '\\\'', $keywords); // 转义单引号 $keywords = str_replace('"', '\\"', $keywords); // 转义双引号
处理完毕,留个记号,以备后查。
中间用到了python复现检测,方法参照:https://blog.csdn.net/u013541325/article/details/109334272
中间感谢同事们的帮助。
标签:val,漏洞,--,6.0,keywords,template,SQL,ThinkPHP From: https://www.cnblogs.com/dxdsbook/p/18010197