메인화면입니다.

소스보기입니다.

[소스해석]

1. 특수문자 입력시 문자 앞에 '\'가 붙음

2. 'admin','select','limit','pw','=','<','>' 금지

3. $result['id']가 'admin'이면 해결

4. 쿼리가 조회되지 않을시 'Wrong'을 출력

소스중 취약점이 존재하는 부분있습니다.

$_GET['id'] = mb_convert_encoding($_GET['id'],'utf-8','euc-kr')

이 부분입니다.

위 코드는 인코딩 타입을 변환하는 부분으로

mb_convert_encoding('문자열', '변환할 인코딩타입', '변환전 인코딩 타입')

위와 같은 방식으로 사용합니다.

변환과정에서 입력값으로 %a1~%fe 범위의 값이 들어오면 뒤에 문자 1바이트를 덮어쓰는 취약점이 있습니다.

테스트 결과 'euc-kr'에서 'utf-8'로 변환할 때만 적용 가능한 것 같습니다.

소스보기를 토대로 테스트 페이지를 만들어 구현해보았습니다.

입력값으로 %fe%2f를 넣었을 떄 euc-kr > utf-8 부분이 한 문자로 표현되는 것을 확인 할 수 있었습니다.

먼저 싱글쿼터(')가 삽입되면 \' 로 역슬래시가 붙기 때문에 순수 싱글쿼터만 남기기위해 앞에 %a1~%fe 범위의 값을 붙여서 역슬래시를 없애도록 만들어 쿼리를 만들어보겠습니다.

[최종쿼리]

?id=%aa%27 or id like char(97,100,109,105,110)%23&pw=guest

%aa를 통해 $_GET['id'] = addslashes($_GET['id']); 이 부분에서 생성된 역슬래시를 제거하면 %27(')만 남기때문에 뒷 부분은 늘상하던식으로 쿼리를 만들어 주면 됩니다.

대신 주의할 부분은 '=' 이 부분과 'admin'이 필터링 되기 때문에 이를 우회 하기 위해 'like'와 char() 함수를 사용하여 우회 하였습니다.

챌린지 45 성공!

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

[webhacking.kr] Level47 (old)  (346) 2020.04.28
[webhacking.kr] Level46 (old)  (303) 2020.04.28
[webhacking.kr] Level44 (old)  (321) 2020.04.28
[webhacking.kr] Level43 (old)  (297) 2020.04.28
[webhacking.kr] Level42 (old)  (311) 2020.04.28

+ Recent posts