前言
短链接系统是我很久之前开发的开源项目,十几天前我把项目源码和部署站点交给了Fgaoxing(网络安全专家),让他测试项目安全性。本文的记录来源于日志分析和攻击者叙述。
实验环境
1.php 7.1
2.mysql环境 + phpmyadmin管理
3.短链接项目 v1.0.0
4.nginx
5.关闭waf和一切安全措施,仅保留项目内自带安全防护
攻击实验记录
mysql注入
由于这是一个mysql+php项目,所以sql注入是最有可能潜在的漏洞。
根据网站日志显示:
攻击者先是向 添加短链接api 发动攻击,尝试在链接内容里埋雷,闭合sql语句并获取权限,但由于程序将原链接转义为base64再拼接sql语句,所以攻击失败。
攻击者将目标转向了 获取原链接并跳转的api,此api需要传入一个id参数(纯数字),id在数据库内对应原链接,攻击者在id内尝试闭合sql语句,尝试成功(因为程序并未对参数合法性进行校验),接着他通过各种方法获取储存链接的数据表名,理论上应该成功,但程序对取出的内容都会做一个base64解码,因此表名数据变为乱码,攻击失败。
xss注入
攻击者尝试在链接内容中注入js脚本,注入成功,后台有展示所有链接的功能,因此管理员打开后台时脚本被执行,攻击者成功获得cookie。但是攻击者并不止步于此,他还在js里添加了链接跳转,管理员打开后台时会自动跳转到非法黄色网站(此处插播一则笑话:一开始攻击者得意洋洋地问我“感觉怎么样,好看不”,压根不知道自己攻击脚本写错了,导致无效,后来改过来了),给管理员一个**“惊喜”**。
总结
本项目漏洞有两处:
1.id参数没有校验
2.传入的链接展示时不宜使用innerHTML,需更换为innerText,防止脚本执行
目前已被我修复,并优化了UI,发布v2.0.0版本,欢迎使用