Hack/Web44 Laravel SQL Injection ( Version < 5.8.11) 개요 Laravel Framework는 SELECT Query에서 사용할 Columns을 입력 값을 통해 지정할 수 있습니다. JSON Data의 경우 addSelect() 함수를 통하여 빠르게 변환할 수 있으며, addSelect() 함수는 json_extract() 함수로 변환되어 쿼리에 사용됩니다. Blog::query() ->addSelect('title->en'); SELECT json_extract(`title`, '$."en"') FROM blogs; 분석 addSelect() 함수의 변환 과정에서는 Escape 되지 않기 때문에 SQL Injeciton 취약점이 발생할 수 있습니다. 만약 title->en 데이터 부분에 '#를 추가할 수 있다면 공격자가 직접 json_extract 함수를 .. 2020. 9. 22. Laravel Framework 보안 관련 내용 정리 보안 관련 내용 Public 디렉토리 노출 최소화 및 설정 파일 숨김 기존의 PHP 웹 애플리케이션들은 구동에 필요한 설정 파일을 웹 서버에 위치 시키거나 절대 경로로 읽어들이는 경우가 많았습니다. 라라벨의 경우 구동에 필요한 설정 파일을 DocumentRoot와 격리하였고, php 직접 호출이 아닌 애플리케이션 라우팅을 통해 서비스를 제공하도록 설계되었으며, public 디렉토리에 단 하나의 PHP 파일만 존재함으로써 public 디렉토리와 설정 파일의 노출 및 .php 파일 직접 호출을 통한 공격 발생 가능성을 최소화 하였습니다. public 디렉토리 (Laravel Korea 설명) public 디렉토리는 애플리케이션에 진입하는 모든 request-요청들에 대한 진입점 역할과 오토로딩을 설정하는 i.. 2020. 9. 22. Reflected File Download 개요 사용자의 입력 데이터가 다운로드 되는 파일에 영향을 줄 경우, 이를 이용하여 정상적인 파일을 악성 파일로 변경하여 다운로드 하게 할 수 있습니다. 해당 취약점이 발생하기 위해서는 3가지의 조건이 필요합니다. 1. 파일 다운로드 Content-Disposition 헤더가 attachment로 구성되면 응답 데이터를 첨부파일로 다운로드 받을 수 있습니다. 2. 실행 가능한 확장자 및 파일 명 변경 필요 파일을 실행하는 클라이언트 측에서 실행 가능한 확장자로 다운로드 받을 수 있어야 합니다. 3. 사용자 입력 값 응답 데이터 반영 입력 값이 응답 데이터에 반영될 때 시스템 명령어를 통해 악성 코드를 생성할 수 있습니다. Windows Command의 경우 "", "\" 모두 문자열을 닫은 것으로 인식한다.. 2020. 9. 22. Phar 파일을 이용한 PHP Unserialization 개요 Phar(PHP Archive)는 많은 코드 파일 및 기타 리소스를 단일 아카이브 파일로 사용할 수 있는 패키지 형식입니다. Phar는 Stub, Manifest, File Contents, Signature(Optional) 총 4개의 구조로 이뤄지며, Signature을 제외한 나머지 구조에 대한 설명은 다음과 같습니다. Stub 가 존재해야만 Phar 파일로 인식합니다. Manifest Phar 파일의 Meta-Data가 포함되어 있으며, 모든 직렬화 된 객체가 포함될 수 있습니다. 해당 구조에서 역직렬화 취약점이 발생합니다. File Contents Phar 내 데이터 영역입니다. 직렬화 된 Meta-Data는 Phar:// Stream Wrapper에 의해 처음 액세스될 때 역직렬화 되며,.. 2020. 9. 22. commons-fileupload Module WAF Filtering Bypass 개요 JSP로 구현된 웹 서버에서 파일 업로드를 구현할 때 commons-fileupload 라는 Module을 이용하는 경우가 많습니다. 웹 서버들의 경우 보통 WAF(Web Application Firewall)를 거쳐 WAS(Web Application Server)로 Request를 전송하는 것이 대부분인데, 만약 파일 확장자 필터링을 WAF에서만 수행할 경우 필터링 우회 취약점이 발생하게 됩니다. 취약점 취약 환경 commons-fileupload (Version 1.3 ~) 테스트 환경 CCE 2019 Babyweb Docker (tomcat URL 변경 파일) Docker 빌드 명령어 docker build -t babyweb . docker run -p 80:80 babyweb 분석 해당 .. 2020. 9. 21. CVE 2020-10487 (Ghostcat : Tomcat AJP) 개요 CVE 2020-10487은 Tomcat의 취약한 버전에서 Default로 열려있는 Connector 중 AJP Protocol에서 발생합니다. Tomcat은 AJP Request를 받았을 경우 org.apache.coyote.ajp.AjpProcessor를 호출하여 AJP 메세지를 처리하며, prepareRequest는 송신한 데이터를 추출하여 request 객체의 Attribute 속성으로 설정할 수 있습니다. 설정 가능한 Attribute 속성은 다음과 같습니다. javax.servlet.include.request_uri javax.servlet.include.path_info javax.servlet.include.servlet_path 해당 취약점을 이용하여 webapp 하위에 있는 모든.. 2020. 9. 21. Nginx off by slash fail 개요 Nginx에는 특정 경로로 요청을 받을 때 미리 설정한 경로로 변경하여 Redirect 해주는 기능인 alias와 root가 있습니다. alias location에 설정된 경로로 접속 시 alias에 설정된 경로로 Redirect root location에 설정된 경로로 접속시 root에 설정된 경로에 추가하여 Redirect 즉, 이를 간단히 나타내면 다음과 같습니다. 파일과 디렉토리의 경로 설정에 대한 올바른 사용법은 다음과 같습니다. 디렉토리 경로 설정법 location /test/ { alias directory path } 파일 경로 설정법 location /test { alias file path } 만약 디렉토리에 대한 경로 사용 시 location 경로에 / 를 실수로 입력하지 않게 .. 2020. 9. 21. Host Split Attack 개요 IDN(Internationalized Domain Names)는 ASCII가 아닌 다른 문자(Unicode)를 포함한 도메인을 의미합니다. 사용자가 도메인에 IDN을 입력하게 되면 2단계(Normalization, Punycoding)를 거쳐 ASCII 형태의 도메인으로 나타나게 됩니다. 1. Normalization 여러 형태의 값을 하나의 값으로 변경시켜주는 단계로써 수 많은 Unicode를 표준화하는 작업입니다. 2. Punycoding 실질적으로 Unicode의 값을 ASCII 코드로 변경하는 단계입니다. KISA에서 제공하는 퓨니코드 변환기가 있으니 참고하시길 바랍니다. 분석 이 2 단계 중 Normalization에서 Host Split 취약점이 발생하게 되는데, 간단히 예를 들면 et.. 2020. 9. 21. 이전 1 2 3 4 5 다음