sqli-labs Less1-5题 Write Up

[toc]

Less-1

image-20200713154808415

输入一个id看看

image-20200713154939518

题目是单引号,因此id加一个单引号看看

image-20200713155040120

可以看到报错了。说明单引号被成功解析,那么我们就通过闭合单引号来进行注入。

首先通过order by判断字段:

image-20200713155238806

不断提高order by后面的数值

image-20200713155311592

可以看到order by到4的时候报错了,说明字段只有3个。

接下来通过union看看页面显示的内容对应的位置

image-20200713155813890

页面成功执行,但是返回的内容没有变化,说明页面只会返回第一条结果(id=1),因此我们可以把id变成系统中没有的(id=-1),让服务器返回select的结果

image-20200713155932512

可以看到页面返回了2和3,说明页面返回的是select的第二个和第三个地方,所以我们注入的地方就是2和3

接下来查询当前网站使用的数据库 database()、当前Mysql的版本 version()、当前Mysql的用户 user()

CONCAT_WS(separator,str1,str2,…),连接str1、str2等字符串,并在各字符串中以separator分隔

image-20200713160539637

接下来先查询服务器一共有多少个数据库

Mysql中默认存放一个information_schema的数据库,该库中,有三个重要的表,分别是schemata, tables和columns

schemata储存该用户创建的所有数据库的库名,库名字段为schema_name

tables储存该用户创建的所有数据库的库名和每个库中的表名,库名字段是table_schema,表名字段是table_name

columns储存该用户创建的所有数据库的库名、每个库的表名和每个库中每个表中的字段名,库名字段是table_schema,表名字段是table_name,字段名是column_name

image-20200713162304922

可以看到第一个表为information_schema,修改limit 0,1中0的值,遍历

image-20200713162401207

最终得到所有的库名。

然后查询数据库中的表名,以security为例

image-20200713163201802

遍历查询,就得到所有的表名。

然后获取表的字段名,以emails为例

image-20200713164353082

遍历可以得到emails的所有字段id,email_id

然后获取字段内容

image-20200713165034010

遍历

image-20200713165402331

可以看到一共有8条数据

image-20200713165624149

通过这样我们就可以把整个服务器的数据库down下来。

补充:

我们可以使用group_concat将信息输出到一行,这样更为方便。

image-20200713170544482

Less-2

image-20200713171603173

注入单引号,根据报错信息可以看出id在sql中是整型

image-20200713171622650

通过布尔条件测试判断能否注入

image-20200713171850699

image-20200713171924317

得出结论存在注入,使用union注入

image-20200713172017996

查询数据库名

image-20200713172117403

注入成功,后续爆库步骤省略。

Less-3

单引号测试,查看报错信息

image-20200713172910823

猜测sql语句形式为

SELECT * FROM * WHERE id=('$id') LIMIT 0,1

布尔测试

image-20200713173111249

image-20200713173120963

可以注入,注意构造的形式

image-20200713173536293

爆库

image-20200713173648836

Less-4

双引号测试

image-20200713174125565

猜测sql语句

SELECT * FROM * WHERE id=("$id") LIMIT 0,1

布尔测试

image-20200713174333657

union注入:

image-20200713174422863

爆库

image-20200713174656504

Less-5

单引号测试

image-20200713174921832

布尔测试

image-20200713174941031

image-20200713174949880

可以看到存在注入,但是当布尔值为真时页面没有回显,因此考虑布尔注入

首先判断该数据表的字段

image-20200713175252435

image-20200713175301836

可以看到一共有三个字段。

判断数据库名字的长度

使用length()函数

可以看到长度大于等于1

image-20200713175615810

小于15

image-20200713175702619

多次测试后发现数据库名长度为8

再按位测试数据库每一位的值

使用substr(str,a,b)函数,a是从第几个字符开始(注意:字符从1开始,不是从0开始),b是每次返回几个字符

image-20200713180012852

当测试到s时返回真,则数据库名的第一个字符为s

image-20200713180044267

通过这种方式可以进行爆库。

Ubuntu搭建sql注入练习平台sqli-labs

[toc]
[begin]昨[/begin]天新买了一个ubuntu系统的服务器,打算当成实验靶机来用,所以想在上面搭建sqli-labs,打算什么时候把DVWA也装上去。以前装过sqli-labs,但是是在Centos下装的,而且没怎么记录,正好趁这次机会把他记录下来,避免以后别人再装的时候采坑。

由于是新买的,啥也没有,所以先更新一下

sudo apt-get update
sudo apt-get upgrade

更新完了之后修改一下root密码

sudo passwd

输入你想改的密码,之后就可以登录root账户了。

安装LAMP

开始正式安装之旅。首先是安装最基础的LAMP环境

安装Apache

sudo apt-get install apache2

安装完成后在浏览器输入你的ip地址,如果出现以下画面,说明apache成功安装。

file

安装Mysql

sudo apt-get install mysql-server mysql-client

安装完成后在/etc/mysql/debian.cnf里可以看到初始默认密码,注意这里的用户不是root,而是debian-sys-maint。

登录该用户:

mysql -u debian-sys-maint -p

输入默认密码,即可进入mysql,然后修改root密码,由于我是5.7版本,password字段已经被移除,所以使用如下命令修改密码:

use mysql;
update user set authentication_string=password('newpasswd') where user='root'and Host = 'localhost';
update user set plugin="mysql_native_password";
flush privileges;

第二步这里的newpasswd就是你要修改的密码。该命令执行完后显示

Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 1

说明修改成功。之后退出mysql,然后重新启动mysql

sudo systemctl restart mysql.service

试一下登录root用户

mysql -u root -p

输入刚改的密码,登录成功。

安装PHP

sudo apt-get install php7.0 libapache2-mod-php

安装完成后在/var/www/html/下新建test.php文件

vim /var/www/html/test.php

输入以下代码:

<?php
    phpinfo();
?>

保存之后在浏览器中输入你的ip/test.php,如果出现以下界面说明php安装成功。

file

然后执行以下命令(我就是因为没有安装这个导致sqli-labs半天安装不好)

sudo apt-get install php7.2-mysql

安装完毕后重启apache服务器

sudo service apache2 restart

现在就可以来安装sqli-labs啦!

安装Sqli-labs

首先你需要知道你的php版本!!!

首先你需要知道你的php版本!!!

首先你需要知道你的php版本!!!

重要的话说三遍!

如果是php5.x

访问 https://github.com/Audi-1/sqli-labs

如果是php7.x

访问 https://github.com/skyblueee/sqli-labs-php7

由于我是php7,所以我就用php7对应的版本

sudo apt-get install git
sudo git clone https://github.com/skyblueee/sqli-labs-php7 /var/www/html/sqli-labs

下载完成后进入sqli-labs文件夹,找到并修改sql-connections/db-creds.inc中你的数据库用户名和密码

<?php
//give your mysql connection username n password
dbuser ='root';         //修改成你数据库的用户名dbpass ='';             //修改成你数据库的密码
dbname ="security";host = 'localhost';
$dbname1 = "challenges";
?>

修改完成后浏览器输入你的ip/sqli-labs网站

file

点击Setup/reset Database for labs,如果出现以下界面:

file

表示sqli-labs已经安装完成!可以开始愉快的玩耍啦