본문 바로가기

Web Security

(29)
[CVE-2017-5941] node-serialize [CVE-2017-5941][1] Node.js에 node-serialize 라이브러리에서 발견된 취약점으로 RCE(Remote Code Execution) 공격이 가능합니다. node-serialize: 0.0.4 버전에서 취약점이 발견되었으며, 현재까지도 패치되지 않은 것으로 알려져 있습니다. Serialization 일부 객체를 나중에 복원할 수 있는 데이터 형식으로 변환하는 과정입니다.[2] 이를 사람들은 객체를 저장소에 저장하거나 통신의 일부로 보내기 위해 객체를 직렬화하는 경우가 많습니다. Deserialization 해당 프로세스의 역순으로 일부 형식에서 구조화된 데이터를 가져와 객체로 재구성합니다. [2] 오늘날 데이터 직렬화에 가장 많이 사용되는 데이터 형식은 JSON이며, 예전에는 XM..
Prototype Pollution Object oriented Language : JavaScript JavaScript는 Java, Python과 같이 객체지향언어지만, 클래스(class)라는 개념이 없습니다. 대신에 기존의 객체를 복사하여 객체를 생성하는 프로토타입(prototype)을 제공합니다. 따라서, JavaScript는 프로토타입 기반의 언어입니다. Prototype JavaScript의 모든 객체는 최소한 하나 이상의 다른 객체로부터 속성(property)과 메서드(method)를 상속(inheritanc)을 받으며, 상속되는 정보를 제공하는 객체를 프로토타입(prototype)이라고 합니다. [1] 단, Object.prototype 객체는 전역 범위를 가진 Root Prototype로 어떠한 프로토타입(prototype..
Cheat Sheet - SQL Injection 1. 기본 ' or 1=1 # ' or '1'='1 2. 공백 필터링 (old-18) /**/ (주석) () (괄호) + (더하기) %09 (\t) %0a (\n) 3. 주석 (old-50) -- # /**/ 예제) 공백 필터 및 md5 주석 처리 select lv from chall50 where id='{$_GET['id']}' and pw=md5('{$_GET['pw']}') select lv from chall50 where id=''/*' and pw=md5('*/union/**/select/**/3#') 4. admin 문자열 필터링 (old-45) reverse("nimda") 0x61646d696e char(97, 100, 109, 105, 110) 0b01100001011001000110..
[Webhacking.kr] old-08 https://webhacking.kr/challenge/web-08/ Challenge 8 webhacking.kr 문제 코드
[Webhacking.kr] old-45 https://webhacking.kr/challenge/web-22/ Challenge 45 webhacking.kr 소스 코드 45번 문제도 50번 문제와 동일하게 mb_convert_encoding() 함수를 사용하고 있다. mb_convert_encoding() 취약점을 활용하여 쿼리문을 조작하면 될 것 같다. 단, 50번 문제와 다른 점은 admin 이라는 글자가 포함되면 안된다는 것이다. admin 키워드를 우회하기 위해서는 reverse("nimda"), 0x61646D696E 등 여러 방법들이 존재한다. 이 문제에서는 0x61646D696E 를 활용하면 될 것 같다. id : %aa%27 or id like 0x61646D696E# pw : guest select id from chall4..
[Webhacking.kr] old-50 https://webhacking.kr/challenge/web-25/ Challenge 50 webhacking.kr 소스 코드 50번 문제는 mb_convert_encoding() 함수의 취약점을 활용하여 문제를 해결할 수 있다. mb_convert_encoding() 함수는 멀티바이트를 사용하는 언어셋 환경에서 \ (백슬래시) 앞에 %a1~%fe 값이 들어오면 인코딩이 깨지며 \ (백슬래시)를 덮어버리게 되는 문제가 발생한다. select lv from chall50 where id='{$_GET['id']}' and pw=md5('{$_GET['pw']}') 위 쿼리를 우회하기 위해 스페이스바를 /**/로 대체하였고 mb_convert_encoding() 함수의 취약점을 활용하여 ' (single..
[Webhacking.kr] old-24 소스 코드 위 소스 코드에서 핵심은 extract() 함수입니다. extract() 함수는 배열 속 키 값을 변수화 시켜주는 역할을 합니다. 예를 들어, $arr[x]=5; $arr[y]=10; extract(arr); 를 하게 되면 $x 값은 5가 되고, $y 값은 10이 되게 됩니다. 그러므로, extract($_SERVER); extract($_COOKIE); 를 사용하여 $REMOTE_ADDR 변수에 문자열을 넣어줄 수 있게 됩니다. F12 키 > Application > 좌측 Cookies 에 가서 REMOTE_ADDR 라는 이름의 쿠키를 생성해줍니다. 그 결과, 아래와 같이 IP 주소가 바뀌게 되어 포인트를 획득할 수 있게 됩니다.
시큐어 코딩 (XPath Injection) XPath Injection 이란? 외부 입력 값을 적절한 검사과정 없이 XPath 쿼리문 생성을 위한 문자열로 사용하면, 공격자는 프로그래머가 의도하지 않았던 문자열을 전달하여 쿼리문의 의미를 왜곡시키거나 그 구조를 변경하고 임의의 쿼리를 실행하여 인가되지 않은 데이터를 열람할 수 있게 만드는 공격 XPath 란? XPath는 XML 문서의 일부에 주소를 지정하기 위한 언어로, XSLT와 XPointer에서 모두 사용된다. XPath 역할 XPath는 XML 문서를 노드 트리로 모델링하여 경로 표현식(Path Expression)을 통해 XML 문서의 노드 또는 노드 집합을 선택한다. 이 때, 경로 표현식은 기존 컴퓨터 파일 시스템으로 작업할 때 볼 수 있는 표현식과 매우 유사하다. 이러한 XPath ..