728x90
반응형
100점인 39번 문제를 풀어보자.
쿼리문의 where 절을 참으로 만들면 1이 반환되어 문제를 풀 수 있게 된다.
소스코드를 자세히 보면 id부분에서 싱글쿼터를 여는 부분은 있는데 닫는 부분이 없다.
id='{$_POST['id']}
id 값의 '은 ''로 치환되고, \\은 공백으로 치환된다. 그리고 substr()함수에 의해 15자리까지 잘라낸 후 반환된다.
이제 문제를 풀기 위해 싱글쿼터를 닫을 수 있는 방법을 생각해보자.
test+공백 10자리 + ' -> test+공백 10자리 + ''로 치환되지만 15자리에서 끊기기 때문에 test+공백 10자리 + '' 빨간 글씨 부분만 반환된다.
그리고 MySQL에서는 'test' = 'test '가 true로 반환된다.
그 이유는 char(6)일 경우 'test' 를 저장하면 'test__'로 저장되기 때문이다. 데이터 타입의 크기에 맞춰 공백을 패딩으로 채워 저장할 것이라 추측해본다.
member 테이블의 id 값에는 1,2,3,test,admin 의 값이 들어있었다. (추측으로 하나씩 입력해보았다)
결국 우리가 test뒤에 공백을 자릿수에 맞춰서 입력을 해도 결과적으로는 'test'='test'값이 true이므로 SQL쿼리는 1을 반환되게 되어 문제가 해결된다.
728x90
반응형
'CTF & WarGame > webhacking.kr' 카테고리의 다른 글
[webhacking.kr] 41번 문제 (0) | 2020.03.14 |
---|---|
[webhacking.kr] 40번 문제 (0) | 2020.03.14 |
[webhacking.kr] 38번 문제 (0) | 2020.03.14 |
[webhacking.kr] 37번 문제 (0) | 2020.03.14 |
[webhacking.kr] 36번 문제 (0) | 2020.03.14 |