- md5() 취약점에 관련한 문제로 보인다.
- Start
- get source
- 패스워드가 $ps = mysql_real_escape_string($_POST['ps']); 을 통해 필터링 되는 것을 확인
- 패스워드는 md5($ps, true); 함수를 통해 MD5해시 값으로 변환되어 SQL쿼리문이 된다.
- 이때, 파라미터'true'가 설정된 md5함수는 SQL문에서 사용될 때, SQL Injection 공격에 취약하게 된다.
- 파라미터'true'는 raw_output=true 라는 의미로 16진수 문자열대신 바이너리 형태로 해시 값를 반환하게 된다.
- 따라서 SQL쿼리가 참이 되도록 하는 바이너리 형태의 md5값의 입력 문자를 찾으면 문제를 해결할 수 있다.
- 구글링을 통해 'DyrhGOYP0vxI2DtH8y' 의 MD5 해시 값 '6c0e97fda5c225276f522735b381a25b' 를 찾을 수 있었다.
- 해시 값의 중간에 276f522735은 바이너리 형태일 때 ' o R ' 5 라는 문자열로 나타낼 수 있다.
- 패스워드 값으로 DyrhGOYP0vxI2DtH8y 를 제출했을 때의 쿼리는 다음과 같다.
select * from admin_password where password=' ...'oR'5... '
- where절에 대해 참이 되는 쿼리문이므로 SQL Injection 공격 성공
'워게임 > Wargame.kr' 카테고리의 다른 글
Wargame - DB is really GOOD (0) | 2021.06.20 |
---|---|
Wargame.kr - md5_compare (0) | 2021.06.08 |
Wargame.kr - strcmp (0) | 2021.05.30 |
Wargame.kr - WTF_CODE (0) | 2021.05.27 |
Wargame.kr - flee button (0) | 2021.05.23 |