챌린지 49

bughela - tmitter

wargame.kr의 11번째 문제인 tmitter다. admin의 아이디로 로그인하라는 설명과 함께 어떤 테이블의 구조를 보여주고 있다. 간단한 32글자짜리 문자열 id, ps 컬럼이 있는 테이블인데 문제풀이의 중요한 힌트가 될지도 모른다. 일단 Start 버튼을 눌러 문제를 확인해보자. 유사 트위터 서비스인지 트'미'터의 로고와 함께 로그인, 회원가입 버튼이 두 개 놓여있다. HTML 코드에서는 특별한 점은 없었으며 현재는 아이디를 모르기 때문에 회원가입하러 Sign Up 버튼을 눌러 join.php로 이동했다. 간단한 입력폼 두 개와 join 버튼이 놓여 있다. 특이한 점은 ID 필드에는 최소 4글자, PS 필드에는 최소 7글자 제한이 걸려있으며 두 입력폼 모두 최대 32글자 제한이 걸려있는데 최소..

bughela - md5_compare

wargame.kr의 10번째 문제인 md5_compare다. 값을 비교하기만 하면 된다고 한다. Start 버튼을 눌러 문제를 확인해본다. 단순히 값을 입력하는 입력폼 두 개가 주어진다. 아마 이 두 곳에 값을 입력하고 chk 버튼을 눌러서 비교하는 것 같은데 자세한 로직을 위해 소스를 확인해보자. 첫번째 폼의 값이 v1, 두번째 폼의 값이 v2 파라미터로 전달된다. 길지 않은 로직이기 때문에 금방 이해할 수 있는데 먼저 GET으로 받은 각 파라미터 값을 변수에 저장하고 chk 변수를 true로 선언한다. 중간에 각 입력 파라미터에 대해 어떤 로직을 수행하여 $chk 변수를 false로 설정하는데 이 변수를 true로 유지하는게 플래그 획득 방법일 것이다. 그렇다면 v1, v2에 각각 수행되는 ctyp..

bughela - DB is really GOOD

wargame.kr의 9번째 문제인 DB is really GOOD이다. 문제 힌트에서는 이 데이터베이스의 종류와 유저 이름과 데이터베이스 간 관계를 파악하라고 되어있다. Start 버튼을 눌러 문제를 확인해보자. 간단한 입력폼과 로그인 창이 뜬다. 따로 소스를 보여주는 링크도 없고 HTML을 확인해봐도 자바스크립트로 입력값 admin을 제한할 뿐 별다른 기능은 없다. 그렇다면 admin을 입력해보면 어떻게 될까? 일단 첫번째로 admin으로 접근하지 말라는 간단한 alert() 메시지가 뜬다. 소스 코드를 확인해보면 이 입력폼은 "/memo.php"라는 곳으로 데이터를 보내고 있기 때문에 웹 프록시로 중간에 값을 admin으로 수정하거나 Postman을 활용하여 admin 데이터를 전송해보자. 그래도 ..

bughela - md5 password

wargame.kr의 8번째 문제인 md5 password다. md5는 해시 함수의 일종으로 결함이 발견되는 등 여러 문제로 인해 사용하지 않는 추세라고 알고 있다. 물론 많이 사용되던 해시 함수인 만큼 여러 프레임워크에서 내장 함수로 구현되어 있는데 php의 경우 md5() 함수로 구현되어 있다. 그런데 이를 문제의 힌트에서 알려주는 이유는 무엇일까? 일단 Start 버튼을 눌러 문제를 확인해보자. 문제는 단순한 입력폼 하나만 주어진다. 아무 값이나 넣어서 login을 시도해보면 "wrong..."이라는 문자열이 출력될 뿐 별다른 변화가 없어 자세한 정보를 얻을 수 없다. 일단 get_source를 눌러서 소스를 한번 확인해보자.

bughela - strcmp

wargame.kr의 7번째 문제인 strcmp다. 이번 문제는 strcmp 함수를 우회하는 것이 목적이다. Start 버튼을 눌러 문제를 확인해보자. 간단한 입력폼 하나와 소스 코드를 보는 링크가 있다. POST로 비밀번호를 보낸다는 것 말고는 얻을 수 있는 정보가 없으니 소스를 분석해보자. $password를 생성한 후 if 조건문을 타고 있는데 위의 분기는 소스 코드를 보여주는 동작이므로 아래쪽을 보면 된다. 브루트 포스 방지를 위해 1초간 대기한 후 사용자가 입력한 password 값과 생성된 $password가 같은지 비교하여 플래그를 제공하고 있는데, 그렇다면 $password는 어떻게 생성되는지 알아보자. 이런저런 함수를 호출하고 있지만 결론부터 말하자면 이는 절대로 사용자가 예측할 수 없도..