自用,记录一下
一.原理
百度上解释为:
SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。我认为一句话来说就是:
程序未将用户输入的数据与代码区分开来,造成未授权任意查询操作数据库
二.利用
如果大站遇到任何SQL洞都是人品爆棚了,或者又是蜜獾,常规利用方式就不记录了
一.常用技巧
①.二次注入:从数据库中取出恶意数据触发 常测试方法为上传图片时修改图片名,注册时跟/\等特殊符号,通过防火墙本身的过滤与转义功能实现
②.get包转post包或反转,可过少部分waf
③.waf等对/* */
中的数据检测很消耗性能,一般智能型waf默认不检查(内联注释可过狗的一部分原因)太长的/*! */
内容检测影响业务速度,大概填充1m垃圾数据能绕过,/*!50000 */。
④.没有网站会禁止浏览器蜘蛛的抓取,user-agent头改为主流浏览器爬虫可绕过
⑤.order by后跟的是字段名,所以参数化预处理后无法生效,可挖点时间排序。
⑥.注册账号的时候:账号admin空格空格空格空格空格空格或者++++++ 密码随意。登陆的时候会可能会把空格解析掉,变成真正的admin。或者改用户密码都为空的包,测试数据库是否有手滑。
⑦.测试注入的时候细心一些,别只测试单引号,加 and 1=1 或1=2测试返回页面,可以确定是否有注入
⑧.x-forward改为127.0.0.1,waf可能对本地的包不过滤
⑨.遇到使用/转义单引号的,可单引号前加入%df
与/合并后会变成宽字节"運",二次编码等,利用UTF-8客户端-服务器会解码两次原理绕过waf,利用防火墙本身的过滤来攻击需要先测试出过滤规则,例如*
被过滤成空白或空格,构造uni*on+sele*ct 1,2,3--+
⑩.MySQL数据库中&#