CTF, 워게임 문제 풀이/Suninatas

[Web] 써니나타스 Challenges 6번 문제

secumark 2022. 6. 1. 07:06
728x90

 

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..!

 

 

악 풀었다.

 

뭔가 좀 어이가 없지만.. 풀었다.

728x90