Season 1/워게임

[Webhacking.kr] Old - 2 Write Up

작성자 - LRTK

아무 반응이 없어서 코드를 확인해보니, 주석으로 시간과 admin 페이지가 표시되어 있었다.

 

Admin 페이지에 들어가니, 비밀번호를 입력하는 Form이 있었다.
그래서 SQLi 문제인 듯하여, '를 넣음으로써 Error를 일으켜서 Error를 출력하려고 했다.

 

하지만, ' 포함하여 다양한 값들을 넣어지만 똑같은 Alert창이 출력되었다.

공격 백터가 Admin의 입력 Form이 아닌 듯하여, 다른 백터를 찾아봤다.

 

쿠키를 보니 Time이라는 쿠키를 볼 수 있었다.

 

해당 쿠키값을 True로 변경하니, 주석으로 표시된 시간이 변경이 되었다.

 

 

이번에는 False로 변경하여 확인하니, 이번에도 시간이 변경되었다.
True와 False의 결과를 비교하니, 시간의 초 부분이 변경이 되었다.

그런데 보다가 True는 1이고, False는 0으로 출력되니 초가 1, 0이 출력되는 것이 아닐까? 라는 생각으로 이어졌다.

 

생각한 것이 적중했는지, 초 부분이 내가 입력한 값으로 변경되었다.
어떻게 작동되는지 궁금하여 인터넷에 “MYSQL 숫자에서 시간으로 변환”으로 검색하니, FROM_UNIXTIME 함수를 알 수 있었다.

MYSQL 시간 관련 함수 정리 - happycgi

한번 써보니, 년도만 다르고 똑같이 나왔다.

 

SQLi은 SELECT FROM_UNUXTIME( 쿠키값 )으로 들어가게 된다.

한번 FROM_UNUXTIME 함수 안에 쿼리를 삽입해보니, 잘 작동하였다.

 

나는 문제의 DB 테이블명과 컬럼명을 모르니, information_schma을 이용하여 알아보도록 하겠다.

(SELECT COUNT(TABLE_NAME) FROM information_schema.tables WHERE TABLE_SCHEMA != 'mysql' and TABLE_SCHEMA != 'information_schema' and TABLE_SCHEMA != 'performance_schema' and TABLE_SCHEMA != 'sys')=2)

이런식으로 계속 삽입하여 알아내면 되는데, 너무 오래걸릴 것 같아서 파이썬을 이용하여 SQLi 쿼리를 삽입하였다.

 

해당 코드는 너무 대충 만들어서 보여주기가 민망하여, 코드는 공유하지 않겠다.


결과적으로 테이블은 admin_area_pw과 log가 나왔고, 각 컬럼의 수는 1개와 2개가 나왔다.

 

admin_area_pw의 컬럼은 pw가 나왔고, log의 컬럼은 ip, ip++가 나왔다.
데이터의 수는 각 1개씩 나와서, 데이터의 길이를 확인해보니 admin_area_pw의 pw의 데이터가 17글자가 나와서 그것을 타겟으로 출력해봤다.

 

출력 결과인 kudos_to_beistlab을 admin 페이지의 입력 Form에 입력하여 서버로 보내니, Flag를 획득할 수 있었다.

'Season 1 > 워게임' 카테고리의 다른 글

(HackThisSite) Basic missions - Level 7  (0) 2021.06.07
(HackThisSite) Basic missions - Level 6  (0) 2021.06.07
Wargame.kr - md5 password  (0) 2021.06.04
[Webhacking.kr] Old - 50 Write Up  (0) 2021.06.03
[Webhacking.kr] Old - 55 Write Up  (0) 2021.06.02
Contents

이 글이 도움이 되었다면, 응원의 댓글 부탁드립니다.