2019. 1. 1. 21:59ㆍWeb Hacking/Webhacking.kr
안녕하세요!
이번에도 비교적 쉬운 100점짜리의
24번 문제 풀이 진행하도록 하겠습니다!
우선 24번 문제를 클릭해 들어가니 이렇게 뜨는군요!
음......
Client IP= 내가 Client이니 내 아이피라는 뜻인가?
agent= Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36
흐음 뭔가 내가 쓰는 웹브라우저 이야기 하는 거 같지않나요?
제가 크롬부라우저로 접속중이고 뭔가 windows뜨고...
저도 정확히는 모르겠지만
그런 느낌을 받네요...
맨 마지막에는 Wrong IP!
그래서 든 생각이 IP만 맞으면 되는건가?
이런 의심을 품긴 품었습니다만.....
그런데 이게 뭐 자바스크립트 문제인지
SQL injection 문제인지
도저히 감이 안잡혀서 F12를 눌러서
소스를 보도록 하겠습니다!
음 열어보니 source에 index.phps가 있네요!
그러면 현재 주소창 뒤에다가 index.phps를 입력하면
이 페이지에 문제를 풀 실마리를 제공해주겠죠?
이동해봅시다!
역시!
이동해보니 이렇게 긴 소스코드가 있네요!
자 이제 한줄씩 분석해보도록 하겠습니다!
extract($_SERVER);
extract($_COOKIE);
우선 영어 단어 extract는 뭘 추출하다,가져오다
라는 의미인데요!
여기서는 Cookie와 Server를 가져온다라고
해석하면 되겠네요!
다음으로 Cookie는 뭐 쿠키/세션 값 할때 그 쿠키라
그러려니 하겠는데,
$_Server는 뭐지? 라고 생각하실 분들이
좀 계실꺼라 생각합니다
그래서 $_ SERVER에 대한 정확한 정의를
php.net 공식홈페이지에서 가져와봤습니다.
$_SERVER is an array containing information such as headers, paths, and script locations.
번역: $_SERVER는 헤더나, 경로, 스크립트 위치등의 정보를 저장하는 배열
뭐 이런식으로 이해하시면 될것 같습니다!
그리고 다음 if(!$REMOTE_ADDR)
이 부분은 REMOTE_ADDR이 없을 경우!
[변수앞에 !가들어가면 아니다, 없다 이런식으로 해석하면 됩니다!!]
REMOTE_ADDR은 저희의 ip주소라고 생각하면 될 것같습니다!
근데 만약 REMOTE_ADDR(ip)이 없을경우,
서버에 접속한 사용자의 REMOTE_ADDR=ip를
REMOTE_ADDR로 채운다!
이렇게 이해하시면 될 것 같습니다!
그리고 밑에는 저희의 $ip변수에 $REMOTE_ADDR을 넣고
$agent=$HTTP_USER_AGENT를 넣습니다
$HTTP_USER_AGENT는 제가 구글에서 찾아보니
제 브라우저와 운영체제에 대한 설명을 담고있다고 하네요!
그래서 아까 위에서 문제에 접속하자마자 뜬
Client IP, agent가
각각 이 $ip와 $agent였네요!
그리고 if문이 몇 개 더있네요!
if($_COOKIE[REMOTE])로 시작하는거 부터 보기로 해요!
만약 COOKIE_[REMOTE]가 존재하면,
str_replace라는 함수는 문자그대로 해석하면
String replace = 문자 교체
만약에 사용자가 지정한 문자가 색출되면 그걸 내가 지정한 문자로 바꿔라
여기서 보면 12가 나오면 ""로 바꾼다고 하네요?
7.도 마찬가지고 0.도 마찬가지네요!
※여기서 헷갈리면 안되는게, ""와 " "는 달라요!
""는 " 사이에 아무런 공간이 없죠? 그니까 그냥 없앤다고 보면 되요!
근데 " "같은 경우는 "사이에 공백이 있으니 만약 저희가 설정한 문자가
검출되면 그 검출된 문자를 공백으로 바꾼단 소리에요!
그리고 밑에 echo("<table border> <tr> .............. </td></tr></table>)이 부분은
아까 문제 24번 들어가자 마자 뜬 그 테이블 만든거에요!
그리고 마지막 if에 보면 $ip변수가 만약 127.0.0.1을 가지고 있으면
이 문제를 해결(solve();)한다고 되어 있네요!
어떻게 해야 문제가 풀리는지는 이제 알게되었네요!
$ip값을 저희가 변조해서 저 값과 일치하게 만들면 되잖아요! ㅎㅎ
그러면 일단 저희가 지금 가지고 있는 $ip값은 틀렸기에
문제에 접속하자 마자 Wrong ip!라고 뜬거겠죠?
그러면 저희가 생각해야할 부분은 $ip를 어떻게 바꿀까?
에 관한 것입니다.
그런데 여기서 차분히 생각해보면
문제가 extract 하는 것은 두 개 입니다!
extract(server),extract(cookie)
서버와 쿠키 이 두개지요!
그리고 일반적으로 쿠키에 사용자에 대한 정보를 담고있죠?
PHP Session ID나 나를 증명하는 그런 정보들이요!
따라서 저희의 ip주소도 cookie가 담고 있을 거라고 추측했습니다!
근데 제가 이러한 쿠키값을 어떻게 변조하느냐?
어디가면 쿠키값에 대한 접근을 할 수 있느냐?
바로 저희의 친구 console 창이죠 ㅎㅎ
근데 그 이전에 str_replace에 대한 것 먼저 보고 가요
12를 공백
7.을 공백
0.을 공백
처리한다고 적혀있습니다!
저희는 이것을 우회해야 문제를 풀 수 있습니다!
사실 간단합니다!
근데 처음에는 저도 헤맸습니다!
왜냐?
저는 str_replace가 계속 루프처럼 계속 실행되는줄
알았거든요!
예를 들면 제가 1122라는 숫자를 $ip에 입력하면
처음에 1122가 1(12)2가 되어서 12가 되고
12가 되었으니 또 12가 사라지는 줄 알았습니다!
근데 여기서 여러분들이 꼭 명심하셔야 할 것은 str_replace는
무한 루프 혹은 루프가 아닌
딱 한 번만! 실행된다는 것입니다!!!!!
그니까 1122를 입력해도 한번만 replace하고 12로 된다는 것이지요!
그러면 뭐 답은 간단합니다
제가 밑에 ( )안에 적어놓은게 str_replace돼서 사라지는
것들이고 ( )가 지워지면 결국에 127.0.0.1이 남는 것입니다!
자 이제 저희가 이 112277..00..00..1을
REMOTE_ADDR에 넣으면 됩니다!
그걸 어떻게 하냐?
바로 저희의 친구 Console창에 가서 하면됩니다!
document가 저희가 무엇을 입력하거나
수정할때도 사용이가능해요!
물론 저희가 쿠키를 조회 할때도
document 사용이 가능하구요!
쨋든 거두절미하고 문제 풀이를 완료하자면!
document.cookie="REMOTE_ADDR=112277..00..00..1"을
입력하게 되면
document.cookie안에 REMOTE_ADDR에 저 숫자값을 입력한다!
이게 되는건데요!
여기서 잊지말아야 할게 " " 이걸로 감싸줘야 합니다!
그렇게 안하면 인식을 똑바로 못하더라구요
저렇게 쿠키를 변조하고 새로고침을 누르시면
문제가 풀립니다!ㅎㅎ
그럼 고생하셨습니다!!!
'Web Hacking > Webhacking.kr' 카테고리의 다른 글
[어설픈] webhacking.kr 1번 문제풀이 (0) | 2019.01.03 |
---|---|
[어설픈] webhacking.kr 26번 문제풀이 (0) | 2019.01.02 |
[어설픈] webhacking.kr 4번 문제풀이 (0) | 2018.12.31 |
[어설픈] webhacking.kr 16번 문제 풀이 (0) | 2018.12.29 |
[어설픈] webhacking.kr 14번 문제풀이 (0) | 2018.12.29 |