您的位置:首页 > 编程语言 > ASP

学习脚本黑客:cookie欺骗漏洞和XSS攻击

2018-02-16 23:35 1291 查看
本文介绍两种黑客攻击技术

写的有点乱,想到哪就写到哪。

cookie欺骗漏洞

首先明确,cookie是一个文本文件,存储在我们本地主机上以方便下一次重复登录同样的页面;cookie伴随着用户的请求和页面在Web服务器与浏览器之间传递

下面开始详细介绍cookie

[b]Cookie的语法格式[/b]

一般情况下,cookie通常由服务器端通过HTTP请求和相应头发送给浏览器,但是利用JavaScript,可以在本地浏览器中设置cookie,这样做的好处是免除了服务器端处理cookie的工作,从而降低服务器的负担

Cookie是由“名-值”对组成的文本;一个cookie字符串中最多能过存储20个“名-值”对;对于每一个HTML文档来说,浏览器只存储一个cookie;

在构造cookie时,制定的“名-值”对的
name=value
称为属性,它必须使用分号作为结束符;在组成cookie的字符串中不允许使用分号、逗号、以及空白符;HTTP Set-Cookie头的格式为:


Set-Cookie:name=value;[expires=data];[path=pathname];[domain=domainname];[secure];


其中,方括号表示该属性可以省略,
name=value
属性可以包含多个;例如:


Set-Cookie:id="习近平";expires=Wed,28-Fer-07 15:13:00 GMT;domain="baidu.com";path="/";secure;


[b]Cookie属性详解[/b]

1.
name=value


这个属性是指定Cookie数据项的名称;一般比较常见的名称包括会话标识用户名等,可以指定喜欢的任何标识符作为该名称;语法格式为:

nameofcookie=value;
;nameofcookie => cookie的数据项的名称
;value => 该名称对应的值,是一个字符串(不含逗号分号空白符)


栗子:

id=123456789
email=fuckyouanyway@gamil.com
name=demon


2.
expires=data


这是一个可选属性,它指定了cookies的过期日期;一般情况下,给data一个接近会话时间的日期时间值,这样,在浏览器结束当前会话时,cookie就会过期,从而删除cookie;但是可以通过给expires属性给定一个较长的时间值,从而长久的保存该cookie;其格式为:

expires=weekday, DD-MON-YY HH:MM:SS GMT
;weekday:星期几(全称或者缩写),时间按照时:分:秒来写,GMT为格林威治时间
;一旦cookie过期,会自动删除


栗子:

expires=Friday, 14-Jan-07 15:50:00 GMT
expires=Mon, 14-Jan-07 15:40:12 GMT


3.
path=pathname


这也是一个可选项,指定cookie可以用于特定服务器中的什么位置;在cookie中指定路径可以同一个域中的多个页面共享,例如:

栗子:

path=\home
path=\aa\bb\int(Windows下为反斜杠)


4.
domain=domaimname


同样是一个可选项,它指定是否所作用的域名后,可以在同一个域的多个服务器之间共享cookie,而无需为每一个服务器都指定cookie;语法既可以使用完整的URL格式,也可以省略http://来写:

栗子:

domain=www.google.com
domain=http://www.baidu.com


5.
secure


可选。它指定是否通过安全的通道传输cookie;如果设定该属性,则必须使用HTTP协议进行传输,其语法格式(栗子)为:

secure;


Cookie最广泛的应用就是“网络购物车”

补充知识到此为止。

[b]Cookie欺骗漏洞正文部分[/b]

对于Windows用户,可以在
C:\Document and Setting\用户名\Cookies
目录中找到Cookie文件(文本文件)


对于Mac用户,可以在
~/Library/cookies
找到Safari的cookie,在
~/library/application support/google/chrome
找到Chrome的cookie


既然是文本文件,必然可以修改 :-)

我们可以把Cookie修改成别人的,这样达到欺骗浏览器的目的(好坏(´▽`))

推荐使用第三方软件打开……
4000


Cookie文件是以不同的站点为组织的



比如上面,点击“百度域名”,可以找到围绕该域名有一个“BAIDUID”文件,点击进入(如果用第三方软件,文件界面会组织得很好,方便修改)



然后就可以修改相关信息了

在这之前,需要用到一点Google Hack的知识

intext:function tovote(){window.open}
intext:submit():}"
intext:formvote.action=
intext:write(vote)


……

XSS漏洞攻击

跨站漏洞产生的原因是由于程序员在编写程序时对一些变量没有做充分的过滤,直接把 用户提交的数据送到 SQL 语句里执行,这样导致用户可以提交一些特意构造的语句 一般都 是带有像 JavaScript 等这类脚本代码;在这基础上,黑客利用跨站漏洞输入恶意的脚本代 码,当恶意的代码被执行后就形成了所谓的跨站攻击

一般来说对于人机交互比较高的程序, 比如论坛,留言板这类程序都比较容易进行跨站攻击; 利用跨站漏洞黑客可以在网站中插 入任意代码,这些代码的功能包括获取网站管理员或普通用户的 cookie,隐蔽运行网页木 马,甚至格式化浏览者的硬盘,只要脚本代码能够实现的功能,跨站攻击都能够达到,因此 跨站攻击的危害程度丝毫不亚于溢出攻击

浏览器为什么会执行恶意用户输入的代码呢?这是由于浏览器的不足之处而造成的。浏 览器的功能就是解释 Web 服务器发送过来的 HTML 代码,它无法分辩出哪些 HTML 代码应该解 释执行,哪些只是数据内容(比如上面提到的昵称、评论、头像、E-mail 等)从而应该简 单显示

如果恶意用户的输入部分符合 HTML 的语法规范,则在显示时,就会被浏览器自动 解释成 HTML 代码

如果利用浏览器 的某些漏洞,绕过浏览器的安全策略,那么可以随意实现访问硬盘,执行代码的任意功能了, 这就是常说的“挂马”了

[b]检测漏洞条件[/b]

经典的
alert()
函数测试:


<script>alert('Hack!')</script>


如果发现真的出现了弹出消息框(alert函数被执行。),则说明该页面存在XSS漏洞(开心啊)

但是因为这个漏洞太常见了所以修复工作也做的很好,大部分这样的语句都被过滤掉了(也就是说,此处输入的
<script>
这样的标签已经被实体化为真正的字符了所以不起作用)


这时候不要灰心,我们可以转换思路,从已经存在的属性字段中挖掘漏洞:

<img src=javascript:alert("test") >


如果
javascript:
关键字也被过滤掉了,就试试用ASCII码表示(转换成一些16进制的值):


<img src="javascript:alert(/xss/)">


或者添加空格:

<img src="javas????cript:alert(/xss/)" width=100>


还可以用事件属性避免关键字(如
javascript:
等)绕过检测:


<img src="#" onerror=alert(/xss/)>


<img src="#" style="Xss:expression(alert(/xss/));">


另外,可以借助如Google的开发者工具查看网页源码:

通常一种常规的关键字替换操作是:
<
替换为
<
>
替换为
>
,这样一来浏览器只会攻击者输入的
<
作为普通文本对待(而不是HTML之类的网页代码),这也算是一个小经验吧。


此外,如果有符合自己尝试行输入的本文代码也是潜在的漏洞(因为这样网页源码的内容就完全取决于你的输入):

假设你通过查看网页源代码,发现
<a href =></a>
的超链接形式


<a href="mailto:<img src=javascript:alert("test")>"></a>


BINGO!,这里(没有改变的输入内容,看到这里会兴奋的)

<img src=javascript:alert("test")>


不就是我们最先尝试的哪个注入语句吗?看来这里是一个潜在的注入点——我们可以尝试不同的输入以达到改变上下文的完整意思的目的

"></a><img src=javascript:alert("test") >


解释:
"
和之前的冒号闭合,
</a>
闭合整个超链接标签(某种意义上使其失效),
<img src=javascript:alert("test") >
这就是我们真正要注入执行的代码了(前面的是闭合语句,这才是攻击语句)


一次成功攻击!(虽然很简单。)

总结几点:

1. 学会查看网页源码

2. 在1的基础上不断测试注入语句,能找到嵌套内容完全不变的就是注入点

3 最关键的是构造注入语句,指导思想是“闭合语句,让源代码(网页代码)失效,让新代码(注入代码)生效”

4. 学习JS脚本语句,对于基本语句的使用要烂熟于心
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息