Wargame.kr

Web_600

tmitter


admin 계정으로 로그인하라고합니다.




문제를 확인 해 보니 회원가입과 로그인 버튼이 하나씩 있습니다.



회원가입 버튼을 눌러보니 가입 폼이 나타나네요.



아이디와 패스워드는 각각 4자리, 7자리 이상이어야 하며 힌트로는 admin으로 로그인 하라는 메시지 뿐입니다.

우리는 맨 처음 문제 페이지에서 확인했던 DB 구조를 이용하여 문제를 풀이 할 것입니다.

ID의 경우 32바이트까지만 DB에 저장을 합니다. mysql의 특성상 저장 한도를 넘으면 그 뒤를 잘라내고 저장을 하는데, 이러한 특성을 이용하여 admin 계정을 새로 만들 수 있습니다.



위와 같이 크롬의 개발자 도구에서 maxlength를 33으로 늘려주고 마지막에 한 문자를 붙여준다면 trim() 함수 적용으로 공백이 사라지고, 뒤의 a는 사라지면서 admin이라는 문자열만 남게 됩니다.



따라서 admin으로 로그인이 가능해지고 플래그를 획득 할 수 있습니다.





Gossip

- 사실 저는 위 WriteUp대로 풀지 않았습니다..

- 위 WriteUp은 구글링 해서 찾은 방법입니다.

- 저는 뭘 어떻게 했는지는 모르겠는데

- 하다 보니 admin으로 로그인이...

- 아직도 뭘 어떻게 했는지 모릅니다.

'Wargame > Wargame.kr' 카테고리의 다른 글

[Wargame.kr] Web_650_web chatting  (0) 2016.05.23
[Wargame.kr] Web_600_SimpleBoard  (0) 2016.05.21
[Wargame.kr] Web_550_type confusion  (0) 2016.05.19
[Wargame.kr] Web_550_strcmp  (0) 2016.05.18
[Wargame.kr] Web_500_md5 password  (0) 2016.05.18

Wargame.kr

Web_450

login filtering




계정을 가지고 있지만 정지된 상태라고 합니다.

필터링을 우회 할 수 있는 지 알아보는 문제입니다.




소스를 확인 해 보면 mysql_real_escape_string 함수로 addslash를 하고 있습니다. 이로 인해 single quotation과 같은 sql 문에 영향을 끼칠 수 있는 특수문자는 제한이 되었습니다. sql injection을 이용하지 않고 id가 guest 또는 blueh4g일 때 flag를 출력해 주는 것 같습니다.




소스 아래에 주석으로 blocked 된 계정 정보를 알려주고 있습니다.



guest/guest로 로그인 했을 때의 화면입니다.

your account is blocked라는 메시지를 출력하고 끝나네요. 



여기서 ID 부분에 guest가 아닌 대문자를 추가 해 준다면, 쉽게 우회가 가능합니다.

원리는 MYSQL에서는 대/소문자 구분을 하지 않지만 php에서는 대/소문자를 구분하기 때문에 $id에는 대문자로 입력이 되지만, 쿼리문이 실행 될 때는 guest와 동일한 결과 값이 출력됩니다. 따라서 $id는 guesT이지만, 쿼리의 결과값인 $row['id']는 존재하기 때문에 플래그가 출력이 됩니다.

'Wargame > Wargame.kr' 카테고리의 다른 글

[Wargame.kr] Web_500_fly me to the moon  (0) 2016.05.17
[Wargame.kr] Web_500_DB is really GOOD  (0) 2016.05.17
[Wargame.kr] Web_450_WTF_CODE  (0) 2016.05.17
[Wargame.kr] Web_450_flee button  (0) 2016.05.16
[Wargame.kr] Web_300_QR CODE PUZZLE  (0) 2016.05.16

+ Recent posts