2021. 2. 18. 02:33ㆍ정보보안/웹 해킹
BOB 3차 경연이 끝나 다시 블로그 시작
17번 문제인 ZOMBIE ASSASSIN이다.
필터식을 먼저 확인해보자.
$_GET['id'] = strrev(addslashes($_GET['id']));
$_GET['pw'] = strrev(addslashes($_GET['pw']));
if(preg_match('/prob|_|\.|\(\)/i', $_GET[id])) exit("No Hack ~_~");
if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");
총 코드 네 줄의 필터식이 존재하는데,
처음 두 줄의 strrev함수는 string reverse, 즉 문자열을 거꾸로 뒤집는 함수다.
addslashes 함수는 파라미터 앞에 ', ", \, NULL 값 앞에 백슬래쉬를 붙여 특수문자가 아닌 일반 문자로 인식하게 한다.
이 두 함수를 우회해야 문제를 해결할 수 있는데,
id 파라미터에 싱글쿼터하나와 더블쿼터 하나를 입력해보자.
쿼리문이 다음과 같이 id = '"\'\' and pw ='' 로 완성이 될 것이다.
where 절을 분석해보면 ,
맨 처음 싱글쿼터부터, pw=' << 싱글쿼터 까지를 id 파라미터로 인식한다.
id = '"\'\' and pw ='' (빨간색이 id 파라미터 값)
왜냐하면 역슬래쉬(\) 때문에 앞에 있는 싱글쿼터들이 특수문자가 아닌 일반 문자로 인식되기 때문이다.
여기에 pw 파라미터로 ?을 입력해 주면,
id = '"\'\' and pw ='?'라는 쿼리문이 완성되는데 이 ? 문자가 있는 위치에
이 쿼리문을 참으로 만드는 || 1=1 # 을 넣어주면 된다.
하지만 현재 코드는 strrev 함수에 의해 입력값이 거꾸로 출력되니 이 점을 고려해
# 1=1 || 으로 거꾸로 입력해주면 된다.
'정보보안 > 웹 해킹' 카테고리의 다른 글
정규표현식 해석 사이트 (0) | 2021.02.19 |
---|---|
LOS(The Lord of the SQLI) 18 - NIGHTMARE (0) | 2021.02.19 |
LOS(The Lord of the SQLI) 16 - SUCCUBUS (0) | 2021.01.17 |
LOS(The Lord of the SQLI) 14 - GIANT (0) | 2021.01.17 |
LOS(The Lord of the SQLI) 13 - BUGBEAR (0) | 2021.01.17 |