목록Web Hacking (59)
Information Security
[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() 함수의 반환 값을 알아내서 해독된 자바스크립트 코드를 얻을 것이다. ..
자바스크립트 퍼즐. 그냥 즐기세요! 퍼즐 조각을 클릭하면 옆으로 옮겨진다. QR 코드가 되도록 퍼즐을 맞추면 된다. 즐기고 싶지 않다면 소스를 확인한다. img 태그에 src 속성이 없다. $('#join_img').attr('src',unescape('.%2f%69%6d%67%2f%71%72%2e%70%6e%67')); 소스 위 쪽을 보니 jquery의 attr() 함수를 이용해서 src 속성을 설정해주고 있다. ※ unescape는 escape로 이스케이핑 된 문자열을 정상적인 문자열로 되돌려주는 역할을 한다. https://opentutorials.org/course/50/199 참고 src 속성의 값을 Console에서 확인해보니 ./img/qr.png이다. 해당 경로를 url로 접속해보니 QR ..