SQL注入(高危漏洞) - 总结
概念基础
-
SQL注入的原理:服务器没有对用户输入的数据进行过滤/服务器对用户输入的数据过于信任,导致用户输入的恶意语句被执行。
-
SQL注入的危害:危害数据库,泄露信息,获得服务器管理员权限等。
-
SQL注入的防御:对用户输入的所有内容进行过滤,数据库命名复杂,敏感信息加密,尽量降低数据库的权限等。
-
基础层面GET型注入:联合注入,报错注入,盲注(时间盲注/布尔盲注)
-
进阶层面POST型注入:cookie注入,referer注入,UA头注入,XFF头注入(位置的不同,手法完全基于基础层面)
SQL注入手法思路
-
先找主入点,在网页搜索栏,登录框等等,寻找传参?*=;然后在传参处输入and+判斯函数/判断语句,根据页面回显/页面响应时间长短判断是否存在注入,根据回显内容使用不同的注入手法。
-
有回显联合注入:①判断闭合符②order by查列数③判断回显位④union select注入
-
有回显报错注入:①判断闭合符②根据回显错误,尝试不同的报错函数③根据找到的报错函数进行注入
-
无回显布尔盲注:①判断闭合符②构造布尔函数判断真假③二分法判断查询库名/表名/字段名长度④利用ASCII码进行爆破得出数据
-
无回显时间盲注:和布尔盲注手法基本相同,利用时间函数(sleep();benchmark();大笛卡尔积等构造一些函数式)
-
SQL注入万能密码原理:闭合原有数据库查询语句,利用登陆判断机制,输入判断为真的语句,从而使前端认为登陆判断为真,例:'or '1'='1'
SQL注入手法细节
常用sql注入函数
-
SQL注入的函数:union联合 order by排序 select查询 limit限制查询记录的行数 concat拼接等数据库函数
-
MySQL辅助函数:database()函数返回当前数据库名;version()函数以一个字符串形式返回MySQL服务器的版本;user()函数(这个函数还有SYSTEM_USER、SESSION_USBR两个别名)返回当前MySQL用户名
-
MsSQL/SQLSerer辅助函教:@@version返回当前数据库名;suser_name()用户登录名;user_name()/user()用户在数握库中的名字;db_name()数据库名;app_name()函数返回当前会话的应用程序名称;current_user()返回当前用户的名字;host_name()返回当前用户所登录的计算机名字;system_user()返回当前所登录的用户名称
常用SQL注入闭合符
-
单引号,双引号,括号,极少量的中括号,组合使用的类型
常用SQL注入绕过手法
架构层绕WAF
-
①用户本身是进入WAF后访问Web页面的,只要我们找到Web的真实IP,直接访问,绕过WAF就不在话下了
-
②在同网段内,页面与页面之间,服务器与服务器之间,通过WAF的保护,然后展示给我们,只要我们在内部服务之间进行访问,即可绕过WAF
-
③边界漏洞,同样类似于同网段数据,我们可以利用已知服务器存在的SSRF漏洞,将数据直接发送给同网段的Web2进行SQL注入
-
④二次注入(极少见)
资源限制层面绕WAF
-
①脏数据
协议层面绕过WAF
-
①更改传输方式get/post等
-
②更改文件类型:Content-Type为application/x-www-form-urlencoded数据格式进行过滤,因此我们只要将Content-Type格式修改为multipart/form-data即可绕过waf
-
③参数污染:例如index.php?id=1&id=2,waf也许仅对前部分的id=1进行检测,而后面的参数并不做处理。这样我们就可以在id=2的后面写入sql注入语句进行sq注入
规则层面绕过
-
①URL编码/双重URL编码
-
②base64编码
-
③hex编码
-
④大小写
-
⑤内联注释
-
⑥复写;等价符
-
⑦宽字节(极少见),需要数据库使用gbk编码
-
⑧堆叠(极少见)
-
⑨等价函数
-
⑩分块传输
本文作者:HKalpa
本文链接:https://www.cnblogs.com/HKalpa/p/17220009.html
版权声明:本作品采用本人所有操作均在实验环境下进行,用于其它用途后果自负,作者不承担相应的后果。中国大陆许可协议进行许可。