전체 보기
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 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 9 → Level 10
이제는 이전과는 달리 보안에 신경 쓰기 위해 필터링을 추가했나 봅니다. 그렇다면 View sourcecode를 통해 어떻게 바뀌었는지 보도록 합시다. key 값을 받는 곳까지는 같고, 밑에서 preg_match() 함수를 통해 필터링을 하고 있군요. 세미콜론; 작대기|(?) 엔퍼샌드& 이렇게 3개를 필터링하는군요. 하지만 여전히 passthru를 통해 커맨드를 보내고 있습니다. 그렇다면 저희는 이제 리눅스 다중 명령어는 쓸 수가 없게 됩니다. 그래서 저는 생각한 게 '그럼 순수하게 grep 명령어로 찾아오게 해 보자'라는 생각이 들었습니다. 그렇게 만들어진 것이 다음과 같습니다. .* /etc/natas_webpass/natas11 1. .*
Level 8 → Level 9
일단 아무거나 집어넣고 결과를 봤습니다. ddd 를 넣어봤지만 아무것도 나오지 않았습니다. 이제 View sourcecode를 통해 소스를 확인해보도록 하죠. REQUEST method로 받아오는 걸 보니 GET, POST 어떤 방식이든지 상관없다는 걸 뜻합니다. 간단히 말하자면 입력한 값을 key값으로 넣어주고 그다음에 grep 명령어로 dictionary.txt 안의 내용을 찾아준다는 것입니다. 저희는 dictionary.txt 안에 무슨 내용이 들어있는지 모르므로 먼저 모든 내용을 보고 싶다는 생각이 들 것입니다. 그래서 grep 사용법을 참고하여 모든 내용을 나타내는 패턴인 .* 을 사용해서 보도록 하겠습니다. 엄청 많은 내용이 담겨있는데 딱히 눈에 띄는 정보는 없습니다. 그럼 코드 상에 힌트가 ..
Level 7 → Level 8
이번에도 저저번 문제와 마찬가지로 secret의 값을 전달합니다. View sourcecode를 눌러 소스를 확인해보겠습니다. 이번에는 base64로 인코딩 된 secret 값이 미리 주어졌습니다. 저희가 전달해준 값이 어떻게 변조되는지 보도록 합시다. 일단 값이 전달되면 function encodeSecret($secret) 함수를 부르고 나서 1. base64로 인코딩 2. strrev() 함수로 string을 역순으로 만듦 3. bin2hex() 함수로 string을 이진수로 인식하고 hex(16진수)로 바꿔줌 그렇다면 우리가 할 일은 'encodedSecret' 값을 반대로 적용해주면 됩니다. 1. hex2bin() 적용하기 2. strrev() 함수로 다시 원래 순서로 만들기 [ b3ViV1lm..
Level 6 → Level 7
위의 버튼을 각각 누를 시 보이는 텍스트입니다. 이걸로는 아무것도 알 수가 없어서 Ctrl + U로 페이지 소스를 봤습니다. 그랬더니 이런 힌트를 발견할 수 있었습니다. 다음 레벨의 패스워드는 /etc/natas_webpass/natas8 경로에 존재한다고 합니다. 그리고 다시 상기해보면 위의 링크들을 클릭했을 때 GET으로 접속하는 것을 알 수 있습니다. 그래서 일단 아무 값이나 넣어봤습니다. ?page=wow 그랬더니 이런 오류가 발생했습니다. page로 전달한 인자 값이 있는 곳에 있는 것을 가져와 나타내 주는 것 같았습니다. 그래서 주어진 경로를 page의 파라미터로 전달해줘 봤습니다. ?page=/etc/natas_webpass/natas8 그랬더니 이렇게 뜨는 것을 알 수 있습니다! DBfUB..