原文地址

一开始是奔着dz去的,注册了个账号,想试一下任意文件删除然后重装getshell,当然。。。失败了。。最新版dz。

然后有个老铁说有个旁站,是一个发卡平台,抄出我的google大法搜到了别人破解的源码。 然后丢到环境里搭起来晾着。

nmap扫端口扫到了两个开放http的端口一个是88,一个是888.

打开后发现888是宝塔的管理面板。

当时我就装了个宝塔打算巴拉巴拉一波,静态跑一遍之后忽然想起今天要上班还是不看宝塔了,转而去发卡平台源码巴拉巴拉。

上代码审计工具看了下,没有过滤,注入是肯定有的,但是我并不想注入。。。因为。。。我不会mysql。。。

随便贴张图吧
1.png
那么问题来了,注入不搞的话怎么去getshell或者弄管理员密码呢?

全部巴拉巴拉了一遍源码之后发现一个文件没有校验登陆状态。唔。。。没错 那是个ajax.php

只要参数正确就可以传递内容过去。

这是密码修改的后端代码
2.png
请求大概是这样
3.png
就这样我们修改成功了。。。。

然后就是怎么get个shell。。。

看了几个功能之后觉得可以试试上传文件。。但是上传绕过太烦。。

代码如下
4.png
这时看到了一个echo的东西。。。这是个很重要的突破点
代码如下
5.png
之前我们说过这个程序没有过滤之类的操作,
so。。看一下这个emailconfig.php是长什么样
6.png
我突然想到了存储型xss,从存储型xss想到了前后代码补全get个shell。。。
先搓一个五毛钱的phpinfo
7.png
提交之后返回修改邮件的标签可以发现如下情况
8.png
ojbk再搓一个一块钱的shell
9.png
然而很不幸的是。。。500错误了。。。在看了一下phpinfo打印的信息发现。。。
10.png
全都GG了。。

这种情况很尴尬。。。非常的尴尬。。。

欣赏了一会音乐之后想起我为什么不读一下文件试试?毕竟mysql是开放的,于是乎。。。去读了dz的配置文件

还行啦这玩意居然是root账号。。。

当时我就操出我的mysql udf准备扫操作一波。。。但是忽然发现root不能远程登陆。。于是再搓一个远程登陆的查询语句

$link=@mysqli_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。。访问成功
11.png
这时。。。开始创建个mysql的plugin目录用于传udf。。。然而折腾了一会之后发现udf加载失败。。。头大。。。放弃这个方案。

这是我们开始打宝塔的主意,

巴拉巴拉找到了宝塔的数据库文件。。是个sqli。。直接打开发现是MD5加密的密码。。。。唔。。。cmd5查不到。。。

突然间我又突发奇想。。。宝塔的网站目录能不能读?

事实证明是可以的。。。
12.png
于是去看了下login.php
唔。。。直接改登陆认证。。。
13.png

然后就登陆上了宝塔的面板。。。。

翻了一圈没找到个执行命令的地方 有个计划任务还不执行。。这就很蛋疼。。。

抽了两根烟。。又翻了下宝塔的文件夹。。。突然灵光一现。。这TM宝塔还有个独立的php环境。。。搓开php.ini发现没有过滤。。。。ojbk直接传个php到宝塔面板根目录
14.png
我们终于从iis_user变成了system。。。
唔。。接下来就简单了。。。创个用户。。远程登陆。。。脱裤脱源码。。。。收工
15.png