HTB - Freelancer

2021. 2. 12. 03:030x0B Web Hacking

728x90

문제를 직접 풀어볼 사람들을 위해 특정 정보들은 필터링하여 라이트업을 작성한다.

 

이 서버에는 포트폴리오 열람을 할 수 있는 하나의 파라미터가 존재한다. 하지만, 웹 개발자의 쿼리 구성 설정 미흡으로 인하여 SQLI가 발생하게 된다. 악의적인 사용자는 이를 통해 웹 서버에 직접적으로 침투할 수 있게 된다. 뿐만 아니라, 개발자는 특정 소스코드에 크리덴셜을 적절한 인코딩 없이 하드코딩 해두었다.

 

동적 웹 페이지를 통해 드러나게 되는 영구적인 데이터들은 DB에 저장되어있다. 사용자가 특정한 데이터를 추출하기를 원할 때, 서버는 사용자가 원하는 데이터의 유무를 쿼리를 통해 판단한다. 이때, 쿼리에 적절한 필터링이 적용되어 있지 않으면, 악의적인 사용자는 서버에 저장되어 있는 데이터를 열람하거나, 로그인 시 필요한 크리덴셜을 확보할 수 있게 된다.

 

영향을 끼치는 모듈

{IP}:31980/poXXfoXXX.php?id=
{IP}:31980/poXXfoXXX.phpp
{WEB_DEFAULT_PATH}/aXXXXXXXXXt/iXXXXe/cXXXXg.php
{WEB_DEFAULT_PATH}/aXXXXXXXXXt/iXXXx.php

이 서버에는 파일을 열람할 수 있는 함수가 필터링 되어 있지 않다. 뿐만 아니라, 악의적인 사용자는 해당 서버의 구성요소를 쉽게 파악할 수 있다. (Apache, Linux) 이는, Linux와 Apache의 특성을 잘 이해하고 있는 악의적인 사용자에 의해 poXXfoXXX 페이지의 실제 코드를 열람할 수 있게 된다.

 

Payload

SQL Injection을 통해 현재 구동 중인 서버의 DB 정보를 추출할 수 있다.

id= 1 union select 1,2,@@version

소스코드 릭을 통해 열람한 poXXfoXXX 페이지. 이를 통해 숨겨진 웹 페이지를 알아낼 수 있다.

id=1 union select 1,2,{SQL_FUNCTION}("{FILE_PATH}")

웹 개발자는 쿼리를 다룰 때, union 이나 select 같은 DB 내 테이블을 탐색할 수 있는 키워드를 필터링 해두어야 한다. 뿐만 아니라, 이스케이프 문자와 인용부호 역시 필터링 해두어야 한다. 

 

서버 내 중요한 정보가 적절한 필터링 혹은 암호화 없이 하드코딩 되어 있다면, 악의적인 사용자는 이를 이용하여 2차 공격이 가능하다. SQL Injection을 통해 개발자는 credential을 하드코딩 해두었음을 알 수 있게 된다. 하지만, 웹 서버에 직접적으로 침투하지 못했기에 해당 credential을 이용하진 못한다.

소스코드 릭을 통해 관리자 로그인 성공 시, 진행되는 로직을 살펴볼 수 있게 된다. 소스코드를 읽어보면, 세션이 적용되지 않으면 welcome page로 리다이렉트 된다고 쓰여있다. 하지만, 악의적인 사용자는 이미 소스코드 릭을 할 수 있는 기술을 습득했기 때문에 계정의 유무를 떠나 리다이렉트 될 페이지에 접근이 가능하다. 비록 세션을 통해 객체의 소유자를 검증하고 인증여부를 확인하지만, 소스코드 릭이 진행 된 상황에서는 무용지물이다. 그러므로 웹 개발자는 SQL Injection 필터링을 강화해야한다.

사용자는 때때로 서버 내 존재하지 않는 페이지로 접근을 하게 되는 경우가 있다. 이때, 404 HTTP 응답코드로 사용자에게 해당 페이지는 존재 하지않음을 간접적으로 알려주는 효과가 있다. 하지만, 기본 에러 페이지에는 서버의 정보가 공개 되어진다. 공개 되어지는 정보를 통해, 악의적인 사용자는 해당 서버의 정보를 탈취하기에 수월한 시나리오를 작성할 수 있게 된다.

악의적인 사용자는 노출 된 서버 정보를 통해 취약점이 존재하는 서비스를 이용하고 있는지 쉽게 판별이 가능하다. Freelancer 서버에서는 취약점을 굳이 사용하지 않더라도, 서버 구성 환경을 파악할 수 있어 (운영체제와 웹 서비스) SQLI로 파일의 경로를 쉽게 찾아 소스코드를 릭할 수 있게 된다. 

 

잘못 입력한 웹 페이지로 인해 서버의 운영체제와 사용중인 서비스의 버전이 노출되었다. 

사용자가 서버 내 존재하지 않는 페이지에 접근을 시도할 시, HTTP 응답코드 페이지를 그대로 사용하지 않고, 커스텀하여 서버에서 노출되면 안되는 정보들을 제거해야한다. 

 

'0x0B Web Hacking' 카테고리의 다른 글

Portswigger를 통해 알아보는 OAuth 기초문제들  (0) 2021.03.28
SQLI 복습  (0) 2021.03.23
크롤링 2020 트능(트렌드 능력고사)  (0) 2020.07.14
sqli practice  (0) 2020.07.14
Hackerone CMS V2 Flag02  (0) 2020.06.29