二阶SQL注入理解与体会
一:SQL注入分类
SQL注入一般分为两类:一阶SQL注入(普通SQL注入),二阶SQL注入
二:二者进行比较
0x01:一阶SQL注入:
1;一阶SQL注入发生在一个HTTP请求和响应中,对系统的攻击是立即执行的;
2;攻击者在http请求中提交非法输入;
3;应用程序处理非法输入,使用非法输入构造SQL语句;
4;在攻击过程中向攻击者返回结果。
0x02:二阶SQL注入:
1;攻击者在http请求中提交恶意输入;
2;恶意输入保存在数据库中;
3;攻击者提交第二次http请求;
4;为处理第二次http请求,程序在检索存储在数据库中的恶意输入,构造SQL语句;
5;如果攻击成功,在第二次请求响应中返回结果。
三:危害比较
一阶SQL注入和二阶SQL注入危害一致,攻击者获得数据库的访问权限,窃取相关数据,但是一阶SQL注入可以通过相关工具扫描出来,而二阶SQL注入更微妙,通常二阶SQL注入漏洞的测试主要依据测试人员对系统功能的理解和对常出错位置经验的判断,但是应用功能的增加,经验的测试结果并不能保证测试结果。
四:二阶SQL注入原理讲解
假设一个网站数据库中存在一个用户名为:“admin”,密码为:“123456”。攻击者注册用户名为:“admin'-- ”,密码为:“123”;程序中的代码为:
String name=StringEscapeUtiles.escapeSql(request.getParameter("Name"));
String pwd=StringEscapeUtiles.escapeSql(request.getParameter("pwd"));
String sql1="insert into user(username,password) values ("name","pwd")";
程序在把输入数据存入数据库之前,对输入的数据中的单引号进行了转义来防止恶意输入对对数据库中数据带来的影响,避免了一阶注入带来的问题,但是在数据库中存入的用户名任然为:“admin'-- ”。现在攻击者要更新密码,程序会首先判断用户是否存在,代码为:
String name=StringEscapeUtiles.escapeSql(request.getParameter("Name"));
String oldpwd=StringEscapeUtiles.escapeSql(request.getParameter("oldpwd"));
String newpwd=StringEscapeUtiles.escapeSql(request.getParameter("newpwd"));
String sql2 = "select * from user where username="name" and password="oldpwd"";
确认用户存在且密码正确时,应用程序执行更新密码语句:
sql3="update user set password="newpwd" where username="username"";
在数据库中执行语句为:
update user set password =“111111” where username='admin'-- '
在数据库语句这种“-- ”表示注释,因此“-- ”后面的语句不会执行;最终攻击者改变的不是“admin'-- ”的密码,而是admin的密码,从而实现攻击。
以上为本人阅读相关材料并结合个人体会所写,有不当之处敬请指教。
二阶SQL注入理解与体会的更多相关文章
- 第九届极客大挑战——小帅的广告(二阶sql注入)
也是经过一通扫描和测试,没发现其他有用信息,感觉这是个sql注入.其实对于二阶sql注入我以前没实践过,也没看过资料,只是知道这个名字,但不知道为何看到这道题就让我回想起了这个名词,所以查了一下二阶s ...
- SQL注入理解与防御
一.说明 sql注入可能是很多学习渗透测试的人接触的第一类漏洞,这很正常因为sql注入可能是web最经典的漏洞.但在很多教程中有的只讲‘或and 1=1.and 1=2有的可能会进一步讲union s ...
- sql注入理解
一.SQL注入产生的原因和危害 1.原因 SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序.而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原 ...
- SQL注入之Sqli-labs系列第二十四关(二阶注入)
开始挑战第二十四关(Second Degree Injections) 0x1 前言 SQL注入一般分为两类:一阶SQL注入(普通SQL注入),二阶SQL注入 .二次注入不是注入两次的意思,请不要混淆 ...
- 【渗透攻防Web篇】SQL注入攻击高级
前言 前面我们学习了如何寻找,确认,利用SQL注入漏洞的技术,本篇文章我将介绍一些更高级的技术,避开过滤,绕开防御.有攻必有防,当然还要来探讨一下SQL注入防御技巧. 目录 第五节 避开过滤方法总结 ...
- SQL注入之代码层防御
[目录] 0x0 前言 0x1 领域驱动的安全 1.1 领域驱动的设计 1.2 领域驱动的安全示例 0x2 使用参数化查询 2.1 参数化查询 2.2 Java中的参数化语句 2.3 .NET(C#) ...
- 高级sql注入
1. 避开输入过滤 输入过滤存在于外部和内部,外部属于web应用防火墙WAF,入侵防御系统IPS,入侵检测系统IDS,内部属于代码中对输入进行过滤 过滤select,insert等sql关键字和' | ...
- SQL注入关联分析
在Web攻防中,SQL注入绝对是一个技能的频繁项,为了技术的成熟化.自动化.智能化,我们有必要建立SQL注入与之相关典型技术之间的关联规则.在分析过程中,整个规则均围绕核心词进行直线展开,我们简单称之 ...
- (其他)SQL注入(转)
转自维基百科: SQL注入是一种代码注入技术,用于攻击数据驱动的应用程序,在这种应用程序中,恶意的SQL语句被插入输入字段中执行(例如将数据库内容转储给攻击者).[1] SQL注入必须利用应用程序软件 ...
随机推荐
- 转: 将Eclipse代码导入到AndroidStudio的两种方式 ,测试了方法2,成功。
蛋疼,不知道为什么我的eclipse的logcat总是莫名其妙的显示一堆黄色字体的字,看不懂的那种,如下图: 然后查了一下资料,说可能是adt版本太低,手机系统太高. 然后本来想升级adt,但是各种折 ...
- C++下混合编译c语言方法总结
最近在读SGI STL源码,感觉对C++的学习很有帮助,之前对于泛型.iterator.traits等等各种特性的概念非常模糊,通过这两天的琢磨,再加上<STL 源码剖析>的帮助,对C++ ...
- 用一个词(TASPK)牢记C程序内存布局
一个典型的C程序内存布局,从低地址到高地址分别为: 1. text (正文段,即代码段 Code Segment) 2. data (已经初始化的数据段) 3. bss (未被初始化的数据段 Bloc ...
- poj 2572 Hard to Believe, but True!
Hard to Believe, but True! Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3537 Accep ...
- <数据挖掘导论>读书笔记1
数据预处理: 1.聚集:将两个或者多个对象合并成单个对象. 2.抽样:一种选择数据对象子集进行分析的常用方法.抽象方法:简单随机抽样 和渐进抽样 3.维度约:我觉得翻译的不好,英文明细是降维.降维技术 ...
- Golang教程:类型
下面是 Go 支持的基本类型: bool Numeric Types int8, int16, int32, int64, int uint8,uint16,uin32,uint64, uint f ...
- Java并发编程系列之二十八:CompletionService
CompletionService简介 CompletionService与ExecutorService类似都可以用来执行线程池的任务,ExecutorService继承了Executor接口,而C ...
- MySql 模糊连接
我们有时候会遇到比较扯的数据库设计,也可能处于某种原因,或当时特殊考虑,情况类似如下: 表A,主键Id: 表B,关联字段 = 表A的Id的逗号连接,如:1009,2393,1235 B表的一行,对应A ...
- VS快捷键设置无效
使用Resharper 后发现有些快捷键冲突,但是在工具-选项-键盘 设置后不管用,后来发现有一个移除功能,即移走原来的快捷键; 先选择下拉框1中自己用不到的快捷键,然后移除掉; 备注: 注意观察 快 ...
- input:checkbox 是否被选中?
<input type="checkbox" id="checkbox1"> <script> $(function(){ $(&quo ...