no image
webhacking.kr challenge 26
※ 작년 말 ~ 올해 초에 작성한 라이트업으로 사이트 개편 전의 문제가 섞여있습니다. ※ 웹 해킹 26번을 클릭하면 다음과 같은 화면이 뜬다. if(preg_match("/admin/",$_GET['id'])) { echo"no!"; exit(); } $_GET['id'] = urldecode($_GET['id']); if($_GET['id'] == "admin"){ solve(26); } View-source를 클릭하여 보면 다음과 같은 코드가 보인다. 코드를 해석해보면, id가 admin일 때 ‘no!’ 를 띄우고, id를 decode 했을 때 admin이 나오면 문제가 풀린다. 일단 ‘?id=admin’으로 id에 admin이라는 값을 보내면 코드에 나온 것처럼 다음과 같이 ‘no!’ 라고 뜬다. ..
2020.06.27
no image
webhacking.kr challenge 25
※ 작년 말 ~ 올해 초에 작성한 라이트업으로 사이트 개편 전의 문제가 섞여있습니다. ※ 문제에 들어가면 파일 구조를 보여준다. flag.php, hello.php, index.php가 존재하며 hello는 “hello”를 출력하고, index는 아무 것도 출력하지 않으며 flag는 “FLAG is in the code”라고 출력한다. “php://filter/convert.base64-encode/resource=flag”를 입력하면 flag 파일의 모든 코드를 base64로 출력한다. 출력된 문장을 base64로 디코딩하면 flag가 출력되고, 이를 입력하면 문제가 풀린다.
2020.06.27
no image
webhacking.kr challenge 24
※ 작년 말 ~ 올해 초에 작성한 라이트업으로 사이트 개편 전의 문제가 섞여있습니다. ※ 쿠키의 REMTE_ADDR이 ip가 되므로 “127.0.0.1”을 입력해야 한다. 하지만 “..”은 “.”으로, “12”, “7.”, “0.”은 지워지므로 변형이 필요하다. 따라서 REMOTE_ADDR이라는 쿠키를 만들고 값을 “112277…00…00…1”이라고 설정하면 ip에 127.0.0.1이 들어가면서 문제가 풀린다.
2020.06.27
no image
webhacking.kr challenge 23
※ 작년 말 ~ 올해 초에 작성한 라이트업으로 사이트 개편 전의 문제가 섞여있습니다. ※ 23번 문제에 들어가니 alert(1); 명령을 실행시켜서 1이 출력되면 문제가 풀리는 것을 확인할 수 있다. 먼저 alert(1);를 그대로 입력하니 ‘no hack’이 출력되었다. 어떤 상황에서 ‘no hack’이 출력되는지 확인하기 위해 여러 값을 입력해보았다. 일단 1212라는 숫자를 입력했더니 1212가 그대로 출력되었다. 그 다음으로는 아무 문자열이나 입력해보았더니 ‘no hack’이 출력되었다. 다음으로 0x를 입력했더니 그대로 출력이 되었다. 이것을 통해 연속된 문자열은 걸러지는 것을 확인할 수 있다. 예측한 대로 ‘a b’라고 공백을 주어서 입력하니 문자열이 그대로 출력되었다. 역시 따로 필터링 되지..
2020.06.27
no image
webhacking.kr challenge 20
※ 작년 말 ~ 올해 초에 작성한 라이트업으로 사이트 개편 전의 문제가 섞여있습니다. ※ script의 ck 함수를 살펴보면 lv5frm.id.value와 lv5frm.cmt.value, lv5frm.captcha.value의 값이 공백이 아니고, lv5frm.captcha.value의 값이 lvm5frm.captcha_.value와 동일하면 lv5frm.submit()이 되면서 문제가 풀린다. chaptcha의 값이 새로 고침을 할 때마다 바뀌고, 2초의 time limit가 있기 때문에 콘솔 창을 이용해서 2초 안에 위의 코드를 입력하면 문제가 풀린다.
2020.06.26
no image
webhacking.kr challenge 19
※ 작년 말 ~ 올해 초에 작성한 라이트업으로 사이트 개편 전의 문제가 섞여있습니다. ※ 풀이 1. admin을 입력하면 ‘you are not admin’이라고 뜨고, 그 외의 문자를 입력하면 정상적으로 로그인이 된다. 따라서 admin이라는 값을 우회해야 한다. 입력 창에는 최대 5글자만 입력이 가능하므로 주소창을 통해서 직접 값을 전달한다. ?id=admin으로 입력을 하되, admin 사이에 ‘%09’로 공백을 주어 입력하면 문제가 풀린다. 풀이 2. a를 입력했을 때와 aa를 입력했을 때의 base 64 값과 쿠키 값이다. 이를 살펴보면 입력 값의 한 알파벳 마다의 base 64 값이 쿠키의 값으로 들어가는 것을 확인할 수 있다. 따라서 admin을 구성하는 알파벳의 base 64 값을 구하여 ..
2020.06.26
no image
webhacking.kr challenge 18
※ 작년 말 ~ 올해 초에 작성한 라이트업으로 사이트 개편 전의 문제가 섞여있습니다. ※ 문제 하단의 ‘index.phps’를 클릭하면 하단의 코드가 나온다. if($_GET[no]) { if(eregi(" |/|\(|\)|\t|\||&|union|select|from|0x",$_GET[no])) exit("no hack"); $q=@mysql_fetch_array(mysql_query("select id from challenge18_table where id='guest' and no=$_GET[no]")); if($q[0]=="guest") echo ("hi guest"); if($q[0]=="admin") { @solve(); echo ("hi admin!"); } } get 방식으로 no의 값을..
2020.06.26
no image
webhacking.kr challenge 17
※ 작년 말 ~ 올해 초에 작성한 라이트업으로 사이트 개편 전의 문제가 섞여있습니다. ※ 소스코드를 살펴보면 unlock이라는 복잡한 식이 있고, unlock과 일치하는 값을 입력할 경우 문제가 풀린다. 따라서 alert(unlock)으로 unlock 값을 확인한 후 그 값을 입력한다.
2020.06.26

※ 작년 말 ~ 올해 초에 작성한 라이트업으로 사이트 개편 전의 문제가 섞여있습니다.  ※ 

 

 

 

웹 해킹 26번을 클릭하면 다음과 같은 화면이 뜬다.

 

 

if(preg_match("/admin/",$_GET['id'])) { echo"no!"; exit(); }
$_GET['id'] = urldecode($_GET['id']);
if($_GET['id'] == "admin"){
   solve(26);

}

 

View-source를 클릭하여 보면 다음과 같은 코드가 보인다. 코드를 해석해보면, idadmin일 때 ‘no!’ 를 띄우고, iddecode 했을 때 admin이 나오면 문제가 풀린다.

 

 

일단 ‘?id=admin’으로 id admin이라는 값을 보내면 코드에 나온 것처럼 다음과 같이 ‘no!’ 라고 뜬다.

 

 

아스키 코드 표이다. 표를 참고해서 admin을 아스키 값으로 바꾼 후 입력해보자.

 

 

’?id=%61%64%6D%69%6E’ 라고 입력한 후 엔터를 누르면 값이 자동으로 admin으로 바뀌어서 전송이 된다. 구글링을 해보니 아래와 같은 이유 때문이었다.

 

 

서버와 브라우저 사이에서 데이터 교환 브라우저는 폼에서 입력 받은 데이터를 자동으로 

인코딩한 값을 PHP서버로 보내고 PHP 받은 인코딩 값을 자동으로 디코딩한다.

 

 

  인코딩이 한 번 자동으로 진행되므로 admin을 인코딩한 값을 한번 더 인코딩해준다.

 

 

한번 더 인코딩한 값을 입력해주면 문제가 풀린다.

728x90

'CTF > 웹 해킹' 카테고리의 다른 글

webhacking.kr challenge 32  (0) 2020.06.27
webhacking.kr challenge 27  (0) 2020.06.27
webhacking.kr challenge 25  (0) 2020.06.27
webhacking.kr challenge 24  (0) 2020.06.27
webhacking.kr challenge 23  (0) 2020.06.27

※ 작년 말 ~ 올해 초에 작성한 라이트업으로 사이트 개편 전의 문제가 섞여있습니다.  ※ 

 

 

 문제에 들어가면 파일 구조를 보여준다. flag.php, hello.php, index.php가 존재하며 hello“hello”를 출력하고, index는 아무 것도 출력하지 않으며 flag“FLAG is in the code”라고 출력한다.

 

 

 

 “php://filter/convert.base64-encode/resource=flag” 입력하면 flag 파일의 모든 코드를 base64로 출력한다.

 

 

출력된 문장을 base64로 디코딩하면 flag가 출력되고, 이를 입력하면 문제가 풀린다.

 

728x90

'CTF > 웹 해킹' 카테고리의 다른 글

webhacking.kr challenge 27  (0) 2020.06.27
webhacking.kr challenge 26  (0) 2020.06.27
webhacking.kr challenge 24  (0) 2020.06.27
webhacking.kr challenge 23  (0) 2020.06.27
webhacking.kr challenge 20  (0) 2020.06.26

※ 작년 말 ~ 올해 초에 작성한 라이트업으로 사이트 개편 전의 문제가 섞여있습니다.  ※ 

 

 

 

 쿠키의 REMTE_ADDRip가 되므로 “127.0.0.1”을 입력해야 한다. 하지만 “..”“.”으로, “12”, “7.”, “0.”은 지워지므로 변형이 필요하다. 따라서 REMOTE_ADDR이라는 쿠키를 만들고 값을 “112277…00…00…1”이라고 설정하면 ip127.0.0.1이 들어가면서 문제가 풀린다.

 

 

728x90

'CTF > 웹 해킹' 카테고리의 다른 글

webhacking.kr challenge 26  (0) 2020.06.27
webhacking.kr challenge 25  (0) 2020.06.27
webhacking.kr challenge 23  (0) 2020.06.27
webhacking.kr challenge 20  (0) 2020.06.26
webhacking.kr challenge 19  (0) 2020.06.26

※ 작년 말 ~ 올해 초에 작성한 라이트업으로 사이트 개편 전의 문제가 섞여있습니다.  ※ 

 

 

 

 23번 문제에 들어가니 <script>alert(1);</alert> 명령을 실행시켜서 1이 출력되면 문제가 풀리는 것을 확인할 수 있다.

 

 

먼저 <script>alert(1);</alert>를 그대로 입력하니 ‘no hack’이 출력되었다.

 

  

 어떤 상황에서 ‘no hack’이 출력되는지 확인하기 위해 여러 값을 입력해보았다. 일단 1212라는 숫자를 입력했더니 1212가 그대로 출력되었다.

  

 

 그 다음으로는 아무 문자열이나 입력해보았더니 ‘no hack’이 출력되었다.

 

  

 다음으로 0x를 입력했더니 그대로 출력이 되었다. 이것을 통해 연속된 문자열은 걸러지는 것을 확인할 수 있다.

 

  

 예측한 대로 ‘a b’라고 공백을 주어서 입력하니 문자열이 그대로 출력되었다.

 

  

<> 역시 따로 필터링 되지 않고 출력되었다.

 

 

 문제를 풀기 위해서 ‘<s c r i p t>a l e r t(1);</s c r i p t>’ 라고 공백을 두어서 입력했다. ‘no hack’이 출력되지는 않았지만 문제가 풀리지 않고 alert(1)에 줄이 그어져서 출력되었다.

 

 

 주소창에서 %20 %0a로 바꿔서 ’<s%0ac%0ar%0ai%0ap%0at>a%0al%0ae%0ar%0at(1);</s%

0ac%0ar%0ai%0ap%0at>’라고 입력했지만 여전히 문제가 해결되지 않았다.

 

 

 검색을 해보니 이 문제의 경우 %00(null)을 사이에 넣어줘야 한대서 ‘<s%00c%00r%00i%00p%00

t>a%00l%00e%00r%00t(1);</s%00c%00r%00i%00p%00t>’라고 입력하니 문제가 풀렸다.

 

728x90

'CTF > 웹 해킹' 카테고리의 다른 글

webhacking.kr challenge 25  (0) 2020.06.27
webhacking.kr challenge 24  (0) 2020.06.27
webhacking.kr challenge 20  (0) 2020.06.26
webhacking.kr challenge 19  (0) 2020.06.26
webhacking.kr challenge 18  (0) 2020.06.26

※ 작년 말 ~ 올해 초에 작성한 라이트업으로 사이트 개편 전의 문제가 섞여있습니다.  ※ 

 

 

 

 scriptck 함수를 살펴보면 lv5frm.id.value lv5frm.cmt.value, lv5frm.captcha.value의 값이 공백이 아니고, lv5frm.captcha.value의 값이 lvm5frm.captcha_.value와 동일하면 lv5frm.submit()이 되면서 문제가 풀린다. chaptcha의 값이 새로 고침을 할 때마다 바뀌고, 2초의 time limit가 있기 때문에 콘솔 창을 이용해서 2초 안에 위의 코드를 입력하면 문제가 풀린다.

 

 

 

728x90

'CTF > 웹 해킹' 카테고리의 다른 글

webhacking.kr challenge 24  (0) 2020.06.27
webhacking.kr challenge 23  (0) 2020.06.27
webhacking.kr challenge 19  (0) 2020.06.26
webhacking.kr challenge 18  (0) 2020.06.26
webhacking.kr challenge 17  (0) 2020.06.26

※ 작년 말 ~ 올해 초에 작성한 라이트업으로 사이트 개편 전의 문제가 섞여있습니다.  ※ 

 

 

 

풀이 1. 

 admin 입력하면 ‘you are not admin’이라고 뜨고, 그 외의 문자를 입력하면 정상적으로 로그인이 된다. 따라서 admin이라는 값을 우회해야 한다.

 

 

입력 창에는 최대 5글자만 입력이 가능하므로 주소창을 통해서 직접 값을 전달한다. ?id=admin으로 입력을 하되, admin 사이에 ‘%09’로 공백을 주어 입력하면 문제가 풀린다.

 

 

 

 

풀이 2. 

 

a를 입력했을 때와 aa를 입력했을 때의 base 64 값과 쿠키 값이다. 이를 살펴보면 입력 값의 한 알파벳 마다의 base 64 값이 쿠키의 값으로 들어가는 것을 확인할 수 있다. 

 

 

따라서 admin을 구성하는 알파벳의 base 64 값을 구하여 모두 합쳐준다. 

 

 

그 다음 그 값을 base 64로 돌려준다. 이 결과가 쿠키 값이 된다. 

 

 

728x90

'CTF > 웹 해킹' 카테고리의 다른 글

webhacking.kr challenge 23  (0) 2020.06.27
webhacking.kr challenge 20  (0) 2020.06.26
webhacking.kr challenge 18  (0) 2020.06.26
webhacking.kr challenge 17  (0) 2020.06.26
webhacking.kr challenge 16  (0) 2020.06.26

※ 작년 말 ~ 올해 초에 작성한 라이트업으로 사이트 개편 전의 문제가 섞여있습니다.  ※ 

 

 

 

 

문제 하단의 ‘index.phps’를 클릭하면 하단의 코드가 나온다.

 

 

 

if($_GET[no]) 
{ 


if(eregi(" |/|\(|\)|\t|\||&|union|select|from|0x",$_GET[no])) exit("no hack"); 

$q=@mysql_fetch_array(mysql_query("select id from challenge18_table where id='guest' and no=$_GET[no]")); 

if($q[0]=="guest") echo ("hi guest"); 
if($q[0]=="admin") 
{ 
@solve(); 
echo ("hi admin!"); 
} 

} 

 

 get 방식으로 no의 값을 받으면 아래의 코드들이 실행되게 된다. 그리고 만약 입력 받은 값에 공백, /, \(, \), \t, |, &, union, select, from, 0x 등의 문자열이 있을 경우 exit에 의해 종료된다. 그리고 쿼리문의 결과 데이터를 배열 형식으로 저장해서 배열의 첫번째 데이터가 “admin”이라면 문제가 풀리게 된다. 임의로 숫자를 대입해보자.

       

 

임의로 0, 1, 2를 대입해보았다. 주소에 no=0, no=1, no=2 형식으로 들어가게 되고, 1을 대입했을 때 ‘hi guest’라고 뜨는 것을 볼 수 있다. select id from challenge18_table (where((id=’guest’) and (no=1)))이라는 쿼리문이 실행되면 q[0]guest라는 문자열이 저장되는 것이다. 그렇다면 특정 no 값에 ‘admin’ 데이터를 담고 있을 것이다. 이때 공백을 넣을 경우 조건문이 종료되므로 공백을 무시하는 ‘%0a’를 사용해야 한다.

 

 

 

no=2%0aor%0ano=2를 입력하면 idguest이고 no=2이거나(거짓, 1을 제외한 아무 값이나 넣어도 된다.), no2인 값을 쿼리문에 저장하게 된다. no=2인 값에 ‘admin’ 데이터를 담고있는 것이다.

728x90

'CTF > 웹 해킹' 카테고리의 다른 글

webhacking.kr challenge 20  (0) 2020.06.26
webhacking.kr challenge 19  (0) 2020.06.26
webhacking.kr challenge 17  (0) 2020.06.26
webhacking.kr challenge 16  (0) 2020.06.26
webhacking.kr challenge 15  (0) 2020.06.26

※ 작년 말 ~ 올해 초에 작성한 라이트업으로 사이트 개편 전의 문제가 섞여있습니다.  ※ 

 

 

 

 소스코드를 살펴보면 unlock이라는 복잡한 식이 있고, unlock과 일치하는 값을 입력할 경우 문제가 풀린다.

 

 

 

 따라서 alert(unlock)으로 unlock 값을 확인한 후 그 값을 입력한다.

 

 

728x90

'CTF > 웹 해킹' 카테고리의 다른 글

webhacking.kr challenge 19  (0) 2020.06.26
webhacking.kr challenge 18  (0) 2020.06.26
webhacking.kr challenge 16  (0) 2020.06.26
webhacking.kr challenge 15  (0) 2020.06.26
webhacking.kr challenge 14  (0) 2020.06.26