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 |