2019. 1. 7. 16:07ㆍWeb Hacking/Webhacking.kr
안녕하세요!
오늘도 비교적 쉬운 문제인
150점짜리 25번 문제를 풀어보도록 할게요!
25번 문제를 클릭해서 들어오니!
이렇게 뜨네요?
합계 12 밑에
-rw-r--r-- 1 old zombie users 등등 적혀있는데...
웹 해킹만 공부하신 분들은
"이건 처음보는데? 뭐지? 후우...."
이렇게 생각 하실 수 있습니다!
왜냐면 이건 리눅스와 관련된 거에요!
저도 시스템 해킹 공부하고 있어서
다행히 보고 무슨 말인지
이해 했네요!
--rw-r--r-- 여기가 중요해요!
이 부분이 파일에 어떠한 권한이
부여됐는지 알 수 있거든요!
※그러면 일단 무슨 권한들을 파일에게 줄 수 있는데?
(1) r = read(읽기 권한) 4의 값을 가짐
(2) w = write(쓰기 권한) 2의 값을 가짐
(3) x = execute(실행권한) 1의 값을 가짐
그러니 각각의 파일에 어떤 기능들이 부여됐는지 아시겠죠?
리눅스 창에서 파일이 들어가 있는 아무 폴더에 들어가셔서
ls -al입력하면 아래와 같은 리스트가 생성되는 것을
구경 하실 수 있으실 거에요!
ls -al은 대략 list -all
명령어의 약자라고 보시면 됩니다!
옆에 적힌 정보들은 문제 푸는 데 필수적이진 않습니다!
다만 3가지의 파일이 있고,
txt파일 1개 php 파일 두 개있다!
이 정도로 이해하시면
될 것 같습니다!
그리고 url창을 보니 ?file=hello
이렇게 적혀있네요!
이건 php에서 GET방식으로 file에 값을
넘겨준거네요!
어떻게 아냐고요?
php에서 get방식과 post 방식이 있는데
GET 방식은 이렇게 url 뒤에 ?변수이름(file)= (hello)값
이러한 방식으로 전달하고
POST 방식은 url창에 아예 GET방식도
어떤 것도 안 보여줘요!
다 숨겨요!
※물론 보안은 POST가 좋지만, GET방식이 더 빠르고 효율적이여서
GET방식으로 개발을 많이 하시죠! ㅎㅎ
자 저는 그래서 이렇게 생각했습니다!
어? 파일이 3개인데? 이 문제는 어떻게 풀어야 하지?
누가봐도 password.php가 존재하는데
저거를 뭔가 읽어야 할 것만 같아!
저기에 어그로가 끌릴 수 밖에 없죠?
그래서 음....
지금은 file에 hello를 입력해서
hello.txt 내용인
hello world을 불러왔구만
나도 file에 그럼 password를 입력하면
password.php 내용을
볼 수 있겠구만 하고!
file=password를 입력하였습니다!
※확장자는 왜 뒤에 안 씀?
아니 hello.txt도 뒤에 확장자 안 썼길래...
똑같이 생략해 봤어요 ㅎ
그랬더니 다시 hello.txt로 회귀하네요... 뭐지?
왜 안읽히는거지?
같이 고민좀 해봐요!
그 이후에도 제가 뭐 다른 값들을
다 때려박아 봤습니다!
그랬더니 뭘 넣든 똑같더군요!
그래서 든 생각!!!!
아 설마 이거 파일 확장자를 고정 시켜놨나? txt로?
그래서 찾는 파일이 없으면 다시 hello.txt로 오게하라고?
인터넷에서 찾아보니 php에서는 파일 확장자를
숨길 수 있더군요!
그래서 제가 이렇게 의심을 해본 것 입니다!
그러면 어떻게 이 난관을 헤쳐나갈 것인가?
내가 무엇을 넣든
(내 입력값).txt <-------- 이 꼴이 될텐데
.txt 저 놈을 어떻게 따돌리지?
그래서 찾아본 취약점중에 php의 약점하나!
NULLBYTE 인젝션!
(아무것도 아닌(NULL) 값)
%00을 입력하면 함수가
" 아 이놈 입력 다했네, 자 이제 끝!"
이렇게 인식한다네요!
이게 어디서 비롯된거 나면,
C와 C++이 이런 취약점이 있는데,
PHP가 C를 기초로 해서 만든거라
뭐 취약점이 공통적으로 존재하는 거 같아요!
근데 이러한것들도 최신 php에서는
업데이트 되어서 더이상은 취약점이
아닌걸로 알고있어요!
아래는 제가 php 사이트에서
캡쳐해온 것입니다!
자 그러면 이 nullbyte를 활용해서 어떻게
문제를 풀어야 할까요?
nullbyte를 앞에다가 붙여볼까요?
아래처럼 안되네요!
물론 제가 password.php로 안적어서
틀린 것도 있지만
%00 널바이트 위치가 잘못되었어요!
왜냐면 저희가 %00를 password앞에다가
넣으면 %00뒤에 있는 문자들은
인식이 아예안되죠?
%00뒤로는 이미 함수에서
이미 작업이 종료된줄 안다고
말씀드렸죠!!
그럼 어떻게 해야한다?
뒤에다가 넣어야 한다!
왜?
뒤에 password.php%00 이렇게
입력하게 되면
php가 아 %00 있네!
여기까지만 일해야지!
하고 그만두니까
저희 뒤에 맨날 거머리같이
달라 붙었던 .txt가 인식이 안되는 거죠!
그러니 당연히 file은 password.php가
인자로 들어왔으니!
해당 파일 내용을 보여주는 거죠!
그래서 아래와 같이 비밀번호가
나옵니다!!!
오늘도 문제 푸시느라 고생하셨습니다!
'Web Hacking > Webhacking.kr' 카테고리의 다른 글
[어설픈] webhaacking.kr 58번 문제풀이 (0) | 2019.01.08 |
---|---|
[어설픈] webhacking.kr 23번 문제풀이 (0) | 2019.01.07 |
[어설픈] webhacking.kr 6번 문제풀이 (0) | 2019.01.04 |
[어설픈] webhacking.kr 1번 문제풀이 (0) | 2019.01.03 |
[어설픈] webhacking.kr 26번 문제풀이 (0) | 2019.01.02 |