网络对抗课题4.3.1 SQL注入原理与实践
网络对抗课题4.3.1 SQL注入原理与实践
原理
SQL注入漏洞是指在Web应用对后台数据库查询语句处理存在的安全漏洞。也就是,在输入字符串中嵌入SQL指令,在设计程序中忽略对可能构成攻击的特殊字符串的检查。
后台数据库将其认作正常SQL指令后正常执行,可能实现对后台数据库进行各种操作,甚至造成破坏后台数据库等严重后果。
SQL注入一般分为普通注入和盲注。
普通注入
:后台数据库会回显有价值的提示信息,通过这些可能的报错信息可以更容易地进行注入,适合新手入门训练。
盲注
:后台管理员在给出错误页面时,没有提供详细错误信息。攻击者需要运用脚本通过仅有的判断信息(比如时间差)对表中的每一个字段进行探测,从而实现注入。
本次实践主要是普通注入。
环境搭建
1.靶机组成:wampserver + DVWA-1.9 + MYSQL
2.搭建过程:
(1)下载安装wamp和MYSQL
(2)下载DVWA安装包,解压缩到wampserver下的www目录
(3)在地址栏输入http://localhost/DVWA-1.9/setup.php
(4)进入setup界面,点击“Create/Reset Database”按钮时如果出现“Could not connect to the database - please check the config file.”的错误信息,那么请打开DVWA-1.9/config/config.inc.php文件,将下面这段内容
$_DVWA[ 'db_password' ] = 'p@ssw0rd';
中的密码部分替换成在步骤2中设置的MySQL root用户的密码(此处为空,直接把'p@ssw0rd'
改为''
就行了,即密码为空),再重新创建数据库即可。
(5)进入链接http://localhost/DVWA-1.9/login.php,默认的用户名和密码为“admin/password”
(6)调整实验难度为简单,并且打开左边SQL注入按钮,进入训练页面。
手工注入实践
1.输入框中键入 ' 并且提交
回显:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''''' at line 1
数据库发现错误字符 ' 说明可能存在注入漏洞,并且可以知道后台数据库是MYSQL。说明这个系统可能通过回显让我们知道后台的关键数据。
分析:假设后台查询语句为:select 列 from 表 where ID= ? ,那么当在SQL语句后加上 or 1=1 ,则会变成 : select 列 from 表 where ID= ? or 1=1 ,或许能将数据全部显示。
2.输入框中键入 'or 1=1' 并且提交
回显:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '''' at line 1
分析:说明SQL语句仍然有错误,或许整个注释掉SQL语句后面的部分能够解决问题。在MYSQL中使用 -- 来完成注释工作。
3.输入框中键入 'or 1=1 --' 并且提交
回显:
分析:假设后台查询语句为:select 列 from 表 where ID= '?' ,那么提交后查询语句变为: select 列 from 表 where ID= ''or 1=1 --'' 。-- 后部分注释掉,实际执行语句为:select 列 from 表 where ID= ''or 1=1 条件永真,从而显示全部信息。同时,我们可以知道一共有5列。
总结:首先发现SQL注入漏洞,找到合适的终止字符构造可执行的SQL语句,找到返回所有行的方法,最后找到特殊的注释SQL字符忽略剩余SQL语句。
分析:找到select语句执行方法后,我们可以使用UNION语句查找更多信息并显示。
Union的用法为:select [列]1,...,[列]n from [表] Union select [列]1,...,[列]n from [表]
其中子select查询语句的列数必须相同。
4.输入框中键入 'Union select 1,--' 并且提交
回显:
分析:发现列数不对,应该为两列
5.输入框中键入 'Union select 1,2--'并且提交
回显:
分析:证明其查询的列数为2列。
6.输入框中键入 'Union select 1,table_name from INFORMATION_SCHEMA.tables -- '并且提交
回显:
分析:通过对系统表INFORMATION_SCHEMA的查询,可以看到每一个表的表名。从中可以看到两行 guestbook、users应该是DVWA所用表。
7.输入框中键入 'Union select 1,column_name from INFORMATION_SCHEMA.columns where table_name = 'users' -- '并且提交
回显:
分析:通过这个语句,我们可以看到users表中的全部列的列名。从中可以发现password列。
8.输入框中键入 'Union select NULL,password from users -- '并且提交
回显:
分析:这样我们可以得到密码的MD5值。
通过concat()函数,我们可以连接参数,组成字符串。
使用方法:CONCAT(str1,str2,…)
9.输入框中键入 'Union select password,concat(first_name,' ',last_name,' ',user) from users -- ' 并且提交
回显:
分析:这样可以方便我们查询多种数据结果。
工具注入实践
各种工具对SQL注入的排名情况:
排名 名称
1 Wapiti
2 Andiparos
3 Paros Proxy
6 Burp Suite
9 W3AF
本次实践使用工具为kali系统下内置的Sqlmap。它由Python语言开发,需要安装2.4版本后的Python解释器,支持 Mysql,Oracle,SQLserver ,access,sqlite等主流数据库。
它支持五种SQL注入技术:基于布尔值得盲注,基于时间的盲注,基于错误的盲注,UNION查询和stacked查询。
同时,它可以自动识别后台账户的哈希口令,并通过字典进行暴力破解。
最后,当数据库是Mysql,PostgreSQL和 SQL Server时,支持上传和下载数据库文件。
1.打开kali的默认浏览器iceweasel的插件Tamper Data。然后访问http://localhost/DVWA-1.9/login.php
2.提交数据aa,Tamper Data选择Tamper,可以看到当前会话的cookie和请求参数等。
3.如图使用sqlmap,附上-u 后跟目标url,--cookie=后跟获取的cookie
结果如下:
分析:工具显示的结果非常丰富。首先它探测出了URL中的id参数存在注入点,并且包含基于布尔变量,基于错误,基于Union联合查询,基于时间的注入类型。同时,目标主机的操作系统为win,Web应用平台为Apache 2.4.9,PHP 5.5.12,后台数据库为MySQL5.0。相关信息被保存在/usr/share/sqlmap/output/192.168.1.4目录下
4.在上述语句后加上 --dbs -v 0,--dbs可以根据所识别的数据库类型来探测包含的数据库名称。-v 参数表明显示过程的复杂程度,从0到6一共7级,0最简单,只显示python错误以及严重的信息。
结果:
分析:结果显示有5个可用数据库,其中dvwa和information_schema应该为我们想找的数据库。后面3个为我主机mysql中原本的数据库。正常查看数据库可见:
5.将指令后缀改为-D dvwa --tables,可以查询指定数据库dvwa下的所有表的名字
结果:
分析:可知在dvwa数据库下有两张表guestbook和users,其中users为我们感兴趣的表。
6.将指令后缀改为-D dvwa -T users --columns,可以查询指定数据库dvwa和指定表users下的所有列的名字
结果:
分析:可见users表下有很多列,我们希望把它们都保存下来。--dump选项可以帮我们完成这项工作
7.将指令后缀改为-D dvwa --tables -T users --columns --dump
结果:
分析:当工具检测到在列password中可能有密码哈希值时,问我们是否想它们另外存储并用其他工具破解。通过选择所用字典攻击模式后,可见工具帮我们完成密码哈希值的破解,并且最终统一显示并保存为csv文件。通过正常查看数据库可以验证结果
总结
通过这次sql注入实践,首先我了解了很多适合用于渗透的工具和练习的靶机环境,同时对于web应用建设的基本环节也有了进一步加深理解。同时,对于数据库的重要性也有了更深的认识。然后,通过sql手工注入操作,我又加深了对常规sql操作的熟练程度,也从一个新的角度来看待sql语句。同时,我也学习到了cookie在web访问中的重要性。最后,通过对sqlmap工具的使用,我完成了一次完整的渗透并拖库,破解数据的过程。这对于我熟悉现实中的注入常规操作非常有利。
网络对抗课题4.3.1 SQL注入原理与实践的更多相关文章
- 2018-2019-2 20165316 『网络对抗技术』Exp3:免杀原理与实践
2018-2019-2 20165316 『网络对抗技术』Exp3:免杀原理与实践 一 免杀原理与实践说明 (一).实验说明 任务一:正确使用msf编码器,msfvenom生成如jar之类的其他文件, ...
- 2017-2018-2 20155303 『网络对抗技术』Exp3:免杀原理与实践
2017-2018-2 20155303 『网络对抗技术』Exp3:免杀原理与实践 --------CONTENTS-------- 1. 免杀原理与实践说明 实验说明 基础问题回答 2. 使用msf ...
- 2018-2019-2 网络对抗技术 20165324 Exp3:免杀原理与实践
2018-2019-2 网络对抗技术 20165324 Exp3:免杀原理与实践 免杀原理及基础问题回答 免杀 1. 一般是对恶意软件做处理,让它不被杀毒软件所检测.也是渗透测试中需要使用到的技术. ...
- 2017-2018-2 《网络对抗技术》 20155322 Exp3 免杀原理与实践
#2017-2018-2 <网络对抗技术> 20155322 Exp3 免杀原理与实践 [-= 博客目录 =-] 1-实践目标 1.1-实践介绍 1.2-实践内容 1.3-实践要求 2-实 ...
- 2018-2019-2 20165209 《网络对抗技术》Exp3:免杀原理与实践
2018-2019-2 20165209 <网络对抗技术>Exp3:免杀原理与实践 1 免杀原理与实验内容 1.1 免杀原理 一般是对恶意软件做处理,让它不被杀毒软件所检测.也是渗透测试中 ...
- 2017-2018-2 『网络对抗技术』Exp3:免杀原理与实践
1. 免杀原理与实践说明 一.实验说明 任务一:正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,自己利用shellcode编程等免杀工具或技巧:(1.5分) ...
- sql注入原理与实践
转自:http://blog.csdn.net/stilling2006/article/details/8526458 1.1.1 摘要 日前,国内最大的程序员社区CSDN网站的用户数据库被黑客公开 ...
- 网络对抗技术 2017-2018-2 20152515 Exp3 免杀原理与实践
基础问题回答 (1)杀软是如何检测出恶意代码的? 答:分析恶意程序的行为特征,分析其代码流将其性质归类于恶意代码. (2)免杀是做什么? 答:一般是对恶意软件做处理,让它不被杀毒软件所检测,也是渗透测 ...
- 20155229《网络对抗技术》Exp3:免杀原理与实践
实验预习 免杀: 看为一种能使病毒木马避免被杀毒软件查杀的技术. 免杀的分类: 开源免杀:指在有病毒.木马源代码的前提下,通过修改源代码进行免杀.. 手工免杀:指在仅有病毒.木马的可执行文件(.exe ...
随机推荐
- gcc 与 g++的区分较
一:gcc与g++比较 误区一:gcc只能编译c代码,g++只能编译c++代码两者都可以,但是请注意:1.后缀为.c的,gcc把它当作是C程序,而g++当作是c++程序:后缀为.cpp的,两者都会认为 ...
- MCS锁——可伸缩的自旋锁
在编写并发同步程序的时候,如果临界区非常小,比如说只有几条或几十条指令,那么我们可以选择自旋锁(spinlock).使用普通的互斥锁会涉及到操作系统的调度,因此小临界区一般首选自旋锁.自旋锁的工作方式 ...
- java基础学习总结——线程(二)
一.线程的优先级别
- 20172329 2018-2019 《Java软件结构与数据结构》实验三报告
20172329 2018-2019-2 <Java软件结构与数据结构>实验三报告 课程:<Java软件结构与数据结构> 班级: 1723 姓名: 王文彬 学号:2017232 ...
- 奔跑吧DKY——团队Scrum冲刺阶段博客汇总
第一周:团队展示 团队选题 需求规格说明书 第二周:完善需求规格说明书.制定团队编码规范.通过团队项目数据库设计 奔跑吧DKY--团队Scrum冲刺阶段-Day 1-领航 奔跑吧DKY--团队Scru ...
- 20162328蔡文琛 week05 大二
20162328 2017-2018-1 <程序设计与数据结构>第5周学习总结 教材学习内容总结 集合是收集元素并组织其他对象的对象. 集合中的元素一般由加入集合的次序或元素之间的某些固有 ...
- 找"1"
题目:给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的次数. 要求:1.写一个函数f(N),返回1到N之间出现“1”的个数.例如f(12)=5. 2.在32位整数范围内 ...
- java异常处理及自定义异常的使用
1. 异常介绍 异常机制可以提高程序的健壮性和容错性. Throwable:Throwable是java语言所有错误或异常的超类. 有两个子类Error和Exception. 1.1 编译期异常 编译 ...
- 四则运算截图and代码
1.运行截图 2.代码 #include<stdio.h> #include<stdlib.h> int main() { int i=300; int a=0; while( ...
- js访问对象属性的两种方法
var obj={name:'fuuf',age:19} 第一种,用.访问 obj.name 第二种 用[]访问 obj['name'] //此时name是字符串,要加引号 注意事项 使用第二种方法 ...