본문 바로가기
Wargame/Webhacking.kr Writeup

Webhacking.kr :old-2 Write up

by Ate1es 2021. 7. 6.

2번 문제를 접속해보면, 주석으로 시간과 admin.php 라는 페이지를 준다.

admin.php를 먼저 접속해보면

password를 입력해야 하는데 느낌이 SQL INEJCTION 냄새가 나서 테스트를 해봤지만 저 입력 폼엔 터지지 않았다.

쿠키 값 확인 결과

time 이라는 쿠키가 존재하고, 메인 페이지 주석에 시간이 뜨는 것을 확인할 수 있었다.

그래서 time 쿠키 값에 1을 입력해보았다.

시간의 초가 1로 변했다. 확실한 테스트를 위해 2와 0을 입력해보겠다.

 

2를 입력하면 초 부분에 2가 응답되고, 0을 입력하면 time 쿠키 값이 초기화된다.

time 쿠키 값 부분에 sql inection 공격을해서 정보를 뽑아야 될 것 같다.

(select length(table_name) from information_schema.tables where table_schema=database() limit 0,1)

쿠키 값에 위의 쿼리문을 주입 후 request를 보내보았다.

13이 반환되었다. 따라서 첫번째 테이블 이름의 길이는 13자리이다.

이제 ascii(), subsrt() 로 한글자 한글자 뽑아내면 테이블 이름을 알아낼 수 있지만 노가다를 싫어하기에 간단하게 파이썬 코드를 짰다.

위 코드는 time 쿠키 값에

ascii(substring((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))

이라는 쿼리문을 집어넣고 request를 보내고

주석으로 오는 response 값을 초 단위 부분만 잘라서 다시 문자로 변환 후 출력해주는 코드다.

첫 번째 자리부터 마지막 자리까지 반복했다.

테이블 이름은 admin_area_pw 인 것 같다. 이제 같은 방법으로 컬럼명을 뽑아낸다.

(select length(column_name) from information_schema.columns where table_name=’admin_area_pw’ limit 0,1)

해당 쿼리문으로 request 해 본 결과 컬럼 이름의 길이는 2이다.

ascii(substring((select column_name from information_schema.columns where table_name=’admin_area_pw’ limit 0,1),1,1))

위의 쿼리문으로 첫 번째 글자부터 뽑아내었다. ( 두 글자라서 그냥 노가다함)

각각 1분 52초, 1분 59초가 반환되었다.

1분은 60초이므로 각각 112, 119

아스키 코드 112, 119는 p ,w이다 -> 컬럼명은 pw

이제 컬럼명까지 알아내었으니 데이터만 뽑아내면 된다.

테이블 이름을 뽑았던 것 처럼 파이썬 코드를 살짝만 바꿨다.

패스워드는 “kudos_to_beistlab”이다. 아까 찾은 admin.php에 입력해주면 끝.

'Wargame > Webhacking.kr Writeup' 카테고리의 다른 글

Webhacking.kr - New: NotSQL Writeup  (0) 2021.07.23
Webhacking.kr old-50 Write up  (0) 2021.07.22
Webhacking.kr old:22 Write up  (0) 2021.07.16
Webhacking.kr :old-9 Write up  (0) 2021.07.06