LFI, RFI 취약점 설명 및 실습
2022. 3. 29. 20:35
기술보안/Web
1. LFI 란?? - LFI(Local File Inclusion)란 외부의 TXT, php 등 파일을 내부의 PHP 파일처럼 사용할 수 있으며, 서버 내부의 파일을 가져올 경우 정보 유출을 위해 많이 사용됨 2. RFI 란?? - RFI(Remote File Inclusion)란 외부의 서버로 부터 내부의 서버에 가져와 실행 시킬 수 있으며 외부의 WebShell을 가져올 수 있음 3. 실습 LFI 실습 위의 URL을 보니 language 파라미터를 통해 lang_en.php파일을 가져오는 것을 볼 수 있음(include 하고 있음) 이를 통해 etc/passwd 파일을 가져오도록 함 (../../../ 경로를 상위로 올라가 etc 아래 passwd파일을 가져옴, 상위 경로 이동은 여러개 삽입해도 됨..
[ActiveX] 2장. 취약한 ActiveX 프로그램 개발
2022. 2. 28. 21:32
기술보안/Web
개요 이번 장에서는 시스템의 자원을 활용하는 취약한 ActiveX 프로그램을 개발하는 과정을 소개한다. Visual Studio 2022 를 이용해 개발하였으며, 쉽게 따라할 수 있도록 캡처파일 및 설명이 많이 첨부되어 있다. 개발과정이 궁금하지 않다면 맨 아래에서 ActiveX가 브라우저에서 어떻게 호출되는지 정도만 참고하면 된다 ActiveX 개발 요구사항 1. print("msg") - 입력 값을 메시지 박스로 출력하는 브라우저에서 호출 가능한 함수를 만들 것 2. ExcuteCommand("path", "option") - 피카츄 배구.exe를 실행하는 브라우저에서 호출 가능한 함수를 만들 것 ActiveX 개발환경 준비 1. Visual Studio 2022 다운로드 2. VS 워크로드에서 MF..
[ActiveX] 1장. ActiveX란?
2022. 2. 28. 19:42
기술보안/Web
개요 컨설팅 프로젝트에서 웹사이트를 진단하다 보면 종종 액티브X를 만나게 된다. KISA 홈페이지의 취약점 정보 게시판이나, 프로그램 개발사의 가이드를 참고하여 우연히 취약점을 몇 번 찾은 적이 있다. 하지만 언제까지 눈에 보이는 취약점만 찾을 수는 없기 때문에 직접 개발하고 분석해보기로 한다. ActiveX란 무엇인가? 1. 정의 마이크로소프트 사에서 개발한 액티브X는 기존의 응용 프로그램을 웹과 연결하여 그대로 실행할 수 있게 해주는 웹 브라우저(IE)의 플러그인 기술이다. ※ Internet Explorer 11까지는 ActiveX가 지원되지만, 이후 Microsoft Edge 브라우저에서는 지원되지 않음 2. 사용방법 액티브X는 컴포넌트 오브젝트 모델(COM)과 객체 연결 삽입(OLE)을 적용해 ..
Server-side JavaScript Injection
2022. 2. 28. 18:03
기술보안/Web
Objective Python과 Perl처럼 자체적인 엔진를 사용하여 Java Script를 사용할 수 있게 해준 것이 Node.js이다. 이를 통해 Node.js로 구성된 백엔드에서 Headless Browser 등을 통해 처리하는 로직이 있는 경우, 공격자가 Node.js가 해석하여 처리할 수 있는 값을 전달함으로써 서버사이드에서 원하는 Java Sctipt를 실행하도록 하는 공격이다. 간단하게 생각하면 SSTI와 비슷한 개념으로 이해하면 된다. 서버 사이드의 템플릿 엔진에 악성 템플릿 구문을 삽입함으로써 원하는 행위를 실행하도록 하는 것이 템플릿 엔진이 아닌 Node.js를 해석하는 엔진인 V8로 타겟으로 공격을 시도한 것으로 난 이해했다. HAHWUL님의 블로그에서 해당 취약점을 알게되었고, 어떻..
JSFUCK 분석
2022. 2. 3. 11:00
기술보안/Web
JSFUCK이란? 위키백과에 의하면 Martin Kleppe이 개발한 자바스크립트의 난해한 프로그래밍 스타일이라고 소개되어있다. (![]+[])[+!+[]] // "a" ([][+[]]+[])[!+[]+!+[]] // "d" (!+[]+[])[!+[]+!+[]+!+[]] // "e" (![]+[])[+[]] // "f" ([][+[]]+[])[!+[]+!+[]+!+[]+!+[]+!+[]] // "i" (![]+[])[!+[]+!+[]] // "l" ([][+[]]+[])[+!+[]] // "n" (!+[]+[])[+!+[]] // "r" (![]+[])[!+[]+!+[]+!+[]] // "s" (!+[]+[])[+[]] // "t" ([][+[]]+[])[+[]] // "u" 위 코드처럼 [ ], ( )..