SQL注入基础入门
一般的WEB架构
SQL注入成因:
用户开启浏览器并连接http://www.xxx.com。位于逻辑层的Web服务器从文件系统中加载脚本将其传递给脚本引擎,脚本引擎负责解析并执行脚本。
脚本使用数据库连接程序打开存储层连接并对数据库执行SQL语句。数据库将数据返回给数据库连接程序,后者将其传递给逻辑层的脚本引擎。逻辑层再将WEB页面以HTML格式返回给表示层的用户的浏览器之前,先执行相关的应用或业务逻辑规则。用户的WEB浏览器呈现HTML并借助代码的图形化表示展现
给用户。整个过程数秒内完成,并且对用户是透明的。
简单来说,WEB浏览器(表示层)向中间层(逻辑层)发送请求,中间层通过查询更新数据库(存储层)响应请求。
从用户请求到在数据库中执行SQL语句,服务器未经过任何过滤校验,就把用户的请求直接在数据库中执行,导致数据库内的数据发生泄漏、更改等。
SQL注入在哪里:
· get
· post
· 数据包头部注入
· cookie注入
· 搜索注入
· ......等
1.任何客户端可控,传递到服务器的变量;
2.必须带有参数传递,参数值带入到数据库查询;
3.服务器没有进行过滤或过滤的不严格。
SQL注入的分类:
根据注入语法分类:
· Error-based SQL injection (报错型注入)
· Boolean-based blind SQL injection (布尔型注入)
· UNION query SQL injection (可联合查询注入)
· Stacked queries SQL injection (可多语句查询注入)sql server中使用
· Time-based blind SQL injection (基于时间注入)
根据SQL数据类型分类:
· 整形注入
· 字符串类型注入
· 搜索类型注入
判断是否存在注入:
and 1=1 / and 1=2 根据回显页面不同(整型)
单引号判断 ' 显示数据库错误信息(整型,字符串类型)
\ 是否报错
随机输入判断
-1 / +1 回显上个页面(整型)
and sleep(5) 返回时间是否变化
判断注入类型:
布尔类型:
当一个页面,存在注入,但是没有显示位,而且没有数据库出错信息,只能通过页面返回正常/不正常进行判断,即为布尔型注入
优点:不需要显示位,不需要代码输出mysql_error()信息
缺点:速度慢
报错注入:
因为传递参数不正常引起数据库执行语句发生错误,脚本输出错误信息,即为报错注入
联合查询注入:
页面根据参数值改变而改变,即有显示位的条件下,没有过滤单引号、双引号等特殊字符,及SQL命令;可以对SQL语句截断,使用UNION 添加
查询语句来进行注入。UNION两边列的数量相同,可使用order by 猜测获取列的数量
基于时间的注入:
当一个页面,存在注入,但是没有显示位,而且没有数据库出错信息,页面的返回信息不会改变,可以在布尔语句上使用sleep(),猜解获取信息
构造注入语句:
• exists()
• ascii()
• substr()
函数的使用
• select exists(select user());
• select substr((select user()), 1, 1);
• select substr((select user()), 2, 1);
• select ascii(“a”);
• select ascii(“abc");
• select ascii(substr((select user()), 3, 1));
• select ascii(substr((select user()), 3, 1)) > 100;
• select ascii(substr((select user()), 3, 1)) > 120;
在mysql5.0版本之后,就存在一个information_schema数据库,可以在该库的tables表和columns表中获取脚本连接数据库的账号-可以控制的数据
库的结构
举例:
• ?id=1' and exists(select * from information_schema.tables) --+
• ?id=1' and (select length(version()))=6 --+ #判断 version()返回字符串长度
• ?id=1' and (select count(distinct+table_schema) from information_schema.tables) > 10 --+ #判断有多少个数据库
• ?id=1' and (select ascii(substr((select distinct table_schema from information_schema.tables limit 0,1), 1 ,1))) > 100 --+
#判断第一个库的第一个字符
SQL注入基础入门的更多相关文章
- SQL注入攻防入门详解
=============安全性篇目录============== 本文转载 毕业开始从事winfrm到今年转到 web ,在码农届已经足足混了快接近3年了,但是对安全方面的知识依旧薄弱,事实上是没机 ...
- SQL注入攻防入门详解(2)
SQL注入攻防入门详解 =============安全性篇目录============== 毕业开始从事winfrm到今年转到 web ,在码农届已经足足混了快接近3年了,但是对安全方面的知识依旧薄弱 ...
- [转]SQL注入攻防入门详解
原文地址:http://www.cnblogs.com/heyuquan/archive/2012/10/31/2748577.html =============安全性篇目录============ ...
- Sql注入基础原理介绍
说明:文章所有内容均截选自实验楼教程[Sql注入基础原理介绍]~ 实验原理 Sql 注入攻击是通过将恶意的 Sql 查询或添加语句插入到应用的输入参数中,再在后台 Sql 服务器上解析执行进行的攻击, ...
- 【转载】SQL注入攻防入门详解
滴答…滴答…的雨,欢迎大家光临我的博客. 学习是快乐的,教育是枯燥的. 博客园 首页 博问 闪存 联系 订阅 管理 随笔-58 评论-2028 文章-5 trackbacks-0 站长 ...
- 【转载】sql注入之入门
原文在:https://smelond.com MySql基础语法 mysql无非就是增删改查 mysql数据库结构: 数据库 test,test1 表名 admin,manage 数据 id,use ...
- 通过sqli-labs学习sql注入——基础挑战之less1-3
首先,先看一些基础知识吧!!!!本人只是初学者,记录一下自己的学习过程,有什么错误之处请指出,谢谢!大佬请绕过!!!! url编码:一般的url编码其实就是那个字符的ASCII值得十六进制,再在前面加 ...
- 通过sqli-labs学习sql注入——基础挑战之less1
环境准备: Phpstudy (PHP+Apache+Mysql) Sql-lab 首先了解下基础知识: URL编码: 因为在浏览器中,当我们访问一个网址的时候,浏览器会自动将用户输入的网址进行UR ...
- Sqli-labs之sql注入基础知识
(1)注入的分类 基于从服务器接收到的响应 ▲基于错误的SQL注入 ▲联合查询的类型 ▲堆查询注射 ▲SQL盲注 •基于布尔SQL盲注 •基于时间的SQL盲注 •基于报错的SQL盲注 基于如何处理输 ...
随机推荐
- 洛谷 [P1337] 平衡点
模拟退火练手 一道模拟退火的好题 结果一定势能最小 与模拟退火思路高度一致 #include <iostream> #include <cstdio> #include < ...
- 十步优化SQL Server中的数据访问
原文发布时间为:2011-02-24 -- 来源于本人的百度文章 [由搬家工具导入] 转载:http://tech.it168.com/a2009/1125/814/000000814758_all. ...
- hdu 3440(差分约束好题)
House Man Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- 配置之MySQL5Dialect
报错: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.en ...
- (5)php数组
定义数组 $arr=array('篮球','自行车','海贼王'); 打印指定数组 echo $arr[0]; 打印全部数组 print_r($arr); 改变数组的值 $arr[0]='足球'; 赋 ...
- LOJ N!在不同进制的位数
lightoj1045 - Digits of Factorial (N!不同进制的位数) 对于一个B进制的数,只需要对其取以B的对数就可以得到他在B进制情况下的位数(取了对数之后可能为小数,所以还需 ...
- Wannafly交流赛1 B 硬币[数学思维/贪心]
链接:https://www.nowcoder.com/acm/contest/69/B来源:牛客网 蜥蜴的生日快到了,就在这个月底! 今年,蜥蜴的快乐伙伴之一壁虎想要送好多个1元硬币来恶整蜥蜴. 壁 ...
- Centos7下实现多虚拟机互信
假设CentOS 7三台虚拟机A(192.168.111.10).B(192.168.111.11).C(192.168.111.12),需要保证三台虚拟机之间网络的连通性. 操作步骤: 一.在A机上 ...
- Visual Studio开启SSL的支持
前提: 请确保已经安装了IIS Express 具体操作: 1.web项目->[右键]->[使用IIS Express]转换工程的Web服务器. 2.点击web项目,按[ctrl]+[w] ...
- iOS 5的文件存储策略应对
苹果在iOS 5系统时,对app的文件存储提出了新的要求.从它的guildline来看,是推荐开发者尽量把app生成的文件放在Caches目录下的.原文如下: Only user-generated ...