周末给Anehta增加了一个新功能: ClientProxy
和目前anehta的online proxy功能不一样。
online proxy是由anehta的服务器发起的,利用的是PHP发起的socket,自定义cookie后,由服务器去访问网站。
而clientproxy功能,则完全发挥了XSS的优势,是利用客户端AJAX去发起的请求。
不过由于同源策略限制,要处理AJAX返回的数据,只能在同域下,所以目前还不能跨域发起ClientProxy请求
不过即使是这样,这个功能也是非常非常有用的,在一些情况下,服务器可能会有HttpOnly Cookie,此时使用Online Proxy可能就获取不到Cookie了。
再比如被XSS的网站有客户端证书,比如支付宝或一些网银,用U盾之类;或者是被XSS的网站有IP访问限制,或者干脆在内网里面,这些因素都会导致 Online Proxy的失效www.it165.net。
所以Client Proxy 是对 Online Proxy的非常好的补充。
不说废话了,上图:
在百度空间模拟跨站后,先GET了一下文章页面:
接下来,我尝试通过ClientProxy 发起一次POST:绕过百度空间的验证码,发一个匿名用户的评论出来!!
实际上post的参数是:
ct=8&cm=1&spBlogID=e7006862397f4d670c33fa09&spRefURL=http://hi.baidu.com/aullik5/blog/item/e7006862397f4d670c33fa09.html&spBlogCmtor=test&spBlogCmtURL=&spBlogCmtText=test&spVcode=30357370616365393532383030333436303030303030303030303030303031323236383139323037363ED1B99CC8AF19B944B35B2F06026E&spVerifyKey=URM6
验证码是 : URM6
抓包发现提交成功了!
我多点了两次,结果居然提交成功了,百度的验证码计算还是有点小问题的
在上面的例子中,手动输入了验证码,侧面解决了XSS中的验证码难题。
使用ClientProxy 就可以处理很多"多步操作"(multi-step)或者workflow的工作了。
目前ClientProxy 还有点小漏洞,比如熟悉anehta内部结构的人就可以直接调用clientproxy的触发函数,从而让后台去访问一个有跨站的页面,进而攻击到anehta后台。
由于本身clientproxy就是要尽可能的展示富文本,包括原来页面的脚本,所以这里不能做太多过滤或编码。
在下一个版本可能会考虑加上一个token以验证clientproxy请求是否是从后台发起的。