关于在 kali 下使用 sqli-labs 和一些使用时产生的问题及其解决方法

前言

首先如果想深度的学习这个靶场,不太建议使用 kali 来做 sqli-labs,这是个很老的靶场,php 版本要5.5以下,甚至更低,很多函数都废弃了。

不过使用 kali 主要是因为它环境很全,不至于在主机上下载很多东西,但现在的 kali 很多软件的版本都很高,不太兼容 sqli-labs,即使是网上大神修改了一部分制作出 kali 版本的,但在我个人的 kali 里运行起来仍然不顺利。

(不知道在其他人的电脑上是不是这样)

我是使用的 kali,我懒,我也不想把主机搞得乱糟糟的。

下载链接

  1. sqli-labs
  2. sqli-labs-kali2

我的环境

  1. Linux kali 6.6.9-amd64
  2. php 8.1(自带)
  3. burpsuite 社区版(自带)

安装

参考:kali下配置sqli-labs环境

总过程

# 启动 apache 服务,可以打开 htttp://127.0.0.1
sudo service apache2 start

# 开启 mysql 服务
sudo service mysql start
mysql -uroot -p
# 初始密码为空,回车进入
# 修改密码
MariaDB [(none)]> SET password for 'root'@'localhost'=password('你自己的密码');

# 安装sqli-labs
# 通常 /var/www/html 是 Web 服务器的默认根目录
cd /var/www/html
git clone https://github.com/mukkul007/sqli-labs-kali2 sqli-labs
# 

# 修改凭证信息,填写密码
cd sqli-labs/sql-connections/
nano db-creds.inc

# 自动创建数据库
# 1.访问 http://127.0.0.1/sqli-labs/,点击第一个链接
# 2.或执行下面命令
php setup-db.php

# sql 命令
sudo -uroot
show databases;
use GRG56NF4AA;
show tables;
select * from GRG56NF4AA;

在这里插入图片描述

需要在 /var/www/html/ 文件夹下 git clone,因为 apache 启动后可直接通过 http://localhost/ 访问这个文件夹

问题

函数问题

  1. 废弃的

    get_magic_quotes_gpc()  // 7.4.0 废弃
    mysql_escape_string()  // 4.3.0
    mysql_real_escape_string()  // 5.5.0 -> 直接删掉它吧,我也没找到可以代替它的函数
    
    mysql_query()  // 5.5.0 -> mysqli_query
    mysql_error()  // 5.5.0 -> mysqli_error
    mysql_connect()  // 5.5.0 -> mysqli_connect
    mysql_select_db()  // 5.5.0 -> mysqli_select_db
    mysql_fetch_row()  // 5.5.0 -> mysqli_fetch_row
    mysql_fetch_array()  // 5.5.0 -> mysqli_fetch_array
    mysql_affected_rows()  // 5.5.0 -> mysqli_affected_rows
    
  2. 可使用的

    empty()
    intval()
    substr()
    stripslashes()
    addslashes();  // ' " \ null 前添加转义字符
    ctype_digit()  // 8.1.0
    
    $con1 = mysqli_connect($host, $dbuser, $dbpass, $dbname);
    mysqli_multi_query($con1, $sql)
    $result = mysqli_store_result($con1)
    
    $row = mysqli_fetch_row($result)
    $row[0]
    $row[1]
    $row[2]
    
    $row = mysqli_fetch_assoc($result))
    $row['id'];
    $row['username'];
    $row['password'];
    
    $unames = array("Dumb","Angelina","Dummy","secure");
    $pass = array_reverse($unames);
    $unames[$row['id']]
    $pass[$row['id']]
    
    mysqli_free_result($result);
    mysqli_next_result($con1)
    mysqli_more_results($con1)
    mysqli_select_db($con1, $dbname)
    mysqli_connect_error()  // 无参
    mysqli_connect_errno()  // 无参
    
  3. 我们需要对函数做些修改

    有些废弃的函数需要修改成新版的函数,要考虑是否修改传参,修改传参数量

    比如:有些需要加 $con,有些需要删除

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

权限问题

  1. sqli-labs 文件夹

    # 使用 git clone 后,sqli-labs 文件夹的权限有可能属于 root
    
    ls -l
    # drwxr-xr-x 1 root root 1798 Feb 15 09:44 sqli-labs
    
    # 可能需要修改它的权限(按需修改)
    sudo chown kali:kali /sqli-labs -R
    
    ls -l
    # drwxr-xr-x 1 kali kali 1798 Feb 15 09:44 sqli-labs
    
  2. result.txt 文件

    # 出现以下错误,说明 result.txt 文件可能不能读写
    Error opening file: fopen(result.txt): Failed to open stream: Permission denied
    
    # 如果没有输出错误,可以添加以下代码试试看
    $fp=fopen('result.txt','a');
    if (!$fp) {
        $error = error_get_last();
        die('Error opening file: ' . $error['message']);
    }
    
    ls -l
    # -rwxrw-rw- 1 kali kali  470 Feb 18 02:40 result.txt
    
    # 解决:添加权限,766 应该也可以
    sudo chmod +777 result.txt
    
    # 对于其他的,直接复制一份这个有权限的 result.txt 到其他文件夹下就行
    
    

错误信息显示不了的

  1. 添加 <font> 标签
    // 有的时候参数正确,但还是不显示任何信息,可以添加这个标签
    echo '<font color= "#FFFFFF">';
    ...
    echo "</font>";
    
  2. mysqli_error 的函数有问题(未直接解决)
    ...
    
    $id = '"'.$id.'"';
    $sql = "SELECT * FROM users WHERE id=$id LIMIT 0,1";
    // echo $sql;  // 自己添加
    $result = mysqli_query($con, $sql);
    $row = mysqli_fetch_array($result, MYSQLI_BOTH);
    if($row) {
      	echo '<font size="5" color="#FFFF00">';	
      	echo 'You are in...........';
      	echo "<br></font>";
     } else {
    	echo '<font size="3"  color= "#FFFF00">';
    	print_r(mysqli_error($con));  // 不知道为什么不输出
    	// echo mysqli_error($con);  // 没用
    	// print_r(mysqli_error());  // 没用
    	echo "</br></font>";	
    }
    
    ...
    
    MySQLi 错误相关函数:
    	mysqli_error()
    	mysqli_errno()
    	mysqli_error_list()
    	mysqli_connect_error()
    	mysqli_connect_errno()
    
    
    建议是可以添加一条语句,把之前的 sql 语句输出来(如果不能输出,添加一下 font 标签),然后在navicat 里输入,看能不能运行出来,如果运行成功,那就没有问题。尤其是在进行报错注入时。
    在这里插入图片描述
    在这里插入图片描述
  3. 修改 php.ini 配置文件(不一定可以,很奇怪的是,错误时有输出)
    # 修改 php.ini 配置文件
    cd /etc/php/<version>/apache2/php.ini
    sudo su
    gedit php.ini
    
    # display_errors = On
    # error_reporting = E_ALL
    
    # 重启服务
    service apache2 restart
    
    在这里插入图片描述

远程连接

  1. 选择终端远程连接数据库

    但首先,kali 默认禁用了 root 用户使用 ssh 登录,需要打开 ssh 授权

    # 我也不知道哪几条命令有用
    
    # 登录
    ssh kali@192.168.133.132
    
    # 重启ssh
    /etc/init.d/ssh restart
    systemctl restart ssh
    
    # 状态
    systemctl status ssh
    service ssh status
    
    # 开机自启
    systemctl enable ssh
    
    # 更新防火墙规则 加入 22 port(端口),使用root身份更新并重启ssh服务,临时生效
    $ iptables -I INPUT -p tcp --dport 22 -j ACCEPT
    $ systemctl restart ssh
    

    远程连接

    # 远程终端连接
    mysql -uroot -p000000 -P3306 -h 192.168.133.132
    
  2. navicat 连接

    在使用 navicat 连接 kali 数据库时有问题的

    2002 - Can't connect to server on 192.168.133.132'(10061)
    
    # 这个错误和 navicat 没有关系,就是用 CMD 登录 MySQL 也会报 10061 错误,是 MySQL配置的问题
    
    # 登录账号远程访问权限问题
    # SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''' ;') AS query FROM mysql.user;
    
    # MySQL 配置文件设置问题
    # 修改值设置为 0.0.0.0
    nano /etc/mysql/mariadbconf.d/58-server.cnf
    bind-address = 0.0.0.0
    
    # 重启服务
    service mysql restart
    
    1045 - Access denied for user 'root'@'192.168.133.1' (using password: NO)
    
    # 有可能密码错误
    
    2003 - Can't connect to MySQL server on 192.168.133.132' (10038)
    
    # linux 没有关闭防火墙
    
    service iptables stop
    # 或
    chkconfig iptables off
    
    systemctl stop firewall     # 临时关闭防火墙
    systemctl disable firewall  # 永久关闭防火墙
    
    ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
    
    -- 与验证密码策略 validate_password_policy 的值有关。
    -- 默认是1,所以刚开始设置的密码必须符合长度,且必须含有数字,小写或大写字母,特殊字符。
    -- 如果不想设置8位,或者想设置简单点,可以选择Policy=0
    
    -- 修改 validate_password_policy 参数的值(等级为0)
    set global validate_password_policy=0;
    
    -- 设置简单密码
    alter user 'root'@'localhost' identified by '123456';
    

sql 相关

这个不算太重要,最好不要自己设置,或者跟着网上教程设置,因为设置错误后,修改起来好麻烦

# kali 自带的有一个数据库,需要要先初始化才能用(这句话也不一定正确)
# service mysql start

mysql_secure_installation
# 引导完成一些基本的安全设置,包括删除匿名用户、禁止远程root登录、删除测试数据库等
-- 当前密码安全策略
select @@validate_password_policy;

-- 查看具体的设置项
SHOW VARIABLES LIKE 'validate_password%';

最后

补点知识

mysql 数据库 5.0 以上版本有一个自带的数据库 information_schema,该数据库下面有两个表 tables 和 columns

tables 表
table_name 字段下面是所有数据库存在的表名
table_schema 字段下是所有表名对应的数据库名
在这里插入图片描述

columns 表
colum_name 字段下是所有数据库存在的字段名
columns_schema 字段下是所有表名对应的数据库
在这里插入图片描述

MariaDB 和 MySQL

MariaDB 的创始人之一、挪威开发者 Michael “Monty” Widenius 因对 Oracle 收购 Sun Microsystems(MySQL 的原所有者)的不满而创建了 MariaDB。

MariaDB 的目标是提供一个自由、开放源码的 MySQL 替代品,以确保数据库的开发和维护具有更加开放的社区参与。在很大程度上是兼容的。

也就是,这两个其实是同父异母,可能只是某些函数的差异。比如 MariaDB 可能没有像 MySQL 那样直接支持 XML 类型,因此需要将 XML 数据存储为文本(TEXT)或二进制大对象(BLOB)。

SQL 注入分类

根据参数类型/注入点:字符型,数字型、搜索型
根据提交方式:POST 注入,GET 注入,HTTP HEAD 注入
根据有无回显:联合注入,报错注入,布尔盲注,延时注入
其他注入:堆叠注入,宽字节注入,二次注入等

如果能输出数据信息,可用联合注入
如果能输出报错信息,可用报错注入
如果能区分正确与错误的页面,可用布尔盲注
如果什么信息都不输出,可用延时注入
如果可以创建用户,修改密码,可用二次注入
如果 sql 使用 GBK 编码,可用宽字节注入
post 请求,可用 burpsuite 去做
get 请求,可直接在 url 上体现

-- 在 url 上
%20 空格
%27 '
--+ 就是要把后面的注释掉(--后面要有空格才能注释)
	+ 在 url 上会解析为空格
	如果是在表单中输入,则 + 直接写成空格就行了


-- 在 sql 中
# 为注释标志
and 1=2
or 1=1

注意 or and 使用

其实也就那几个固定的语句,布尔盲注和延时注入比较麻烦,其他都还可以。虽然题目老,但还是蛮有趣的。

做完这 65 题花了一周,做了笔记,脑子也要疯了。(做之前,brupstuite 没用过,php 没写过,做的时候各种乱七八糟的错误都遇上了)

  • 30
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kali Linux 中配置 sqli-labs 靶场,需要进行以下步骤: 1. 安装 LAMP 环境 sqli-labs 是一个基于 PHP 和 MySQL 的 web 应用程序,因此需要先安装 LAMP 环境。可以使用以下命令安装: ``` sudo apt-get update sudo apt-get install apache2 mysql-server php php-mysql ``` 2. 下载并解压 sqli-labs 可以从 sqli-labs 的官方网站(https://github.com/Audi-1/sqli-labs)下载最新版本的代码,然后解压到 Apache 的 web 根目录中,例如: ``` sudo wget https://github.com/Audi-1/sqli-labs/archive/master.zip sudo unzip master.zip -d /var/www/ ``` 3. 配置 MySQL 数据库 使用以下命令登录 MySQL 数据库: ``` sudo mysql -u root -p ``` 然后创建一个名为 `security` 的数据库: ``` CREATE DATABASE security; ``` 接着创建一个名为 `security_user` 的用户,并授予该用户访问 `security` 数据库的权限: ``` CREATE USER 'security_user'@'localhost' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON security.* TO 'security_user'@'localhost'; FLUSH PRIVILEGES; ``` 4. 导入 sqli-labs 数据库 使用以下命令导入 sqli-labs 的数据库结构和数据: ``` sudo mysql -u security_user -p security < /var/www/sqli-labs-master/sql-connections/db_structure_mysql.sql ``` 5. 启动 Apache 和 MySQL 服务 使用以下命令启动 Apache 和 MySQL 服务: ``` sudo systemctl start apache2 sudo systemctl start mysql ``` 6. 访问 sqli-labs 现在可以在浏览器中访问 sqli-labs 了,例如在地址栏输入 `http://localhost/sqli-labs-master`。如果一切配置正确,应该可以看到 sqli-labs 的主页。 注意:在实际使用 sqli-labs 进行 SQL 注入漏洞测试,应该始终保持谨慎,避免对其他网站造成不必要的损害。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值