본문 바로가기
[웹해킹]/[SuNiNaTaS]

[SuNiNaTaS] 23번

by Hevton 2020. 12. 8.
반응형

웹해킹 마지막 문제.

 

이 문제는 못풀었다. 풀이를 검색했다.

 

나는 MySQL밖에 모르기 때문에, MSSQL을 다루는 SuNiNaTaS 덕분에 내가 새로 알게된 점은

MySQL과 MSSQL의 문법의 차이들을 알게 되었고( ex. length() vs len() )

MySQL이나 MSSQL에서 +(덧셈) 기호를 사용해 문자열을 합칠 수 있다는 것을 알게 되었다.

 

 

이전에 22번을 풀고 다른 사람들의 풀이를 봤는데,

나는 length가 안먹혀서 substring으로 우회했는데...len이라는 함수를 쓰더라.

 

검색해보니 Webhacking.kr과 나는 MySql을 쓰는데, SuNiNaTaS는 MSSQL을 쓴다고 한다.

필터링 아닌데 안먹히는게 왤케많나 했더니 환경이 다른 게 문제였다.

MySQL 에서는 length()인데 비해 MSSQL에서는 len()을 사용한다고 한다.

 

 

접근 1 > 

guest' and len(pw)=5-- 
-> true

mysql : length
mssql : len

이걸 통해 admin의 비밀번호 자릿수를 알아낸다.

하지만 admin 문자열이 필터링 중이다. 내가 아는 선에서 모든 수를 동원해봤지만, id 길이 제한이 30자여서 모두 실패했다.

 

풀이를 보니 아래와 같은 방법이 있다는 걸 새로 알게 되었다.


[ mysql에서 문자열을 덧셈으로 합칠 수 있는 점을 이용 ]

mysql> select 'admin'='ad'+'min';
+--------------------+
| 'admin'='ad'+'min' |
+--------------------+
|                  1 |
+--------------------+
1 row in set, 3 warnings (0.00 sec)

이를 이용하여 아래 경우를 돌다 보면

ad'+'min' and len(pw)=x-- 

x = 12임을 알 수 있다

 

 

비밀번호 길이를 알았으니, 문자를 하나하나 파헤쳐볼 시간이다.

 

 

substring이 필터링중이라 left right를 사용한다.


이제 substring 필터링이므로 left right를 사용해 substring구문을 만들 수 있으나,
글자수가 30자 제한이기 때문에 새로운 전제가 필요하다.

 

전제 (두가지중 한가지만 맞으면 됨)

1. admin의 비밀번호의 맨 앞 글자와 같은 데이터들은 admin보다 늦게 데이터베이스에 추가되어있어야 한다.

2. admin의 비밀번호의 맨 앞글자와 같이 시작하는 비밀번호가 없어야 한다.

 

admin의 비밀번호 맨 앞자리만 구한다. 아래 쿼리를 돌리면 된다.
ad'+'min' and left(pw,1)=x-- 

x = 문자


그럼 맨앞자리가 v인걸 알 수 있다.

쿼리문을 줄이려면 v로 시작하는 비밀번호가 admin밖에 없어야 한다. 또는 admin이 그 중 가장먼저 추가된 데이터여야 한다.

이건 실전에서는 먹힐리가 없다. 데이터베이스에 수도없이 계정이 많을테고 v로 시작하는 계정도 많을테니..

뭐 그중 가장먼저 추가된 데이터를 원한다면야 가능하겠지만.

 

전제를 실험해보자.


'or right(left(pw,1),1)='v'-- 
->
admin으로 로그인된다. 비밀번호가 v로 시작하는 계정은 admin밖에 없거나, admin이 가장 먼저 추가된 데이터라는것.
그럼 이걸 통해 admin의 비밀번호를 알아낼 수 있다.

여기서 주의할 점은 프로그램을 돌릴 때엔 "결과가 admin인 경우"에만 가져와야한다. OK 라는 구문만 보고 가져왔다가는

ex)
id : admin
pw : vzfdsgdsg
id : steve
pw : vfseksg

이런식으로 admin이 제일 먼저 추가된 데이터라도, 문자를 하나씩 때려맞추다 보면 steve로 로그인이 되기 때문.

 

 

따라서 이를 기반으로 프로그램을 구성하여 만들어 주면 된다.

 

 

내가 알던 MySQL이 아닌 것을 떠나서, 문제를 풀지 못한 것에 대해 진정으로 인정하며 반성하게 되었다.

정말 긴 시간을 투자했는데 풀지 못했고, 간단할것이라고 자만했던 스스로를 뉘우치게 되었다.

난 정말 멀었구나. 내 위치를 인정하고, 더 열심히 배워나가는 마음을 가져야겠다.

반응형

'[웹해킹] > [SuNiNaTaS]' 카테고리의 다른 글

[SuNiNaTaS] 22번  (0) 2020.12.07
[SuNiNaTaS] 8번  (0) 2020.12.06
[SuNiNaTaS] 7번  (0) 2020.12.06
[SuNiNaTaS] 6번  (0) 2020.12.05
[SuNiNaTaS] 5번  (0) 2020.12.04