某网络安全培训平台通用型隐式SQL注入漏洞挖掘历程
这个洞几个月前就挖到了,并且反馈给了相关负责人员。
已知影响版本
首先以学生身份登录平台,点击个人信息,进入个人信息修改页面。

修改好信息点击确定,此时抓包,发送请求,修改成功后状态码返回
0000
。默认的参数:

如果构造一个未知的参数,例如
UserType
进行发包,会产生意想不到的结果,直接抛出一个SQL的报错
根据得到的错误得知了执行的SQL语句,当字段不存在时会提示不存在
将普通学生权限用户提升至管理员很简单 ,只需要自己添加一个
UserRole=1
即可(控制用户角色)
后端SQL语句应该是:
那么该如何进一步利用呢?试了一下发现正常传参会自动转义单引号,试了几种方式无法绕过
当URL构造出
UserType=1
这种时,会在SQL语句中自动生成当URL构造出
UserType='1
这种时,会在SQL语句中自动生成测试中发现参数名可控,所以只需构造一下参数让他成为以下这种SQL语句,将查询结果输出到姓名
可以执行以下SQL语句
实际上传参的过程还会对等于号
=
进行分割,分割完使其成为以下格式绕过方式很简单,只需要将
=
等于号进行URL编码即可,最终构造
再次查看姓名,发现是使用SQL语句查询到的当前数据库名

进一步构造Payload,可以使用报错注入的方式进行注入。
其他的利用方式,为用户名赋值。

在测试的过程中始终有一个问题绕不过去,就是构造的恶意参数名无法包含小数点
.
,因为在PHP编程语言中不允许传输参数带有小数点,并且URL编码也不行。无法使用小数点也就意味着在Mysql中很多操作无法完成,例如跨库跨表查询。希望有想法的师傅一起交流。
- Author:Linuz
- URL:https://linuz.me/article/General-implicit-SQL-injection-vulnerability-mining-process-of-a-network-security-training-platform
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
Relate Posts