Web

    Level 17 → Level 18

    Please login with your admin account to retrieve credentials for natas19. Username: Password: 이번에도 소스를 자세히 살펴보도록 합시다. Session과 관련된 문제라는 것을 알 수 있습니다. 일단 세션을 가리키는 Cookie 값을 살펴보도록 하겠습니다. 현재는 50이라는 값을 가지고 있군요. PHPSESSID 라는 쿠키는 서버에서 설정할 세션 값의 ID를 나타냅니다. 그리고 소스를 봤을 때 세션 ID가 존재하는 범위는 1~640 사이입니다. 이제 저희가 할 일은 Bruteforce로 어떤 값이 'admin'의 값을 1로 갖고 있는지만 찾아내면 됩니다. 다음은 해당 파이썬 코드입니다. [natas18.py] ''' NATAS 18 ..

    Level 16 → Level 17

    '); mysql_select_db('natas17', $link); $query = "SELECT * from users where username=\"".$_REQUEST["username"]."\""; if(array_key_exists("debug", $_GET)) { echo "Executing query: $query"; } $res = mysql_query($query, $link); if($res) { if(mysql_num_rows($res) > 0) { //echo "This user exists."; } else { //echo "This user doesn't exist."; } } e..

    Level 15 → Level 16

    필터링을 적용했다고 하는데 소스를 보고 어떤 문자들이 필터링되는지 살펴봅시다.

    Level 14 → Level 15

    바로 소스를 보도록 합시다.

    Level 13 → Level 14

    Username과 Password를 입력하도록 되어있습니다. 소스를 보도록 하죠. Username: Password: 만약 이렇게 입력하게 된다면 query는 다음과 같이 구성될 것입니다. SELECT * from users where username="karatus" and password="karatus" 그렇다면 저희는 생각나는 기법이 딱 하나밖에 없죠. 바로 SQL Injection입니다. 그렇다면 우리는 이 query를 조작해야만 합니다. 주석을 이용할 건데 DB의 종류가 무엇인지 모르므로 일단 MySQL이라고 가정하고 Username에 작성해보겠습니다. 더블 쿼트(")로 닫아준 뒤, or 구문으로 뒤가 무조건 true인 구문을 넣어줍니다. 그리고 뒤를 인식하지 못하도록 -- (뒤에 공백 하나)..

    Level 12 → Level 13

    이번에는 지난번과는 달리 이미지 파일만을 받아들인다고 하는군요. 소스를 보도록 합시다.

    Level 11 → Level 12

    1000) { echo "File is too big"; } else { if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) { echo "The file $target_path has been uploaded"; } else{ echo "There was an error uploading the file, please try again!"; } }} else {?>.jpg" />Choose a JPEG to upload (max 1KB):코드를 바로 살펴봅시다.음 조금 복잡하군요.하지만 위의 코드와는 거의 상관없이 이 문제의..

    Level 10 → Level 11

    바로 View sourcecode를 통해 바로 소스를 확인해보도록 합시다. natas11

    Level 9 → Level 10

    이제는 이전과는 달리 보안에 신경 쓰기 위해 필터링을 추가했나 봅니다. 그렇다면 View sourcecode를 통해 어떻게 바뀌었는지 보도록 합시다. key 값을 받는 곳까지는 같고, 밑에서 preg_match() 함수를 통해 필터링을 하고 있군요. 세미콜론; 작대기|(?) 엔퍼샌드& 이렇게 3개를 필터링하는군요. 하지만 여전히 passthru를 통해 커맨드를 보내고 있습니다. 그렇다면 저희는 이제 리눅스 다중 명령어는 쓸 수가 없게 됩니다. 그래서 저는 생각한 게 '그럼 순수하게 grep 명령어로 찾아오게 해 보자'라는 생각이 들었습니다. 그렇게 만들어진 것이 다음과 같습니다. .* /etc/natas_webpass/natas11 1. .*