아무 반응이 없어서 코드를 확인해보니, 주석으로 시간과 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를 획득할 수 있었다.

'워게임 > webhacking.kr' 카테고리의 다른 글

[Webhacking.kr] Old - 28 Write Up  (0) 2021.06.07
[Webhacking.kr] Old - 22 Write Up  (0) 2021.06.07
[Webhacking.kr] Old - 50 Write Up  (0) 2021.06.03
[Webhacking.kr] Old - 55 Write Up  (0) 2021.06.02
[Webhacking.kr] Old - 52 Write Up  (0) 2021.06.01
복사했습니다!