0x00 什么是SQL注入
1、简述
SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。
2、SQL注入的工具
burp
SwitchyOmega
HP WebInspect
IBM Rational AppScan
HP Scrawlr
3、报错注入
-
MSSQL错误
-
注入的方法
https://www.cnblogs.com/wuhongbin/p/15582849.html
https://github.com/aleenzz/MSSQL_SQL_BYPASS_WIKI
https://github.com/Yinzo/SQL-Injection-Cheat-Sheet-Chinese-Ver./blob/master/article.md
-
修复的方法
可以使用web.config文件配置asp.net应用程序中的错误显示。该文件用户定义asp.net应用程序的设置和配置。它是一个XML 文档,其中包含了有关己加载模块、安全配置、编译设置的信息以及其他的类似数据。customErrors 指令定义如何将错误返回给 Wcb 浏览器。默认情况下,customErrors 为“On’,该特性可防止应用服务器向远程访问者显示详细的错误信息。可使用下列代码彻底禁用该特性,但不建议在产品环境下执行该操作应用程序的设置和配置。
<configuration> <system.web> <customErrors mode="off"> </system.web> </configuration>还可以根据呈现页面时产生的HTTP错误代码来显示不同的页面:
<configuration> <system.web> <customErrorsdefaultRedirect="Error.aspx" mode="on"> <errorstatusCode="403" redirect="AccessDenied.aspx"/> <errorstatusCode="406" redirect="NotFound.aspx"/> <errorstatusCode="500" redirect="InternalError.aspx"/> </system.web> </configuration>
-
-
MySQL错误
-
Oracle错误
-
PostgreSQL错误
4、区分注入类型
数字:不需要使用单引号来表示
其他类型:使用单引号来表示
‘or’=‘or’
5、各类的数据库注释(终止式注入)Terminating SQL Injection
*Oracle*
REM单行注释
— 单行注释
/多行注释/
MS SQL Server
— 单行注释
/多行注释/
*MySQL*
#单行注释
— 单行注释(特别注意,— 后有个空格!!!)
/多行注释/
总结:
/多行注释/ 和— 单行注释都差不多,MySQL要注意。
非标准的#和REM最好还是不要用了
为了兼容— 后面最好都加空格
Database Concatenation Operators
| Database | Concatenation |
|---|---|
| Microsoft SQL Server | ’a’ + ‘b’ = ‘ab’ |
| MySQL | ’a’ ‘b’ = ‘ab’ |
| Oracle and PostgreSQL | ’a’ || ‘b’ = ‘ab’ |
5、代码审查工具
1、RIPS
2、Fortify
3、Rational appscan