SQL注入在实战中与CTF中的总结

SQL注入不管在实战中还是CTF的试题中,都很常见,大部分的我都是SQLMAP一把搜,因为这样很便捷,但是一开始手工构造SQL语句进行bypass绕过WAF就很烦恼,遇到二次注入,堆叠注入,延迟注入,就开始各种找工具来达到我的目的,但是还是想,补充下这个方面的基础。

SQL注入的原理如图所示
而常见SQL注入的分类如下;
(来源于CTF特训营)
常见的显错注入;
列如;union 联合查询,如果代码层次上对参数并没有过滤的话。那么我们使用payload;"?id=-1‘+union+select+1+--+  其中用“+ ”号替换空格,达到联合查询进行回显注入的效果,此时服务器处理的语句如下;
SELECT ID FROM users WHERE user_id=‘-1’ union select 1 -- 
三种报错注入(MySql)
涉及到三种方法
UPDATEXML 函数

作用:改变文档中符合条件的节点的值

改变XML_document中符合XPATH_string的值

数据库运行如下

SELECT updatexml(1,concat(0x7e,(SELECT version()),0x7e),1)%23;
SELECT updatexml(1,concat(0x7e,(SELECT version()),0x7e),1);
在游览器里使用的payload 里的0x7e是”~”的十六进制编码,”#”用于注释站点自带的后面的SQL语句
这里方便看就直接打了

返回

floor 函数
floor函数返回小于等于该值的最大整数.
示意图如下
floor(1.21),floor(-21,22)

floor(1.21)取值1
其中floor原理是rand和order by 或者group by的冲突 
floor注入,一个经典的语句;
select count(*),(floor(rand(0)*2))x from information_schema.tables group by x;
服务器返回了

这里我的理解是floor与group by起了冲突
select count(*) ,concat(user(),floor(rand(0)*2))x from mysql.user group by x
exp注入
exp函数报错,报错的本质是溢出报错,过大数值的查询导致溢出报错
我们通过子查询与按位求反,造成一个DOUBLE overflow error,并借由此注出数据。
对于报错注入的函数,我做了一个表,如下





posted @ 2020-10-25 23:51  天钧  阅读(336)  评论(0)    收藏  举报