这里主要以MySQL举例
SQL注入原理
使用数据库的web程序没有对输入做严格的过滤,用户可以通过修改输入参数来构造并提交SQL,这使得攻击者有机会将程序命令当作用户输入的数据提交给web程序, 最终获取系统信息、甚至执行危险代码或系统命令
注:SQL注入最终注入的是数据库,与脚本、平台无关
SQL注入前奏
1.确定程序脚本
踩点(信息收集): web页面页脚、错误页面、页面源码等
漏洞扫描工具:AWVS、Nessus等工具刺探
2.确定所有可能的输入
web的用户输入方式比较多,其中一些很明显,如GET方式传参(url中)、HTML表单,另外还有HTTP头、cookies、ajax等
3.筛选可用于注入的输入
多留意web应用的错误页面会有很多意外收获
SQL注入判断
手工判断
1."单引号"法
原理是构造报错,如果页面显示报错,说明可能有注入
2.1=1 和1=2法
有时候提交引号会检测非法字符,这时候采用and 1=1 和and 1=2进行提交,如果返回不同的页面,说明可能有注入
工具判断
AWVS AppScan 明小子等
注入分类
SQL语法简介
SQL语法特点
多数数据库SQL语法类似
MySQL三种注释符
#
--
/*...*/
select...where...
表达式:
1=1(True) 1=2(False),表达式里有命令会等命令执行后返回结果(命令有错页面报错)
数字0、空字符串'' 为False(其余字符基本为True)
条件语句:也分True、False,如id=1,name='mr'
where整体为True,否则记录为空
where (条件语句)True or (表达式)True # 显示所有条件语句的记录
where (条件语句)True or (表达式)False # 显示符合条件语句为True的表记录
where (条件语句)False or (表达式)True # 显示所有记录
where (条件语句)True and (表达式)True # 显示条件语句为True的表记录
where (条件语句)True and (表达式)False # 不显示记录
数字型
or 1=1
字符型
'or 1=1 #
搜索型
'or 1=1 #
XX 型注入
') or 1=1 #
注入提交方式
get请求一般在地址栏或者hackbar提交
简单的post请求一般hackbar构造包提交
非get请求Burp方便,复杂的包构造很麻烦,Burp直接基于包修改
get 提交
一般直接通过浏览器地址栏提交
post 提交
可通过安装火狐浏览器插件(hackbar 构造请求)或 Burp 工具来完成
cookie 提交
一般通 Burp 工具来完成