메인화인입니다.

소스보기입니다.

1234를 입력해보았습니다. "Done"이라는 메시지가 뜹니다.

소스해석을 해보면 아래와 같습니다.

[소스해석]

1. msg, se 파라미터에 값이 있어야함

2. se 필터링 : 'select', 'and', 'or', 'not', '&', '\', '|', 'benchmark'

3. id, msg, pw, op 컬럼이 있으며 pw에 flag를 저장

처음 보는 함수인 benchmark함수는 아래와 같이 사용합니다.

SELECT BENCHMARK(count, expr);

count 만큼 반복적으로 expr 을 실행하는 함수로서 Mysql 이 expr을 얼마나 빨리 실행하는지 시간을 제며, 결과값은 항상 0을 반환합니다.

benchmark를 이용하여 아래와 같이 시간차를 주어 인젝션 공격을 수행할 수 있습니다.

[출처]https://qkqhxla1.tistory.com/30

password의 첫글자가 h이면 md5('a')를 2000000을 수행하여 응답시간은 늘려 참/거짓 여부를 확인할 수 있습니다.

'msg'부분을 이용하여 인젝션을 시도해보았으나 해결하지 못하여 인터넷을 뒤져보다 'se'파라미터에서 인젝션이 가능한 것으로 확인하여 'se'파라미터를 이용하여 인젝션을 시도해보겠습니다.

이 문제에서는 benchmark가 필터링 되기 때문에 이를 대신하기 위해 sleep함수를 사용하여 확인해보겠습니다.

3초의 지연을 주는 소스코드를 이용하여 응답시간이 3초 이상이면 해당 문자열을 저장하도록 만들었습니다.

플래그를 얻었습니다.

챌린지 57 성공!

'WAR GAME > Webhacking.kr' 카테고리의 다른 글

[webhacking.kr] Level59 (old)  (2) 2020.04.28
[webhacking.kr] Level58 (old)  (2) 2020.04.28
[webhacking.kr] Level56 (old)  (7) 2020.04.28
[webhacking.kr] Level55 (old)  (95) 2020.04.28
[webhacking.kr] Level54 (old)  (2) 2020.04.28

+ Recent posts