实战篇——SQL注入sqli-labs-master靶场实战二
实战篇——SQL注入sqli-labs-master靶场实战(2)
SQL注入的高级利用
(1) 宽字节注入
有时后端会对用户输入的特殊字符进行转义处理,这时普通的注入方式就会失效。对于成对的单引号'',可以通过十六进制编码的方式绕过转义;而对于单个的单引号',当数据库的编码格式为GBK时,就要用到宽字节注入了。
跟上单引号没报错:
跟上双引号又没报错:
这种情况就基本可以判断后端对特殊字符进行了转义处理,调用了类似mysql_real_escape_string这样的函数。
解决办法就是在单引号或双引号之前加上一个%81,这样%81%5c就会被GBK解析为一个汉字,后面的单引号或双引号就保留了下来。
单引号报错:
双引号没报错:
单引号加注释符没报错:
据此判断为单引号闭合。
后续爆库爆表爆字段爆数据的过程和联合注入几乎没有任何区别,唯一的难点在于成对单引号的处理。
直接使用肯定不行,会被转义:
在每个单引号之前加上%81也不行,因为第一个'乗'会引起报错:
解决办法就是对引用的数据进行十六进制编码:
(2) 请求头注入
请求头注入包括User-Agent注入、Referer注入、Cookie注入等,原理都是一样的,下面以Cookie注入为例进行演示。
使用Burpsuite的Repeater模块进行测试:
对Cookie中的uname属性加一个单引号:
根据报错信息判断存在Cookie注入,且为查询式注入。
(也有可能是插入型注入,需要根据报错信息来判断。)
由于此处没有显示位,只能使用报错注入:
(3) 一句话木马
通过SQL注入可以植入一句话木马,从而获得webshell(服务器权限)。但此处有两个前提条件必须同时满足,其一是MySQL的配置文件my.ini中必须存在'secure_file_priv='或'secure_file_priv=/',否则无法使用load_file和into outfile;其二是必须知道网站的根目录,否则无法将一句话木马植入正确的路径。
网站的根目录可以通过中间件的配置文件获得,而中间件的配置文件的路径则需要针对特定的操作系统和中间件进行猜测。
对于Windows操作系统Apache中间件的系统,其Apache配置文件的默认路径为.../Apache/conf/httpd.conf;由于此处使用phpstudy,因此Apache配置文件的默认路径为.../phpStudy/PHPTutorial/Apache/conf/httpd.conf;又由于phpstudy安装在C:/下,因此Apache配置文件的路径为C:/phpStudy/PHPTutorial/Apache/conf/httpd.conf。
获得网站根目录后就可以在指定的路径下植入一句话木马了:
最后通过中国蚁剑等工具连接一句话木马:
SQL注入的防御
1.使用参数化查询,避免将用户输入直接拼接至SQL查询语句当中作为命令执行。
2.对用户输入当中的特殊字符或字符组合进行充分的过滤或转义处理。