昨天晚上在游戏里卖东西,有个人M我,截图没有了大概意思是让我便宜点儿,我问她能不能瞬秒,她说钱不够能不能给我充500点卡,我觉得可以,就加了她微信,给了她邮箱(我开始以为要给游戏账号的邮箱)。
过了一会儿说充好了,让我去邮箱里查,我一看:
点“激活订单”:
点“下一步”:
真的,在这种场景下很容易上当的。。。我当时已经把账号密码都输进去了,就差点“登录”了,突然反应过来,看了一眼域名:
阿里的域名服务,感觉不太对啊,再审查元素看一下,然后就!!(╯’ – ‘)╯︵ ┻━┻
当时我微信跟她说她玩儿大了,然后就把她删了。
(以下内容纯属虚构,你懂的。。)
躺床上沉思了5秒钟以后,我开始审视这几个钓鱼页面的请求,发现了一处宽字节注入:
看了一下mysql用户,发现是root,小开心,用sqlmap跑,找到当前的数据库czkzx:
这里有个sqlmap的使用技巧:这个注入能用union并且有回显,所以用–technique U指定下注入的技术,但是sqlmap默认只用order by判断1-10列,这里是13列(手动判断出来的),所以我用–union-cols 12-15指定下判断的列数(指定1-15发现sqlmap居然判断不出来)。
利用报错拿到网站绝对路径:
尝试用select into outfile写webshell,发现失败,原因是网站开了gpc。
看一下拖出来的数据,发现里面用户的密码都是以加盐hash的方式进行存储的:
找了几个破解了一下,都没成功,并且最关键的是我根本找不到后台在哪,于是我打算试下XSS。
在输入账号密码的地方插入XSS Payload,然后去数据库里查看一下:
发现数据在入库前做了HTML实体编码(后来我用sqlmap的–sql-shell去查看的时候发现是没有编码的形式,这是因为sqlmap在显示查询结果的时候做了一下解码,如下图)。
由于没有列目录漏洞,于是我就去读了几个我知道的文件源码,发现确实做了编码处理:
由于用mysql_connect方式连接的mysql不支持堆叠查询,所以也没办法用update修改数据库里的数据,XSS的思路好像也不太行。
接着想到一般这种钓鱼站都会有给fisher发推送邮件的功能,果然在数据库中找到了邮箱和密码:
但是试了一下,密码不对。。。
由于在源码中发现了数据库的root密码,于是我又回到了利用mysql写webshell的思路上,唯一的障碍就是gpc,如果能直接通过3306连接那就没有这个问题了。
尝试ping一下目标域名,发现是阿里的cdn:
试了一些方法,没有找到真实IP(其实也真不一定有公网IP)。
没什么好思路了,于是接着看源码,发现网站根目录下的index.php内容如下:
看到一个新的域名,比较好奇就ping了一下,发现居然不解析,应该是很早就到期了,现在没人注册。
然后我看到了下面的file_get_contents,突然看到了一些希望:
我可以注册这个域名,然后让钓鱼服务器访问我的网站,这样不就能获取到他的公网IP了吗!(前提是它有公网IP而不是内网映射出去的。)
一般mysql默认安装很多是0.0.0.0,但是这不意味着允许root用户远程登录,于是我先通过注入看了下:
看到%了!
抱着一丝希望,我花了45元注册了这个域名,然后把www子域解析到了我的服务器上,然后访问这个index.php,果然!我的服务器上出现了一个IP,百度了一下发现是香港的IP,不是阿里云(当时用Python启的服务,没截图,看下和小伙伴的聊天记录吧):
怀着激动的心情,我用nmap扫了下3306端口,发现端口是开放的:
连接mysql:
可以,很舒服!尝试写个phpinfo:
之后用webshell看了下权限,很低,目标mysql是5.0的,直接上t00ls的udf提权脚本:
成功拿到system权限:
查看下端口信息,发现3264端口是远程桌面的端口:
创建用户,登录:
Game Over.