HackChang

[Wargame.kr] 8번 문제 풀이 md5 password 본문

W4RG4M3/W3B

[Wargame.kr] 8번 문제 풀이 md5 password

HackChang 2021. 8. 7. 14:26

8번 문제

이번 문제는 md5함수에 대한 문제로 보인다.

Start를 눌러 페이지를 이동해보도록 하겠다.

 

위와 같은 페이지를 볼 수 있었고, 소스를 보도록 하겠다.

 

소스를 보면 

$row=@mysql_fetch_array(mysql_query("select * from admin_password where password='".md5($ps,true)."'"));

위와 같이 sql문을 날리는 것을 볼 수 있었다. 이에 대해 SQL인젝션을 시도하고 싶었지만,

mysql_real_escape_string을 통해 SQL인젝션을 방지하는 것을 볼 수 있다.

 

문제에서 md5('value', true)라는 힌트로 보아 md5함수에 취약점이 존재한다고 생각했고,

php의 md5함수에 대해 검색을 해봤다.

 

raw_output를 TRUE로 지정하게되면 취약점이 발생한다는 것을 검색을 통해 알았고,

바이너리 형식과 문자열 형식이 어떤식으로 나오는지 파이썬으로 간단하게 예제를 만들어봤다.

 

v_hex가 row_output에 대한 FALSE를 나타내고,

v_bin이 row_output에 대한 TRUE를 나타낸다.

 

select * from admin_password where password='에 대하여 해당 SQL을 우회할 수 있는 방법을 생각해봤다.

password에 대한 참이 나올 조건으로 다음과 같이 생각을 했다.

select * from admin_password where password=''='' 다음과 같이 '=''로 password를 인식하게 된다면

조건이 참이 되면서 admin_password를 알 수 있을 것이라고 생각했다.

 

password에 대한 바이너리 값('=')을 알기 위해 간단하게 파이썬으로 작성해봤다.

 

 

위와 같이 작성을 했고, 결과 값으로

 

위의 결과를 얻을 수 있었다.

위의 값을 인증해보도록 하겠다.

 

이렇게 password를 알 수 있었고, 인증을 통해 클리어를 했다.

 

Comments