hexo

某网络安全培训平台通用型隐式SQL注入漏洞挖掘历程

这个洞几个月前就挖到了,并且反馈给了相关负责人员。
已知影响版本
首先以学生身份登录平台,点击个人信息,进入个人信息修改页面。
notion image
修改好信息点击确定,此时抓包,发送请求,修改成功后状态码返回0000
默认的参数:
notion image
如果构造一个未知的参数,例如UserType进行发包,会产生意想不到的结果,直接抛出一个SQL的报错
notion image
根据得到的错误得知了执行的SQL语句,当字段不存在时会提示不存在
将普通学生权限用户提升至管理员很简单 ,只需要自己添加一个UserRole=1即可(控制用户角色)
notion image
后端SQL语句应该是:
那么该如何进一步利用呢?试了一下发现正常传参会自动转义单引号,试了几种方式无法绕过
当URL构造出UserType=1这种时,会在SQL语句中自动生成
当URL构造出UserType='1这种时,会在SQL语句中自动生成
测试中发现参数名可控,所以只需构造一下参数让他成为以下这种SQL语句,将查询结果输出到姓名
可以执行以下SQL语句
实际上传参的过程还会对等于号=进行分割,分割完使其成为以下格式
绕过方式很简单,只需要将=等于号进行URL编码即可,最终构造
notion image
再次查看姓名,发现是使用SQL语句查询到的当前数据库名
notion image
进一步构造Payload,可以使用报错注入的方式进行注入。
其他的利用方式,为用户名赋值。
notion image
在测试的过程中始终有一个问题绕不过去,就是构造的恶意参数名无法包含小数点.,因为在PHP编程语言中不允许传输参数带有小数点,并且URL编码也不行。
无法使用小数点也就意味着在Mysql中很多操作无法完成,例如跨库跨表查询。希望有想法的师傅一起交流。
 
2021-天翼杯-部分Web题解2021-KCTF-第三题『统一门派』分析