Wargame/wargame.kr
-
<wargame.kr> DB is really GOODWargame/wargame.kr 2021. 10. 25. 23:57
DB is really GOOD 무슨 종류의 데이터베이스인지 묻는다. 유저 이름과 데이터베이스 사이에서 연관성을 찾아야 한다고 한다. USER의 이름을 입력할 수 있는 입력 폼이 있다. 우선 'admin'으로 접근해 보았다. "don't access with admin"이라는 알림이 뜬다. 'admin '(어디서 봤는지 기억이 나진 않지만)으로 우회해 보았다. 하나의 채팅방이 나오지만, 문제 풀기위한 방향과는 거리가 먼 것 같다. 특수 문자 '/'를 입력하면 데이터베이스 관련 오류 메시지를 보여준다. 개발자 관점에서 웹 사이트를 배포할 때는 이러한 오류 로그가 클라이언트에게는 보이지 않도록 처리해야 한다. 오류 로그를 살펴보면 데이터베이스를 열 수 없다고 한다. SQL Lite를 이용하여 로컬 데이터베이..
-
<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()가 있기때문에..
-
<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'..
-
<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..
-
<wargame.kr> QR CODE PUZZLEWargame/wargame.kr 2021. 10. 19. 13:58
QR CODE PUZZLE QR Code가 뒤죽박죽 섞여있다. QR Code를 찍으면 인증키를 얻을 수 있는 것 같다. 개발자 도구(F12)로 소스를 살펴보겠다. 위는 작은 조각 하나의 div태그로, background-image부분에 url("./img/qr.png")인 것을 알 수 있다. background-image는 이미지를 배경으로 사용하게 하는 속성이다. 따라서, "./img/qr.png"가 QR Code 이미지를 나타내는 것 같다. 여기서 "./"은 현재 위치를 뜻하는 의미한다. "현재위치/img/qr.png"에 들어가 보면 정상적인 QR Code가 나온다. QR Code를 휴대폰으로 읽어도 되지만, 구글에 QR Code Decoder를 사용해도 된다.