原文首发在:奇安信攻防社区
https://forum.butian.net/share/3648
信息收集
首先我是在官网上看到了操作手册
里面写了默认密码
现在就简单多了,直接谷歌语法,这种姓名学号信息还是很好找的
然后找一个比较稀有的名字,不然搜索的时候信息太多,身份证信息有了,直接登录系统成功,下面就是正常的漏洞测试了
漏洞挖掘
xss
这个没啥好说的,有输入就插,很多地方都存在xss,下面的sql注入比较有意思
sql注入
直接一个查询的数据包,statusCode字段单引号报错
再加个单引号正常
经过各种测试,exp(709)正常
exp(710)异常,这里感觉是orcale数据库
只能进行盲注了,测试各种语句
decode也被拦截
case when也是异常
这里注意到只有decode显示的是特殊字符,这说明if和case when并没有被拦截,只是它可能有个规则,在你逗号等于号传进去之后会再给你加一些别的字符让你语句执行失败,这种比较好绕 直接改成'||case 1 when 1 then 1 else 1 end||'测试,成功返回数据
先测下uesr函数,没问题可以用,把else后面改成exp(710)就好,这样只有user的长度正确的时候才会返回数据
跑出来为8位
因为逗号也不能用,这里换个写法,还是异常了,不过测试过ascii函数是可以用的
代码语言:javascript复制substring(user from 1 for 1)代表从第一位开始,截取长度为1
不过还是异常,跑了很多截取函数都不能用,之前以为是orcale数据库,现在怀疑是PostgreSQL数据库,他俩比较像,PostgreSQL有个函数很少会禁: position函数,这个函数不需要逗号,有两个参数,就是判断第一个字符串在后面字符串中出现的首个位置,从1开始
代码语言:javascript复制position('sql' in 'postgresql')返回的是8
position('sq' in 'postgresql')返回的也是8
position('p' in 'postgresql')返回的则是1
测试发现没问题
不过也不需要ascii函数了,返回的直接就是数字 这里说明a第一次出现不是在第一位,所以返回的是exp(720),然后异常
直接a为变量开始爆破,这说明c出现在第一位,等于1,所以返回了数据
第二位为m剩下同理