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


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

    教材十一、十二章学习总结

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

    sql注入常用技术包括:

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

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

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

    1.Sql 注入产生原因及威胁:

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

      Sql 注入带来的威胁主要有如下几点:

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

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

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

    将Security 级别调整为low:

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

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

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

    如果我们不按常理出牌,比如在输入框中输入 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_name table_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'
    

    语法正确,但逻辑判断错误,所以返回正确。

    视频学习总结

    一、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运行

    一、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等等参数,需要在实际中灵活使用。

    三、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中所使用的工具之一。

    端口监听:

    四、kali漏洞分析之BurpSuite



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

    2.爬虫与扫描

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

    4.Reapeater 改包重放模块

    5.Decoder模块

    6.compare模块

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

    7.插件模块

    五、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的漏洞

  • 相关阅读:
    WordPress搭建的新博客 www.douzujun.club
    调用weka模拟实现 “主动学习“ 算法
    危险!80% 用户正在考虑放弃 Oracle JDK…
    最新!Dubbo 远程代码执行漏洞通告,速度升级
    Tomcat 又爆出高危漏洞!!Tomcat 8.5 ~10 中招…
    Spring Boot 启动,1 秒搞定!
    为什么要重写 hashcode 和 equals 方法?
    详解 Java 中 4 种 IO 模型
    详解GaussDB bufferpool缓存策略,这次彻底懂了!
    【API进阶之路6】一个技术盲点,差点让整个项目翻车
  • 原文地址:https://www.cnblogs.com/wyz-1995/p/8743690.html
Copyright © 2020-2023  润新知