手工SQL注入语句构造

幸运草 2020年3月31日21:37:16安全防范评论阅读模式
 一提到SQL语句就想到了期末数据库考试的时候,那俩监考老师,哎,不说了,还好咱们数据库老师大发慈悲 

昨天把去年学习的一些东西可以说重新复习了一边,又有了新的理解与感悟,记录如下:

1、为何会存在SQL注入漏洞
日常见到的网页存在静态动态之分,静态网页一般后缀为html或者htm,动态网页一般后缀为asp、aspx、php或者jsp.

静态网页不需要使用后台数据库,动态网页需要连接后台数据库,因此只有动态网页存在SQl注入漏洞,而静态网页不存在。

手工SQL注入语句构造

此时比如客户端想要查看ID为33的文章,这时假设发出请求链接为【http://www.test.com/test.php?id=33】

此链接被提交到脚本引擎,脚本引擎解析获取ID为33,由此构造SQL语句【select * from test where id = 33】

此语句被提交到数据库,之后数据库便返回查询到的数据。

手工SQL注入语句构造

知道原理后,我们就可以进行SQL语句的构造了。

2、万能密码的构造
i、首先了解到其后台查询SQL语句为【select user_id,user_type,emailfrom user where user_id='用户名'and '密码'】

手工SQL注入语句构造

ii、于是我们输入用户名【admin】和密码【2’or’1】时,脚本引擎构造SQL语句为【selectuser_id,user_type,email from user where user_id = 'admin' and  '2' or '1'】

手工SQL注入语句构造

iii、由于SQL中【=】优先级高于【and】高于【or】,又因为布尔型【 or '1' 】恒成立,因此此式恒成立,因此成功进入后台界面

手工SQL注入语句构造

3、手工注入access数据库
i、判断是否存在SQL注入漏洞

手工SQL注入语句构造

输入【'】数据库出错,说明【'】被提交至了数据库进行解析

手工SQL注入语句构造

手工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个字符

手工SQL注入语句构造

输入【and(select top 1 asc(mid(admin,1,1)) from admin)=97】若正常显示,说明amdin表中admin列中第一个字段的第一个字目的ascii码为97,即这个字母为a.

同理,就可以得到后台数据库中存储的表、列、字段数据

iii、当然也可以直接使用现成的工具,比如这个:

手工SQL注入语句构造

4、手工联合查询注入       
i、输入【order by 12】判断列中字段数量是否等于或小于12个字段,不断更改order by 后面的数字,判断出后台列中字段的数量

ii、输入【union select 1,2,3,4,5,6,7,8,9,10,11 from admin】联合查询爆出后台数据库中存在的字段名

手工SQL注入语句构造

iii、此时输入【union select 1,admin,password,4,5,6,7,8,9,10,11 from admin】即看到了admin表中测试列中的字段数据

手工SQL注入语句构造

本文来源于:手工SQL注入语句构造-变化吧
特别声明:以上文章内容仅代表作者本人观点,不代表变化吧观点或立场。如有关于作品内容、版权或其它问题请于作品发表后的30日内与变化吧联系。

  • 赞助本站
  • 微信扫一扫
  • weinxin
  • 加入Q群
  • QQ扫一扫
  • weinxin
幸运草

发表评论