深入浅出带你玩转sqlilabs(二)
详情请看上一篇:深入浅出带你玩转sqlilabs(一)
可能用到的函数:
into outfile()函数,写文件,用法:select 'mysql is very good' into outfile 'text1.txt';或者是select 'mysql is very good' into outfile 'path(路径目录之间用双斜杠,防止出现阻止过滤手段\n等)'
MySQL文件位置:MySQL/data
load_file()函数,读取本地文件,用法:select load_file('写文件保存的路径')
先判断注入点数据类型:
http://localhost/sqlilabs/Less-7/?id=1fdg //注入点处开头数字+字符
没有报错,说明是字符型参数
因为是字符型参数,所以id参数先用'使参数报错
然后再想办法填补参数格式(猜,一般是多几个闭合括号)使输出变正常。
http://localhost/sqlilabs/Less-7/?id=1')) --+
'号报错,))号闭合参数,--+号注释后面的语句,使输出正确
然后用order by列查询,查询字段数
http://localhost/sqlilabs/Less-7/?id=1')) order by 3--+
接下来就是衔接命令了,由于前面提示要用到outfile()函数
http://localhost/sqlilabs/Less-7/?id=-1')) union select 1,2,3--+
因为要进行写文件操作,所以就涉及到写文件权限的问题,phpstudy文件读写权限的问题:使用
show variables like '%secure%';
在命令行中查看secure-file-priy当前的值,如果显示NULL,则需要打开phpstudy\PHPTutorial\MySQL\my.ini文件,在其中加上一句:secure_file_priv="/"
然后重启phpstudy,再执行一次注入语句,已经写入了
访问文件,没问题
突破参考:https://www.cnblogs.com/c1e4r/articles/8902444.html
接下来写入一句话就可以了
注意:路径问题:操作文件写入的时候需要提前得到网站的绝对路径
路径获取方法:
1.报错显示
构造一个不存在的参数值
2.遗留文件
3.漏洞爆路径
4.其他
win phpstudy Apache配置文件位置:E:\phpstudy\PHPTutorial\Apache\conf\vhosts.conf
windows2003 iis6配置文件所在位置C:\Windows/system32\inetsrv\metabase.xml
win2008/2012 iis7.5 在这个文件C:\Windows\System32\inetsrv\config\applicationHost.config
字典fuzz:d e d:/wwwroot/www.xx.com .....
预定义字符是:
-
单引号(')
-
双引号(")
-
反斜杠(\)
-
NULL
这个特性在PHP5.3.0中已经废弃并且在5.4.0中已经移除了
源码中id参数的接收
输入没有反斜杠,输出有反斜杠,说明有过滤函数对参数进行转义、过滤了。所以我们遇到了这种情况:想对参数的引号进行闭合,但是又遇到了过滤引号的函数,这就用到宽字节注入了。
当数据库编码为gbk编码时(中文编码不知道日文编码韩文编码是不是),可以使用宽字节注入绕过过滤函数和魔术引号。宽字节格式是地址后加一个%df,再加单引号,因为反斜杠的编码为%5c,而gbk编码中,%df%5c是繁体字“運”(或者是希腊字母β),所以这时系统会误认为这时一个汉字,而不包含反斜杠,所以相当于把反斜杠变成一个汉字,引号就注释不了了,然后我们加单引号闭合的时候使用单引号的url编码:%27,这样一来,系统解析就会这样:%df%5c%27,前两个字节解析为汉字,最后一个字节解析为单引号
注入成功了
在原有的注入参数值多了一层加密,所以在注入的时候要提前解密参数值,进行注入语句的拼接后在进行加密尝试注入测试。