SQL注入(高危漏洞) - 总结

概念基础

  • 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编码

  • ⑧堆叠(极少见)

  • ⑨等价函数

  • ⑩分块传输

posted @ 2023-03-15 20:57  HKalpa  阅读(223)  评论(0编辑  收藏  举报