第七章-漏洞利用
7.1渗透前的准备
需要确认的信息:
- 目标环境
譬如CMS是否开源(开源意味着可以使用白盒测试,否则只能黑盒测试)、
Web服务类型,SNS、blog、电商、微博,及B/S架构的譬如Wiki、Trac、办公系统、安全平台等。
还需考虑Web服务是否部署了WAF、如何绕过等。 -
目标用户
譬如CMS管理员、客服、普通用户、黑客/安全人员等,可综合利用社工等。 -
预期效果
明确每一阶段的效果,如获取Cookies、添加一篇文章、传播网马、盗取密码、破坏数据等。
7.2 偷取隐私数据
7.2.1. XSS探针
XSSprobe:https://github.com/evilcos/xssprobe
通过此工具可以获取目标页面的通用数据。
如:browser、ua(user-agent)、lang(language)、referer、location、toplocation(父类location)、Cookie、domain(目标页面域名)、title、screen(屏幕分辨率)、flash(flash插件版本信息).
7.2.2.Referer威胁
1.可能泄露token
2.可能邪路sid
保护措施:
- 若当前页面不存在任何第三方域的链接,可以不用担心Referer泄露隐私的风险。否则,改进网站的一些安全性架构,不在URL中直接带上隐私数据;要么,点击第三方链接进行中间跳转,跳转至可信第三方域。
-
rel = "noreferrer"属性,可以让请求不带Referer。目前仅chrome支持(WebKit内核)。趋势
<a href="http://www.foo.com/" rel="noreferrer">noreferrer!</a>
7.2.3.浏览器记住的明文密码
可以通过dom操作获取。
问了一下做java ee的实验室老哥他们的记住密码机制是用token发到服务端从nosql里读取。
有价值
7.2.4.键盘记录
用处不大,不如劫持表单方便,如onchange、onblur、onclick等。
且仅能在全英文输入(ASCII)情况下使用,存在中文输入框时,记录不了击键事件。
若想做完美,需融入表单项等事件的监听机制。
7.2.5.偷取黑客、安全人员隐私
绕过noscript插件,可通过网站“私信模块”。
7.3 内网浅渗透
主要是Web层面(主要是JavaScript)内网渗透。
7.3.1.获取内网IP
内网IP 有一比较好方式---Java Applet,但需要JRE支持。
MyAddress.class是Java Applet文件,功能就是通过Java获取内网地址,然后调用上层的JavaScript函数MyAddress,将获得的IP显示出来。
7.3.2.获取内网IP端口
可通过跨域AJAX技巧或Web Socket方法实现IP端口获取。
Image对象请求时,得到资源(非法)就onerror,否则timeout.
var m=new Image();
m.onerror = function(){
if(!m)return;
m = undefined; alter("open");};
m.onload = m.onerror;
m.src='http://'+host+':'+port;
setTimeout(function(){
if(!m)return;
m = undefined; alert("close");
},900);
}
7.3.3.获取内网主机存活状态
原理:
- IE下XDomainRequest跨域请求
onerror-fail
ontimeout-ok -
其他浏览器XMLHttpRequest跨域请求
onreadystatechange - 根据时间差来判断,timeout则fail -
资源:
http://ha.ckers.prg/weird/xhr-ping-sweep.html
http://securethoughts.com/security/ie8xdr/ie8xdr-ping-sweep.html -
相较nmap
7.3.4.路由Web控制台操作
<img>
简单CSRF修改各种配置,如:迅捷FW300R- 前提:目标的浏览器保存了Web控制台会话
- 配置可远程访问
<img src =http://192.168.10.1/userRpm/ManageControlRpn.htm?port=80$ip=255.255.255.255&Save=%C8%B7+%B6%A8
- 这是一段CSRF。将远程Web管理IP地址设置为255.255.255.255,即可攻击成功,可举一反三。
- 修改无线密码、恢复出厂设置、修改转发规则等
7.3.5.内网脆弱Web应用控制
- 主动:fuzzing内网可能存在的Web应用
- window.onerror=function(){return true;};
- inject
```html
<script>
<script src=http://intra/trac/chrome/tracwysiwyg/wysiwyg.js>
<script>
window.onload = function(){
if(typeof(TracWysiwyg)=='funcion')alert('trac exist.');
}</script></li>
</ul></li>
</ul><pre class="line-numbers prism-highlight" data-start="1"><code class="language-null"><br /><br />- 被动:通过referer泄露内网Web应用信息
- 这些内网应用可能有:
- bbs/blog/trac/wiki/oa/mail/project/webim/web_vuls_vm
- 有开源有闭源
- 这些Web应用有不同种类的漏洞,如果是xss+sql:
- xss inject攻击脚本
- 攻击脚本AJAX请求SQL注入,得到想要的数据,返回。# 7.4 基于CSRF的攻击
- 基于CSRF的SQL注入
- 基于CSRF的命令执行
- 基于CSRF的XSS攻击- 基于CSRF的攻击类似于“借刀杀人”。
# 7.5 浏览器劫持
劫持用户点击链接操作,打开新窗口的时候注入攻击者的JavaScript脚本,以达到将XSS威胁延续到同域内的其他页面。# 7.6 跨域操作
浏览器相关缺陷导致的跨域,即使已修补,可举一反三。
### 7.6.1.IE res:协议跨域
探测本地域是否存在目的软件
P232 POC7.6.2. CSS String Injection跨域
www.a.con/test.html代码:
```html
<body>
{}body{font-family:
aaaaaaaaaaaa
bbbbbbbbbbbbbb
</body>
攻击者页面:www.b.com/test2.html:
<style> @import url("http://www.a.com/test.html"); </style> <script> setTimeout(function(){ var t = document.body.currentStyle.fontFamily; alert(t); },2000); </script>
@import 导入外域CSS文件,本身正常行为。IE通过document.body.currenStyle.fontFamily方式访问目标样式的font-family属性,其值恰为font-family之后的所有内容。
为CSS高容错性导致。7.6.3.浏览器特权区域风险
浏览器为了支持更多方便的功能,往往需要一些特权区域存在,这些特权是相对浏览器的Internet域来说的,比如扩展、插件能够和本地系统打交道,一些功能页面也有和本地系统打交道的能力。
- 如果我们的XSS能够跨到特权区域里,即可做更多更大权限的操作。
此过程称之为Cross Zone Scripting或Cross Context Scripting(XCS)7.6.4.浏览器扩展风险
浏览器为了丰富自身功能,允许第三方提供各类插件或扩展,但扩展权限如果没有控制好,就会带来很严重的后果。
如chrome插件speed dial2 存在DOM XSS,通过这个XSS可以越权操作,导致各种严重的信息泄露问题。
speed dial2 会将用户访问的链接信息储存在localstorage中,其中有一个关键字是_closed_tabs
,这个关键字的值储存了最近关闭的链接信息,如url、title,其中title如果存在恶意脚本,就会触发DOM XSS。7.6.5.跨子域:document.domain技巧
很多网站会把不同的子业务方放到不同的子域下,如:
www.foo.com
app.foo.com
blog.foo.com
message.foo.com
但在这些子域下总会存在一个类似proxy.html的文件,文件内有如下代码:
<script>document.domain="foo.com";</script>
有一个合法的性质是,这个页面可以设置document.domain为当前子域或比当前子域更高级的域。一般顶级就到了根域,如果设置为其他域,浏览器就会报权限错误。
可利用WebKit内核浏览器的一个缺陷(由sog 1发现),导致顶级域为域名后缀,如foo.com的域名后缀是com。
- 此类问题在web2.0网站上几乎是常态,有的网站设置不通过proxy.html,而是在任意页面都嵌入公共的js文件,在这个js文件里设置document.domain为顶级域,这样的做法给XSS带来巨大便利,只要在任意子域下找到XSS漏洞,都能危害到目标页面。
7.6.6.跨域索引
1.利用UNC“跨域”
通过Internet域(http协议)的代码,比如
<iframe>
标签利用file协议调用本地的XSS漏洞页面,并通过这个本地XSS执行任意的JavaScript代码,由于是file协议,所以权限会更大。
IE可以通过UNC方式(“统一命名约定”地址用于确定保存在网络服务器上的文件位置)访问本地文件,如:
file:////127.0.0.1
由于是UNC方式,浏览器以为是Internet域,就允许访问,如此便触发了跨协议。如本地文件存在xss漏洞,则可以别调用触发。2.mhtml:协议跨域
已修补,可自行搜索研究。
7.7 XSS proxy技术
用到了基于浏览器的远程控制。
要实现远程控制,必须具备两个条件:
- 远程指令要可以在目标浏览器上“实时执行”。
- 执行结果要能够让控制端看到。7.7.1.浏览器script>请求
<script>
内容可跨域,合法,请求到的数据必须是合法的JavaScript语法格式。
请求回来的是JSON+CallBack函数这样的数据内容(这种跨域数据通信被称为JSONP)结合JavaScript的setInterval函数,间隔几秒向远控服务端指令接口请求数据,而服务端可以根据控制者的需求生成指令到中间存储文件中(如数据库、内存、文件系统等)由这个指令接口统一调度这些生成的指令。
注入的脚本文件是一个服务端动态文件,也就是服务端指令接口,每次都会返回控制着生成的指令内容,如果没有指令,则返回空内容。
缺陷:这个XSS Proxy模型大多数时间,被控浏览器发起的服务端指令接口请求都是无用功,因为很可能并没有指令内容,控制者不会每隔3秒发出一个指令。
7.7.2.浏览器跨域AJAX请求
也需要setInterval主动发起服务端指令接口请求。
唯一的好处是,异步发起,更加安静。7.7.3.服务端WebSocket推送指令
持久性的socket连接,在浏览器客户端通过JavaScript进行初始化连接后,就可以监听相关的事件和调用socket方法来对服务端的消息进行读写操作。
这种连接可跨域,至少可以拿来做远控,客户端监听onmessage事件,就能及时响应来自服务端发送过来的指令。
7.7.4. postMessage方式推送指令
是客户端最直接的跨文档传输方法。一般用在iframe中父页与子页之间的客户端通信。