[Web] 써니나타스 Challenges 6번 문제
6번 문제다. 배점이 높은걸 보니 어려운 문제인가 보다. ^^;
1번 글에 힌트가 있었다. 써니나타스 글을 읽어보라는 거 같다. (3번이 써니나타스가 쓴 글)
2번째 글에는 참조로, md5 hash 사이트를 활용하라는 거 같다.
써니나타스가 적은 3번째 글을 클릭해봤는데, Password Input이 있었다. 여기에 옳은 비밀번호를 적으면 문제가 풀리나 보다.
비밀번호가 틀리면 False라고 뜬다.
"select szPwd from T_Web13 where nIdx = '3' and szPwd = '"&pwd&"'" |
이 SQL문을 그대로 복사 붙여넣기하면.. NO! Hacking!이라는 팝업이 뜬다.
해석을 해보자면 T_Web13이라는 테이블에서 nldx가 3이고, szPwd가 '"&pwd&"'인 것 중에서 szPwd를 출력하면.. 된다는 뜻이다.
response를 봤을 때..
하.. 또 모르겠다.
^^;
그러니까 가장 중요한건
"select szPwd from T_Web13 where nIdx = '3' and szPwd = '"&pwd&"'" |
이 값을 참으로 만들어야 한다. sql을 안 한지 너무 오래돼서..
그냥 작은 따옴표만 입력해봤는데 Wrong Query라는 팝업이 뜬다. 보니까 '=', '#'는 사용하지 못하도록 해놓은 듯하다. sql은 다 좋은데 작은따옴표를 어떻게 입력할지가 참.. 관건이다. 저 sql 쿼리에 있는 많은 작은따옴표, 큰 따옴표는 일단 무시하고, 보통 내가 비밀번호를 입력할 때 따옴표를 신경 안 쓰듯이, 예를 들어 비밀번호가 1이면 1만 입력하면 된다. 이때 우리는 sql 공격을 진행할 거니까, 1 뒤에 작은따옴표를 붙여주고 (1'), 그 뒤에 or 문으로 뒷부분을 무조건 참으로 만들어주면 된다. 보통 1' or '1'='1' 이 구문이 가장 많이 쓰이는데 지금 등호 사용이 불가하니까 1' or '2' > '1로 해주었다. 이때 맨 마지막에 1 뒤에 작은따옴표를 제외하는 이유는 우리가 평소에 비밀번호를 입력할 때와 동일하게 sql이 알아서 '를 사용해 닫아주기 때문에,, 참 말하면서도 무슨 소리인지 잘 모르겠지만 어쨌든 이렇게 해주면 된다.
요런 식으로 해결.
또는 이렇게 해줘도 된다. 1' or 2>1-- (근데 난 --랑 친하지 않아서,, 1번 방법을 사용했다)
호호 sql 인젝션을 활용한 문제였다.
아나 이게 끝이 아니었음 ㅠ
여기서 소스코드를 살펴보았다.
body 상단을 봤더니, KEY_HINT가 있었다.
Augustus..!
악 풀었다.
뭔가 좀 어이가 없지만.. 풀었다.