其中的失败过程就不提了,突破点在于jwt,不了解jwt的可以看本站另一篇文章
jwt的几种攻击手法
0x01 信息收集
网站长这样,域名为xxx.cc
类型是抢单站,就是要你交钱,然后分配淘宝、京东等任务单给你做。其实就是诈骗站了
通过子域名工具收集到以下几个子域名
- dlds.xxx.cc
- api.xxx.cc
- dld.xxx.cc
发现其他同类型的站很多请求到了api.xxx.cc,目标站也是请求了另一个api,但是我们主要是拿下目标站,所以不作考虑
而dld.xxx.cc与主域功能一样,只是换了个域名而已
通过dlds.xxx.cc得到后台地址为:dlds.xxx.cc/index.php/Public/login.html
通过在主域上简单浏览发现,网站需要邀请码注册,且短信接口功能不能正常使用,通过试玩账号功能简单测试了一下,没发现啥漏洞,因为目标站是通过api传输数据,其实前台就是h5而已,所以把目标转移到子域:dlds.xxx.cc上面
0x02 tp日志泄露拿到前台账号密码
dlds.xxx.cc,通过随便输入一个不存在的路径,得知为thinkphp框架,且版本为3.2.3的。
测试tp框架,如果为5.x版本,我一般会尝试下rce,而对于这种不存在rce的版本,我一般会尝试访问下tp的日志目录,看存不存在日志泄露。
tp3的日志路径默认为:Application/Runtime/Logs,通过访问,发现403,说明存在,而我们要想看到管理员的操作,一般要进入到Admin目录下。
tp3的日志命名格式为: 年_月_日.log。所以最后路径为:dlds.xxx.cc/Application/Runtime/Logs/Admin/20_04_26.log
成功下载到日志文件,但是下载一天的日志文件,可能看不出啥东西来,这时候需要批量下载日志文件,我这里用到了工具来下载 工具地址,批量下载之后,全局搜索password,并未发现关键字,说明并未记录站长的登录sql语句。这时候只能退其次而行之,去拿一个前台的账号密码,因为试玩账号很多功能是不能用的,比如修改姓名,充值等。通过访问dlds.xxx.cc/Application/Runtime/Logs/Home/20_04_26.log,得到前台账号密码
0x03 通过jwt爆破工具破解key
登录之后,发现网站是用jwt来作为标识的。
空口令等测试,发现行不通,最后只能爆破来进行测试了(后面发现不需要爆破就能得到key,后文会提及)
这里我使用c语言编写的爆破工具进行爆破工具地址
最后爆破成功,key为EMERG
0x04 通过key构造SQL注入
在jwt中的uid字段,构造相应的payload,然后利用key加密(https://jwt.io)得到新的jwt,然后抓包,更换资料处,填入jwt,造成sql注入
0x05 后台任意文件上传getshell
通过注入出来的账号密码,登录到后台,在网站LOGO上传处,任意文件上传getshell
后记
其实突破点就是这个key了,人品好,爆破到了。拿下shell之后,复盘发现,在jwt随便输入一个字符,使其报错,会把key爆出来。
个人猜测是tp输出报错信息的原因,以后再遇到这种tp有jwt站的时候,可以不急着爆破,试试报错,可能会有收获
最后看了一下这骗子流水,哎,心塞