본문 바로가기

분류 전체보기

(41)
[백준 2309] 일곱 난쟁이 https://www.acmicpc.net/problem/2309 2309번: 일곱 난쟁이 아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다. www.acmicpc.net 문제 왕비를 피해 일곱 난쟁이들과 함께 평화롭게 생활하고 있던 백설공주에게 위기가 찾아왔다. 일과를 마치고 돌아온 난쟁이가 일곱 명이 아닌 아홉 명이었던 것이다. 아홉 명의 난쟁이는 모두 자신이 "백설 공주와 일곱 난쟁이"의 주인공이라고 주장했다. 뛰어난 수학적 직관력을 가지고 있던 백설공주는, 다행스럽게도 일곱 난쟁이의 키의 합이 100이 됨을 기억해 냈다. 아홉 난쟁이의 키가 주어졌을 때, 백설공주를 ..
[DVWA 실습] File Upload(high) 문제 해결 방법 High단계는 클라이언트에서 자동으로 설정되는 업로드 타입을 보는 것이 아니라 실제 파일 이름의 확장자가 jpg인지 jpeg인지 png인지를 검사하고 있다. 또한 getimagesize라는 함수를 통해 실제로 파일의 내용이 이미지 인지를 검사 하고 있다. medium 단계 보다는 확실히 대응이 강화 되었다. 이 루틴은 어떻게 우회 할 수 있을까? 다시 웹쉘을 업로드 한 후 burp suite로 intercept 해보자. 여기서 이번에는 Content-type 이 아니라 filename 부분을 수정해 준다. 파일 이름에 .jpg를 붙여 webshell.php.jpg로 수정한다. 또한 위의 소스 코드에서 보았던 getimagesize 함수를 우회하기 위해 파일에다 아래 그림과 같이 'GIF8..
[DVWA 실습] File Upload(medium) 문제 해결 방법 이번에는 업로드가 실패했고 jpeg나 png 이미지 파일만 받을 수 있다는 메시지가 출력 된다. burp suite를 준비하여 파일이 업로드 될 때의 요청을 intercept 해보자. 다음과 같이 Burp Suite의 Proxy -> Intercept에서 Intercept On 으로 바꿔 준다. 다시 웹셀을 업로드 해보자. 업로드 요청이 인터셉트 된다. php 부분이 우리가 업로드한 파일의 내용이 전달되는 부분이다. Content-Type을 보면 Application/x-php 라고 설정되어 있는데 우리가 php파일을 업로드 했기 때문에 자동으로 php 타입으로 설정되는 것이다. 이 Content-type을 조작해 보도록 하자. 이 부분을 image/jpeg로 바꾸고 Forward 버튼을..
[DVWA 실습] File Upload(low) 문제 해결 방법 여기에 이미지 파일 대신 웹쉘 파일을 업로드를 한다. 우린 여기서 다음과 같은 웹쉘 php 파일을 사용할 것이다. 코드를 살펴보면 command를 입력하라는 내용이 있고 사용자 입력을 받기 위한 폼을 표시하는 html 출력 구문이 있다. cmd라는 파라미터의 값이 설정되어 있으면 이걸 system 함수로 실행하는 부분이다. 폼에 내용을 입력하게 되면 그 부분이 cmd 파라미터로 설정된다. 따라서 사용자가 입력한 것을 시스템 명령으로 실행하는 것이다. 이제 이 파일을 업로드 한다. 이미지 파일을 업로드 하라고 했지만 무시하고 웹쉘 파일을 업로드 한다. Browse 버튼을 눌러 webshell.php 파일을 선택, Upload버튼을 누른다. 결과를 보면 upload가 성공적으로 되었다고 나온..
DVWA - File Upload DVWA의 다섯 번째 실습 대상인 File Upload다. 선택한 파일을 업로드하는 기능을 가진 폼에 필터링이 제대로 구현되어 있지 않아 악성 파일들이 업로드될 수 있으며 이를 이용해 서버 측의 php 엔진에서 phpinfo() 등 php 코드를 실행하는 것이 목적이다. File Upload? 현대 웹 애플리케이션에서 사진이나 비디오, 바이너리 등 다양한 파일을 서버에 업로드하는 기능은 거의 필수적으로 구현되어 있다. 하지만 이렇게 업로드되는 파일들을 필터링하지 않거나 사용자가 직접 접근하여 실행시킬 수 있다면 웹 애플리케이션에 심각한 영향을 끼칠 수 있다. 예를 들어 웹쉘 파일이 서버로 업로드될 경우 이 파일이 실행되기만 하면 RCE를 통해 서버 측에서 실행되어 중요 정보를 읽거나 서버를 장악할 수 있..
[DVWA 실습] File Inclusion(high) 문제 해결 방법 1. 소스코드를 보면 "file*"로 file1, file2, file3이 맞는지와 "index.php"파일인지 필터링하고 있다. 2. RFI공격은 주소를 가져와야 하기 때문에 RFI공격을 막을 순 있지만 Path traversal공격은 막지 못한다. file이란 단어를 검증하고 있기 때문에 "file/../../../../../../../etc/passwd"처럼 file디렉터리를 만들고 그 뒤에 Path traversal공격을 시행하면 된다. 주의해야 할 점은 "../"를 7번 써줘야 한다. file디렉터리로 우회해서 공격하는 것이기 때문에 경로가 총 7번이 된다.
[DVWA 실습] File Inclusion(medium) 문제 해결 방법 공격자가 악성 스크립트를 서버에 전달하여, 해당 페이지를 통해 전달한 악성 스크립트 또는 코드가 실행되도록 하는 취약점이다. 삽입 파일의 위치에 따라서 RFI(Remote File Inclusion)와 LFI(Local File Inclusion)으로 분류된다. 페이지 화면 [DVWA - File Inclusion] - Low 난이도와 동일한 페이지 화면을 출력하고 있다! - 바로 소스코드를 확인하러 가보자 !! 소스코드 [File Inclusion 페이지 - 소스코드] - Low 난이도의 경우 page의 파라미터 값으로 파일을 불러오는 코드 뿐이였지만… - 바로 아래 새롭게 입력값 검증으로.. http://와 https:// 그리고, ../와 ..\\의 필터링이 추가되었다. - 그치만,..
[DVWA 실습] File Inclusion(low) 문제 해결 방법 공격자가 악성 스크립트를 서버에 전달하여, 해당 페이지를 통해 전달한 악성 스크립트 또는 코드가 실행되도록 하는 취약점이다. 삽입 파일의 위치에 따라서 RFI(Remote File Inclusion)와 LFI(Local File Inclusion)으로 분류된다. 페이지 화면 [DVWA - File Inclusion] - file1.php / file2.php / file3.php 총 3개의 php가 링크되어 있다! - URL에는 page 값으로 include.php가 입력되어 있음을 확인할 수 있다. 소스코드 [File Inclusion 페이지 - 소스코드] - $file이 GET 메소드를 통하여 page 파라미터 값으로 해당 파일을 불러오는듯 하다! - 해당 코드를 통해 File Inc..
DVWA - File Inclusion DVWA의 네 번째 실습 대상인 File Inclusion이다. 각 파일을 클릭하면 특정 php 코드가 실행되며 URL에 파일 이름이 파라미터로 전달된다. 이 특성을 활용하여 웹 서버가 다른 파일을 읽도록 하는 것이 이 실습의 목적이다. File Inclusion? File Inclusion은 실행 시간에 다른 파일을 읽어 동적으로 웹페이지를 생성하는 애플리케이션에서 자주 볼 수 있는 취약점이다. 주로 PHP의 include() 함수가 그 단적인 예인데 예를 들어 데이터베이스 연결 클래스를 만들어 이를 여러 페이지에서 사용하고자 한다면 include("db.php")처럼 불러와서 사용할 수 있다. 마치 C언어에서 사용자 지정 헤더를 include 하는 것과 비슷한 방법으로 꼭 클래스뿐 아니라 다수의 페이..
이중 연결리스트(Doubly linked list)란? 이중 연결리스트 이중 연결리스트는 각 노드가 선행 노드와 후속 노드에 대한 링크를 가지는 리스트입니다. 아래 그림처럼 노드의 왼쪽 링크(left link)와 오른쪽 링크(right link)가 각각 다른 노드의 오른쪽 링크와 왼쪽 링크를 연결짓고 있으며 특별하게 헤드도 노드로 이루어져 있습니다. 헤드노드 헤드노드는 데이터를 가지지 않고 오로지 삽입, 삭제 코드를 간단하게 할 목적으로 만들어진 노드입니다. 따라서 헤드 포인터와의 구별이 필요하며 리스트가 공백상태라면 헤드 노드만 존재하는 상태입니다. 이때 헤드노드의 left link는 right link를 가리키며 right link는 left link를 가리키는 상태입니다. 삽입 연산 new_node를 before의 앞쪽에 삽입하는 연산입니다. (1)은 ..