문제 화면입니다.
주석을 확인해보니 admin.php가 존재하는 걸 알 수 있습니다
admin.php로 가주면 비밀번호를 입력하라고 나오는데
여기선 sql 인젝션이 먹히지 않습니다.
방향을 잡기 어려워 라업을 잠깐 보니
이 문제에선 쿠키에 time 값이 새로 세팅되어 있으며
이 값으로 블라인드 sql 인젝션을 수행할 수 있다고 합니다.
time 값을 바꿔주면 주석에 적힌 시간이 바뀌는데
0을 넣어주면 새로 세팅되며
양수를 넣어주면 해당 값 만큼 더해진 시간 값을 주석으로 반환해줍니다.
또한 조건식을 넣어주면 참일 때 1, 거짓일 때 0을 가져옵니다.
소스 코드를 제공하지 않으므로 정확한 함수를 알 순 없지만
mysql의 from_unixtime이라는 함수로 추측해볼 수 있습니다.
from_unixtime 함수는 위 주석처럼 파라미터로 받는 숫자를 가지고 날짜로 변환해줍니다.
이제 데이터베이스 -> 테이블 -> 컬럼 -> 데이터 순으로 정보를 찾아주어야 합니다.
db의 길이가 6임을 알 수 있습니다.
substr와 ord함수를 사용하면 db의 이름을 한 문자씩 알아낼 수 있습니다.
나머지도 같은 방법으로 알아내면 됩니다.
다음으로 테이블 이름을 알아내야 합니다.
information_schema를 활용하면 됩니다.
테이블은 총 2개가 있습니다.
하나씩 이름을 알아보겠습니다.
length()와 ord(substr())를 통해 테이블의 이름을 구할 수 있습니다.
다 구하면 아래와 같이 나옵니다.
다음으로 admin_area_pw 테이블의
컬럼 개수와 이름을 알아내야 합니다.
컬럼 개수는 1개이고 길이는 2입니다.
동일한 방식으로 구해주면 컬럼 이름이 pw임을 알 수 있습니다.
마지막으로 이제 데이터(레코드)를 구해주면 됩니다.
pw 컬럼엔 1개의 데이터가 존재하며 17자 입니다.
구해주면 비밀번호를 알 수 있습니다.
이제 admin.php에 입력해주면
문제가 풀립니다!
레퍼런스
https://aidencom.tistory.com/378
'write-up(web) > webhacking.kr' 카테고리의 다른 글
[Webhacking.kr] Challenge old-31 write-up (0) | 2022.11.18 |
---|---|
[Webhacking.kr] Challenge old-36 write-up (0) | 2022.11.17 |
[Webhacking.kr] Challenge old-47 write-up (0) | 2022.11.14 |
[Webhacking.kr] Challenge old-43 write-up (0) | 2022.11.14 |
[Webhacking.kr] alien golf write-up (0) | 2022.11.04 |