渗透之路 WEB漏洞【第一篇】SQL注入之SQL注入原理

这里主要以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 工具来完成

 

posted @ 2019-09-05 18:13  沐风先生  阅读(1190)  评论(0编辑  收藏  举报