목록분류 전체보기 (194)
Information Security
System Hacking - 실습 환경 구성 오늘부터는 대표적인 시스템 취약점인 Buffer Overflow를 이해하기 위한 기초 공부를 할 것이다. 먼저 실습 환경을 구성해야 한다. 이번에는 과거(2000년?)에 사용하던 운영체제인 RedHat 6.2로 실습을 진행할 것이다. https://ko.wikipedia.org/wiki/%EB%A0%88%EB%93%9C%ED%96%87 1. Booting 부팅이 조금 오래걸린다. 기다리다가 부팅이 완료되면 root 계정으로 로그인한다. 2. 실습 도구 -GCC (GNU Compiler Collection) -NASM (Netwired Assembler) -GDB (GNU Debugger) 실습을 진행하기 위해서 필요한 도구는 위의 세가지이다. 이들 중 GCC..
[OverTheWire] NATAS15 이번에는 Username만 입력할 수 있다. 이렇게 DB에 저장된 username을 확인할 수 있다. 그런데 우리는 natas16의 패스워드를 알아내야 한다. 쿼리의 실행 결과가 1개 이상(참)이면 This user exits. 메시지가 출력되고, 0개 이하(거짓)이면 This user doesn't exist. 메시지가 출력된다. 이를 이용해서 정보를 얻어야할 것 같다. username을 참으로 만들었더니 This user exists. 메시지가 출력되었다. Blind SQL Injection 공격이 가능하다는 것을 확인했다. /* CREATE TABLE `users` ( `username` varchar(64) DEFAULT NULL, `password` var..
[OverTheWire] NATAS14 기본적인 로그인 페이지가 구현되어 있다. $query = "SELECT * from users where username=\"".$_REQUEST["username"]."\" and password=\"".$_REQUEST["password"]."\""; user를 조회하는 쿼리는 위와 같다. username을 참으로 만들고 뒤는 주석 처리하면 쿼리의 결과로 여러 행이 조회되어 패스워드가 출력될 것이다. NATAS14는 기본적인 SQL Injection으로 해결할 수 있었다.
[OverTheWire] NATAS13 else if (! exif_imagetype($_FILES['uploadedfile']['tmp_name'])) { echo "File is not an image"; } else { if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) { echo "The file $target_path has been uploaded"; } NATAS12와 코드가 거의 유사하지만 다른 점은 exif_imagetype() 함수의 반환 값이 존재해야만 파일을 업로드할 수 있다는 것이다. exif_imagetype() reads the first bytes of an image and checks its..
[OverTheWire] NATAS12 이번 문제에는 파일 업로드 기능이 구현되어 있다. 업로드할 파일은 natas13 패스워드 파일의 내용을 확인하는 명령어를 실행하는 PHP 코드이다.
[OverTheWire] NATAS11 $defaultdata = array( "showpassword"=>"no", "bgcolor"=>"#ffffff"); 현재 기본 데이터의 값은 위와 같다. if($data["showpassword"] == "yes") { print "The password for natas12 is "; } data["showpassword"]의 값이 yes이면 패스워드가 출력될 것이다. function saveData($d) { setcookie("data", base64_encode(xor_encrypt(json_encode($d)))); } 쿠키는 위의 함수에 의해 생성된다. function xor_encrypt($in) { $key = ''; $text = $in; $ou..
[OverTheWire] NATAS10 NATAS9와 비슷한 문제인데, 입력하는 문자열이 preg_match로 인해 필터링된다. 하지만 NATAS9번을 풀면서 입력한 문자열은 필터링 대상에 포함되지 않는다. 똑같이 grep -i ^ /etc/natas_webpass/natas11 dictionary.txt가 실행되면 패스워드를 획득할 수 있다.
[OverTheWire] NATAS9 $key = $_REQUEST["needle"]; 입력한 내용은 변수 key에 저장된다. if($key != "") { passthru("grep -i $key dictionary.txt"); } key가 비어 있지 않으면 외부 명령어를 실행하는 함수 passthru()를 실행한다. The passthru() function is similar to the exec() function in that it executes a command. http://php.net/manual/en/function.passthru.php grep -i $key dictionary.txt grep [옵션] [찾을 문자열] [파일명] 우리가 입력한 내용은 [찾을 문자열]에 대입된다. g..
나를 달로 보내주세요. 이번에는 게임이다. 저 우주선으로 달까지 가야한다. 옆에 초록색에 닿으면 GAME OVER이다. 31337점이나 얻어야 한다. 너무 어렵기 때문에 다른 방법을 찾아야 겠다. 일부러 죽은 다음 개발자 도구의 [Network]를 확인했는데, high-scores.php 페이지가 생긴 것을 알 수 있었다. 이 페이지를 확인했더니 token, score 변수를 정의하고 있다. GAME OVER될 때 패킷을 잡아서 score을 31337로 변조했다. 키 값을 얻어서 문제를 해결했다.
버튼을 클릭하세요! 나는 잡을 수 없네요. 당신이 키를 얻기 원한다면 버튼을 클릭해야 한다. 하지만 해보면 알겠지만 계속 버튼이 마우스를 피해서 달아난다. 소스를 보려했는데 우클릭이 차단되어 있는 것 같다. 저번에 natas를 풀면서 배운대로 view-source를 URL에 입력하여 소스를 확인했다. eval() 함수는 자바스크립트 코드를 실행한다. unscape_blue14() 함수의 인자 값은 난독화되어 알아볼 수가 없다. p8.js를 확인해보면 unescape_blue14() 함수가 어떻게 정의되어 있는지 알 수 있다. 난독화된 자바스크립트 코드를 해독하는 함수이다. eval() 함수를 실행하기 전 unescape_blue14() 함수의 반환 값을 알아내서 해독된 자바스크립트 코드를 얻을 것이다. ..