2번문제가 예전에는 홍길동 페이지였던것으로 기억하는데...
사이트 이전을 하며 문제가 조금 변경된 듯 하다.
우선 2번문제로 들어가면 IP가 로깅되고 있다는 말을 제외하고는 따로 뭐 풀이를 위한 입력공간이나 기능은 없다.
혹시 뭐가 숨겨져 있나 싶어 코드를 열어보았더니 너무나 떡하니 admin.php로 오라는 문구를 확인할 수 있었다.
admin.php를 보니 password를 입력하는 페이지를 확인할 수 있었고, 본능적으로 password를 알아내야 함을 알 수 있었다.
하지만 뭔가 공격할 만한 건덕지가 보이지 않았다.
admin.php에 가볍게 공격을 시도해보았지만, 여기가 아닌것을 알 수 있었다.
그러던 중, 쿠키를 보니 time이라는 값에 unix timestamp가 설정되어있음을 확인할 수 있었다.
이 쿠키가 왜 필요할까 곰곰히 생각하며 코드를 보니 아래와 같은 부분을 확인할 수 있었다.
admin.php가 아닌 맨 처음페이지 index.php를 확인하면 주석으로 시간이 나타나 있었고, 이것이 쿠키에 설정된 unix timestamp 값임을 눈치챌 수 있었다.
또한 로깅이 되고 있다는 말을 통해, 내가 접근한 시간(unix timestamp)값이 데이터베이스에 저장되어 이용될 수 있겠다라는 판단을 할 수 있었고, 이에 바로 time값에 SQLI를 시도해보았다.
기본적으로 timestamp 값은 숫자이니 따로 쿼터 없이 바로 참이되는 SQLI를 시도하였다.
결과적으로 참이되는 쿼리로 SQLI를 시도한 결과 2070-01-01 09:00:01이 나옴을 확인할 수 있었다.
Blind SQLI의 성공 가능성을 확인해보기 위해, 이번엔 거짓이 되는 SQLI를 시도해 보았다.
거짓이 되는 쿼리로 SQLI를 시도한 결과는 2070-01-01 09:00:00 으로, 참과 거짓을 구분할 수 있음을 알 수 있었고 이에 Blind SQLI가 가능함을 확인할 수 있었다.
(추측이지만, 정상적인 timestamp라면 이를 잘 변환해서 보여주지만, timestamp형식이 아니라면 쿼리 결과에 따라 각각 보여주는 데이터가 달라 발생한 취약점이 아닐까 싶다.)
Blind SQLI가 됨은 확인했지만, 아직 admin.php에서 사용하고 있는 table과 column이 무엇인지 알지 못하기 때문에 바로 flag를 알아낼 수 는 없었다.
그래서 DB는 같은 문제이기 때문에 동일한 DB를 사용한다는 전제를 깔고, information_schema 테이블을 이용하여 table과 column을 알아낼 수 있는 스크립트를 제작한 뒤, flag를 알아내는 스크립트도 제작하였다.
아래 github에 올려두었으니, 참고할 사람은 참고해도 좋다.
(다만 효율이나 뭐 이런거까지 고민하면서 짠 코드는 아니라는 점 참고)
Github 주소 : github.com/KwonHyeonJun/Wargame_POC/tree/main/1.%20webhacking.kr/old-02
그렇게 만든 코드를 순차적으로 실행시켜 table명은 admin_area_pw라는 것을, column명은 pw라는 것을 알아낼 수 있었고,
이를 이용하여 마지막으로 flag를 얻어내는 script를 실행시켜, flag를 찾을 수 있었다.
찾아낸 flag를 admin.php의 input에 입력하고 submit하면!
old-02번 문제가 풀린다.
나름 이번에는 Guessing 없이 풀이를 하기 위해서 information schema 부터 조사하는 작업을 수행했고, 스크립트도 이진검색을 이용하여 효율을 좀 끌어내려 노력했다.
오래간만에 풀지만 재밌는 문제라고 생각한다.
Cookie Injection 문제가 다른 wargame에는 흔치 않았던 것으로 기억해서 더 그런건지 모르겠다.
'Webhacking > Webhacking.kr' 카테고리의 다른 글
[Webhacking.kr] old-04번 문제 풀이 (0) | 2021.01.03 |
---|---|
[Webhacking.kr] old-06번 문제 풀이 (0) | 2021.01.02 |
[Webhacking.kr] old-05 풀이 (1) | 2021.01.02 |
[Webhacking.kr] old-03 풀이 (0) | 2021.01.02 |
[Webhacking.kr] old-01번 문제 풀이 (2) | 2021.01.01 |