Wargame
-
[pwnable.kr][Toddler's Bottle] 1. fdWargame/pwnable.kr 2019. 7. 15. 19:49
pwnable.kr의 첫 번째 문제는 fd(File Descriptor)에 대한 문제이다. 먼저 파일 디스크립터에 대해 잘 모른다면 아래 설명을 참조하자. ...더보기 파일 디스크립터(File Descripter)란? 리눅스에서 파일을 읽고 쓰기 위해서는 반드시 파일을 open해야 한다. 만약 프로세스가 실행중에 이미 존재하는 파일을 open하거나 새로운 파일을 생성해달라고 커널에 요청하면, 커널은 해당 파일에 대해 '파일 디스크립터'라는 0 이상의 정수값을 반환한다. 리턴된 파일 디스크립터 값은 후에 프로세스가 read(), write()와 같은 시스템콜 함수를 이용하여 특정 파일에 접근할 때 인자로 사용된다. 즉, 파일 디스크립터란 프로세스에서 특정 파일에 접근할 때 사용하는 일종의 인덱스 값이다. ..
-
[LOS] 1. gremlin 문제 풀이Wargame/LOS (Lord of SQL Injection) 2019. 7. 15. 16:35
문제로 들어가면 상단에 쿼리문이 출력되어 있고, 아래에는 해당 웹페이지의 코드가 나와있다. 소스코드를 간단히 살펴보면, preg_match 함수로 id와 pw의 특정 문자열을 필터링하고 있다. 또한 입력받은 id와 pw를 확인하여 쿼리문이 정상적으로 수행되면 문제가 해결된다. 따라서 SQL 인젝션을 이용하여 쿼리문이 항상 true를 반환할 수 있도록 id와 pw의 인자를 조작하면 된다. select id from prob_gremlin where id='{$_GET[id]}' and pw='{$_GET[pw]}' select id from prob_gremlin where id='1' or '1' and pw='1' or '1' 위와 같은 SQL문이 전송될 수 있도록 현재 페이지의 URL 뒤에 ?id=1..
-
[Webhacking.kr] Challenge 48 풀이Wargame/Webhacking.kr 2019. 5. 25. 19:48
48번 문제로 들어가자마자 XSS가 일어났다는 팝업창이 뜬다. 팝업창을 끄면, 파일과 메모를 업로드할 수 있는 페이지가 있다. 아무 파일이나 업로드해 전송해보았다. (파일명은 3글자를 넘을 수 없다고 해서 확장자를 지우고 전송했다.) 전송해보니 내가 입력한 메모와 함께 upload file과 delete 버튼이 생성됐다. upload file을 클릭했더니 null이라는 메시지만 출력되었고, Delete를 클릭했더니 메시지와 업로드 파일이 삭제되었고 URL도 바뀌었다. 파일을 삭제한 후, 삭제된 파일 경로(webhacking.kr ~~ /upload/[파일명])로 들어가보면 에러가 출력된다. 이를 통해 delete 클릭 시에는 메모 뿐만 아니라 업로드한 파일도 삭제한다는 것을 알 수 있다. 즉, 파일 삭제..
-
[Webhacking.kr] Challenge 41 풀이Wargame/Webhacking.kr 2019. 5. 25. 18:33
이번 문제는 파일 업로드 취약점과 관련된 문제이다. 일단 아무 빈 파일을 업로드해봤더니 Done~이라는 메시지가 출력됐다. index.phps로 들어가서 소스를 확인해보자. 업로드한 파일명을 $fn에 저장하고, 파일명에 /, \, htaccess, .htaccess이 들어가거나 파일명이 10자가 넘어가면 페이지를 종료한다. 또한 파일명에 .(온점), 이 들어가면 이를 공백으로 필터링한다. 그 다음 $cp 변수에 웹서버에 저장된 임시 파일명을 저장하고, copy 함수를 사용하여 해당 파일을 $hidden_dir/$fn으로 복사한다. 그리고 $hidden_dir/$fn 파일을 쓰기 모드로 열어 패스워드를 파일에 입력하면 코드가 종료된다. 따라서 패스워드를 알아내기 위해서는 $hidden_dir을 알아야 한다..
-
[Webhacking.kr] Challenge 47 풀이Wargame/Webhacking.kr 2019. 5. 23. 15:39
47번 문제는 메일 헤더 인젝션과 관련된 문제이다. 47번 문제의 소스를 보니 index.phps로 가보라고 나와있다. index.phps로 접속해보자. 코드를 보니 mail 함수가 사용된 것을 확인할 수 있다. mail(수신자, subject, message, header) 함수는 PHP에서 이메일을 보낼 때 사용하는 함수이다. mail 함수의 인자 중 하나인 header는, 메일 헤더의 마지막에 추가하고 싶은 헤더 내용을 입력할 수 있는 인자이다. 일반적으로 header의 인자로 들어가는 추가 헤더에는 3가지가 있다. from: 메일 송신자의 주소 cc(carbon copy): 메일의 참조인. 수신자 외 다른 사람에게도 메일을 수신한다. bcc(blind carbon copy): 숨은 참조인. 수신자..
-
[Webhacking.kr] Challenge 59 풀이Wargame/Webhacking.kr 2019. 5. 19. 03:34
59번 문제로 들어가보면, 회원가입과 로그인을 할 수 있는 입력창이 보인다. 개발자도구를 실행해서 각 입력칸이 무엇을 의미하는지 알아보았다. 소스코드를 통해 두 입력칸이 각각 id와 phone을 입력받는 곳임을 알 수 있었다. 개발자도구로는 더 알아낼 정보가 없어서 이번엔 소스 링크를 클릭해보니 해당 페이지의 소스코드가 나왔다. 아래에 있는 if문이 JOIN에 대한 조건인 것 같으니 아래 조건문부터 먼저 살펴보자. 이 조건문에서는, 입력받은 phone의 길이가 20 이상이거나, 문자열 내에 admin, 0x, #, hex, char, ascii, ord, from, select, union 중 하나라도 포함되어 있으면 Access Denied 문구와 함께 페이지를 종료한다. 또한 입력받은 id가 admi..
-
[Webhacking.kr] Challenge 54 풀이Wargame/Webhacking.kr 2019. 5. 19. 02:20
54번 문제로 들어가면, Password is라는 문구가 뜨고, 일정 시간마다 한글자씩 보여준다. 개발자도구를 실행해 소스를 확인해보았다. 소스를 보면 run( ) 함수와 answer( ) 함수가 정의되어 있다. 먼저 run( ) 함수를 간단하게 살펴보자. function run(){ if(window.ActiveXObject){ try { return new ActiveXObject('Msxml2.XMLHTTP'); } catch (e) { try { return new ActiveXObject('Microsoft.XMLHTTP'); } catch (e) { return null; } } }else if(window.XMLHttpRequest){ return new XMLHttpRequest(); }e..
-
[Webhacking.kr] Challenge 39 풀이Wargame/Webhacking.kr 2019. 5. 18. 23:09
39번 문제로 들어가보면, id를 입력하는 칸과 제출 버튼만 달랑 있다. 일단 아무거나 입력하고 제출해봤더니 아래와 같은 에러 문구가 출력되었다. 17번째 줄에서 mysql_fetch_array()를 통해 요청한 쿼리가 틀렸기 때문인 것으로 보인다. 개발자도구를 통해 소스를 확인해보았다. 소스코드에서 index.phps로 이동해보라 해서 들어가보니, Challenge 39의 소스코드가 나와있었다. 소스 코드를 간단히 해석해보면 다음과 같다. if($_POST[id]) { $_POST[id]=str_replace("\\","",$_POST[id]); //백슬래시(\) 필터링 $_POST[id]=str_replace("'","''",$_POST[id]); //싱글 쿼터(') 1개를 싱글쿼터 2개('')로 필..