webhacking.kr 51번(php md5 취약점)

Sirius·2023년 3월 23일


페이지에는 단순히 ID와 PW를 입력하는 창이 보인다.

소스를 살펴보자

1. 코드해석

  1. id와 pw를 받는다.
  2. id에 만약 ' "이 입력되면 그 앞에 \를 붙인다.(sql 인젝션 방지용)
  3. pw는 md5함수로 암호화 한다.
  4. 만약 select id from chall51 where id='id입력한거' and pw='pw입력한거'가 맞다면 문제가 풀린다.

2. MD5함수 취약점

1. php md5함수

md5($_POST['pw'],true)

이 md5함수는 입력값을 md5해시하는데 바이너리 형태로 뽑아낸다.

2. 취약점

이 md5함수에는 치명적인 약점이 하나있다.
만약에 md5함수의 결과가 sql인젝션 공격의 키워드 중 하나라면 이값이 먹히게 된다.

그 취약한 키워드가 바로 'or' 이다.

Q: 만약 select id from users where id='' and pw='아무거나'or'아무값이나'라면 어떤 값이 출력 되겠는가?

A:모든 id값이 출력된다.

그렇다면 우리는 저 MD5 해시값을 돌렸을때의 결과에 'or'이 포함된 값을 찾으면 된다.

코드는 파이썬으로 구현하였다.

https://github.com/S-SIRIUS/WEB_SECURITY/blob/main/md5vulnerability.py

id는 입력할 필요도 없기 때문에 저 값을 찾아서 입력하면 끝이다.

0개의 댓글