Wargame
-
<Suninatas> 4번 문제Wargame/Suninatas 2021. 10. 24. 18:49
4번 문제 Plus버튼을 누르니 Point가 1씩 증가한다. 25까지 증가하고 그 위로는 증가하지 않는다. 페이지 소스보기를 통해 소스코드를 살펴보면, Point를 50으로 만들라는 힌트가 주어져있다. Point 입력 창에 49를 입력하고 Plus를 해도 "I like the SuNiNaTaS browser!" 알림만 뜬다. 또 다른 방법으로 'Burp Suite'를 이용해 Point의 값을 1부터 50까지 증가시켜도 알람만 뜬다. 50점을 만들라는 힌트 옆에 'Suninatas'라는 힌트에 주목한다. 문제 페이지에는 User-Agent와 Auth-key가 주어져 있다. User-Agent는 브라우저와 운영체제에 대한 정보를 웹사이트에 알려주는 용도이다. User-Agent값에 Suninatas를 입력하..
-
<wargame.kr> md5 passwordWargame/wargame.kr 2021. 10. 24. 13:45
md5 password 문제 제목부터 md5 해시함수와 관련있는 것을 알 수 있다. 비밀번호를 알아내면 되는것 같다. get source를 통해 소스코드를 살펴보겠다. $ps는 'ps'입력 폼의 값에서 특수문자를 지운 값이다. $row는 mysql로 보낸 쿼리의 결과의 행을 연관 배열이나 숫자 배열로 가져온다. 그리고 $row[0]의 값이 있으면 인증 키 값을 얻을 수 있다. 이 문제는 md5()의 취약점으로 잘 알려진 md5({변수}, true) 형태의 소스코드 오용에 대해서 묻는다. md5 같은 경우 인자로 들어온 문자열을 32bytes의 길이로 반환한다. 하지만, 두 번째 인자를 true로 가질 경우 hex값을 16bytes의 바이너리 값으로 반환한다. ex) select id from table ..
-
<wargame.kr> strcmpWargame/wargame.kr 2021. 10. 22. 21:41
strcmp strcmp 함수를 우회하면 인증 키 값을 얻을 수 있다고 한다. 우선, 소스코드를 살펴보자 file_get_contents("/var/lib/dummy_file")는 "/var/lib/dummy_file" 파일을 문자열로 반환한다. 그 후, 랜덤 한 값과 위의 문자열을 md5 해시 계산하여 32자의 16진수로 반환한다. 이 해시값과 랜덤한 값을 sha1 해시 계산하여 40자의 16진수로 반환한 것을 $password로 한다. 'password' 입력 폼 값이 있으면 브루프포스 공격을 방지하기 위해 1초 대기한다. 그리고 'password' 입력 폼 값과 $password의 값을 비교하여 같다면, 인증 키 값을 얻게된다. 위의 단계를 거꾸로하면 풀 수 있을까? 했는데 rand()가 있기때문에..
-
<Suninatas> 2번 문제Wargame/Suninatas 2021. 10. 21. 11:46
Suninatas 2번 문제 로그인 창만 띄워져 있다. 크롬의 개발자 도구(F12)를 통해 소스코드를 살펴보자. LEVEL 2   ID PW Authkey : ????? script내용을 살펴보면 ▶id와 pw가 같을 때 "You can't join! Try again"메시지를 띄우고, id 입력 폼에 포커스 되고, id와 pw값이 빈 문자열이 된다. ▶id와 pw가 다를 때 document.web02.submit()을 통해 id와 pw값을 서버에 전달한다. 소스코드 맨 아래에 id와 pw는 같다는 힌트가 있다. id와 pw입력 폼에 같은 값을 주고, console을 이용해 document.web02.submit()를 실행하면 인증 키 값을 얻을 수 있다. 이렇게 크롬의 개발자 도구(F12)의 c..
-
<wargame.kr> fly me to the moonWargame/wargame.kr 2021. 10. 21. 11:34
fly me to the moon 컨트롤만 잘하면 되지 않을까 하고 여러 차례 도전했지만, 벽이 점점 좁아졌다. 벽에 닿게 되어 죽으면 "YOU NEED GET THE SCORE 31337"라고 뜨는데, 31337점을 얻어야 되는 것 같다. 페이지 소스 보기를 통해 소스코드를 살펴보겠다. Click to start. Game over. Click to restart. Score: 0 By Christian Montoya 소스코드 중에서 eval(function(p,a,c,k,e,d){e=function(c){return c};if(!''.replace(/^/,String)){while(c--){d[c]=k[c]||c}k=[function(e){return d[e]}];e=function(){return'..
-
<Suninatas> 1번 문제Wargame/Suninatas 2021. 10. 20. 21:22
Suninatas 1번문제 개발자 도구(F12)를 통해 소스를 살펴보면 asp파일인 것을 알 수 있다. 코드를 분석하기 전 사용된 함수 먼저 살펴보겠다. Request()는 사용자가 입력한 값을 가져온다. Replace()는 Replace(변수, 변경대상문자, 변경하려는 값)으로 문자열 치환 함수이다. Mid()는 Mid(변수, 시작위치, 개수)로 문자열 자르기 함수이다. 첫 글자의 위치는 1이며, 시작위치 + 개수 > 변수의 시작위치부터 마지막위치까지의 길이 => 마지막위치까지 표시한다. &연산자는 문자열을 합치는 기능이다. 코드를 살펴보면 str에 입력값을 넣고, str이 빈 문자열이 아니면 "a"는 "aad"로, "i"는 "in"으로 치환한 결과가 result가 된다. result1은 result의..
-
<wargame.kr> WTF_CODEWargame/wargame.kr 2021. 10. 20. 11:54
WTF_CODE 우선 source_code.ws를 받아서 메모장으로 열어보았다. 아무 것도 보이지 않는다. Ctrl + A로 모두 선택을 해보니 띄어쓰기가 되어있는것을 확인할 수 있다. 찾아보니 "Whitespace"라는 프로그래밍 언어이다. 이 언어는 공백과 탭, 그리고 개행 문자만이 의미가 있으며, 인터프리터는 이 3종류의 공백문자를 제외한 모든 문자를 무시한다. Whitespace Decoder를 통해 풀 수 있다. 구글에 Whitespace Decoder를 검색하여 위 코드를 풀면 인증 키값을 획득할 수 있다.
-
<wargame.kr> login filteringWargame/wargame.kr 2021. 10. 19. 15:04
login filtering 아무 내용 없이 로그인 창만 있다. 우선 get source를 통해 소스코드를 살펴보자. php와 mysql을 사용한 것을 알 수 있다. 간단하게 살펴보면, POST방식으로 'id'와 'ps'를 전달받고, isset으로 변수가 설정되있는지 확인한다. (전달받은 'id'와 'ps'의 값이 있는지 없는지 구분) mysql_connect()는 Mysql 서버에 대한 연결을 연다. // mysql_connect(string $server, string $ username, string $password, bool $new_link=false, int $client_flags=0) : resource|false mysql_select_db()는 데이터베이스를 선택한다. // mysql..