一开始是奔着dz去的,注册了个账号,想试一下任意文件删除然后重装getshell,当然。。。失败了。。最新版dz。
然后有个老铁说有个旁站,是一个发卡平台,抄出我的google大法搜到了别人破解的源码。 然后丢到环境里搭起来晾着。
nmap扫端口扫到了两个开放http的端口一个是88,一个是888.
打开后发现888是宝塔的管理面板。
当时我就装了个宝塔打算巴拉巴拉一波,静态跑一遍之后忽然想起今天要上班还是不看宝塔了,转而去发卡平台源码巴拉巴拉。
上代码审计工具看了下,没有过滤,注入是肯定有的,但是我并不想注入。。。因为。。。我不会mysql。。。
随便贴张图吧

那么问题来了,注入不搞的话怎么去getshell或者弄管理员密码呢?
全部巴拉巴拉了一遍源码之后发现一个文件没有校验登陆状态。唔。。。没错 那是个ajax.php
只要参数正确就可以传递内容过去。
这是密码修改的后端代码

请求大概是这样

就这样我们修改成功了。。。。
然后就是怎么get个shell。。。
看了几个功能之后觉得可以试试上传文件。。但是上传绕过太烦。。
代码如下

这时看到了一个echo的东西。。。这是个很重要的突破点
代码如下

之前我们说过这个程序没有过滤之类的操作,
so。。看一下这个emailconfig.php是长什么样

我突然想到了存储型xss,从存储型xss想到了前后代码补全get个shell。。。
先搓一个五毛钱的phpinfo

提交之后返回修改邮件的标签可以发现如下情况

ojbk再搓一个一块钱的shell

然而很不幸的是。。。500错误了。。。在看了一下phpinfo打印的信息发现。。。

全都GG了。。
这种情况很尴尬。。。非常的尴尬。。。
欣赏了一会音乐之后想起我为什么不读一下文件试试?毕竟mysql是开放的,于是乎。。。去读了dz的配置文件
还行啦这玩意居然是root账号。。。
当时我就操出我的mysql udf准备扫操作一波。。。但是忽然发现root不能远程登陆。。于是再搓一个远程登陆的查询语句
[email protected]_connect('localhost','root','root');mysqli_select_db($link,'mysql');mysqli_set_charset($link,'utf8');mysqli_query($link,"update user set host = '%'where user= 'root';");mysqli_query($link,"GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;");mysqli_query($link,"flush privileges;");
大概是这样 ,然后刷新一下php页面就能远程连接了。
这时我还要读一下目录看看plugin文件夹在不在。。。于是又搓了一个读文件夹的代码
print_r(glob($_GET['id']. '/*' , GLOB_ONLYDIR));
唔。。事实证明并没有plugin目录。。。gg。。
这时我又继续听歌。。突然我想起这玩意目录里有个aspnet_client
能不能搓个asp?
于是又搓了一行代码用来创建asp文件
file_put_contents('one.asp', '');
于是。。生成了一个asp的shell。。访问成功

这时。。。开始创建个mysql的plugin目录用于传udf。。。然而折腾了一会之后发现udf加载失败。。。头大。。。放弃这个方案。
这是我们开始打宝塔的主意,
巴拉巴拉找到了宝塔的数据库文件。。是个sqli。。直接打开发现是MD5加密的密码。。。。唔。。。cmd5查不到。。。
突然间我又突发奇想。。。宝塔的网站目录能不能读?
事实证明是可以的。。。

于是去看了下login.php
唔。。。直接改登陆认证。。。

然后就登陆上了宝塔的面板。。。。
翻了一圈没找到个执行命令的地方 有个计划任务还不执行。。这就很蛋疼。。。
抽了两根烟。。又翻了下宝塔的文件夹。。。突然灵光一现。。这TM宝塔还有个独立的php环境。。。搓开php.ini发现没有过滤。。。。ojbk直接传个php到宝塔面板根目录

我们终于从iis_user变成了system。。。
唔。。接下来就简单了。。。创个用户。。远程登陆。。。脱裤脱源码。。。。收工

原创文章,作者:Y4er,未经授权禁止转载!如若转载,请联系作者:Y4er
评论列表(1条)
师傅,为什么传asp马之后不是拿到shell了呀,提权工具直接提权就行了呀,我想的是如果能正常提权,也不用去读宝塔的配置文件吧,直接读密码登录。如果不能提权是不是就是像师傅这样操作呀