webhacking.kr 59번 풀이

 

문제 접속 : http://webhacking.kr/challenge/web/web-36/index.php


문제 페이지 접속 시 화면

 

소스를 확인해보면 JOIN을 통하여 id, phone 정보를 입력하여 권한을 삽입하고, LOGIN시 입력한 id, phone 정보로 admin 권한(lv)을 획득해야 한다.

 

http://webhacking.kr/challenge/web/web-36/index_readmmme.phps

<?

 

if($_POST[lid] && $_POST[lphone])

{

$q=@mysql_fetch_array(mysql_query("select id,lv from c59 where id='$_POST[lid]' and phone='$_POST[lphone]'"));

 

if($q[id])

{

 

echo("id : $q[id]<br>lv : $q[lv]<br><br>");

 

if($q[lv]=="admin")

{

@mysql_query("delete from c59");

@clear();

}

 

echo("<br><a href=index.php>back</a>");

exit();

}

 

}

 

 

if($_POST[id] && $_POST[phone])

{

if(strlen($_POST[phone])>=20) exit("Access Denied");

if(eregi("admin",$_POST[id])) exit("Access Denied");

if(eregi("admin|0x|#|hex|char|ascii|ord|from|select|union",$_POST[phone])) exit("Access Denied");

 

@mysql_query("insert into c59 values('$_POST[id]',$_POST[phone],'guest')");

}

 

?>

<html><head><title>Challenge 59</title></head><body>

<form method=post action=index.php>

<table border=1>

<tr><td>JOIN</td><td><input name=id></td><td><input name=phone></td><td><input type=submit></td></tr>

<tr><td>LOGIN</td><td><input name=lid></td><td><input name=lphone></td><td><input type=submit></td></tr>

</form>

</body></html>

 

아래 구문을 조작하여 admin 권한을 입력해야 되는 문제로 SQL Injection이 필요하다.

mysql_query("insert into c59 values('$_POST[id]',$_POST[phone],'guest')");

 

SQL Injection 적용을 확인한다.

 

JOIN LOGIN 결과 정상적으로 SQL이 입력되었음을 알 수 있다.

 

아래 구문의 사용이 필터링 되어 lv admin을 삽입할 수 없으나 SQL reverse function을 사용하여 이를 우회할 수 있다.

admin|0x|#|hex|char|ascii|ord|from|select|union

 

reverse function은 입력값을 역순으로 출력한다.

reverse(dcba) 입력시 abcd 출력

 

 

결국 다음의 값을 JOIN으로 입력한다.

nimda / 1,reverse(id))--입력

 

nimda로 로그인

 

Level clear



 



















 

webhacking.kr 56번 문제


문제 접속 : http://webhacking.kr/challenge/web/web-33/index.php

해당 URL에 접속을 하면 게시판에 게시물이 2개 있다.

 

guest가 작성한 게시물을 클릭하면 게시물 내용으로 “hi~”를 확인할 수 있다.

 

 

 

admin이 작성한 게시물을 읽을 경우 “access denied” 발생

결국, 해당 문제는 admin이 작성한 게시물 내용에 정답이 있을 것으로 추정된다.

 

search 기능이 있어서 확인 해보니 a 문자 검색 시 결과 없음

 

 

 

 

 

여러 번 시도 후 k 문자 검색 시 admin 게시물만 검색된다.

, admin이 작성한 게시물 내용에 k 문자가 포함되어 있다는 의미이고,

해당 쿼리는 다음과 같은 조건으로 이루어져있다고 생각해볼 수 있다.

select * from board where body like ‘%$search%’

 


여러가지 조건을 주어서 확인한 결과 k, p, h, . 에서 해당 게시물이 검색되었다.

또한 kk의 경우 게시물이 검색되었으나

 

 

 

kp의 경우 게시물이 검색되지 않았다.

 

총 게시물 내용의 길이는 “kk____”를 입력하여 6자리임을 알아내었고,

 

유추해본 결과 게시물 내용이 “kk.php”로 추정되어 URL에 입력해보니 해당 문제 Clear

SQL LIKE 구문에서 _의 의미는 문자 하나에 대한 임의의 값을 지정할 수 있는 구문이다

like ‘k_’일 경우 ka, kB, k! 처럼 임의의 한 문자만 대입 가능하다.

 

 



webhacking.kr 23번 풀이

 

문제 접속 : http://webhacking.kr/challenge/bonus/bonus-3/

 

이번 문제는 Input Tag <script>alert(1);</script>를 삽입하면 된다.

 

a를 입력하면 a가 출력된다.


ab를 입력하니 no hack 출력

 

a<>를 입력하면 a<> 정상 출력

 

결국 몇 번의 테스트로 확인한 것은 문자를 2개 연속으로 입력할 경우 “no hack” 발생.

하지만 문자와 문자 사이에 NULL(%00) 값을 입력할 경우 필터링을 우회할 수 있다.

<s%00c%00r%00i%00p%00t>를 삽입한 결과 “no hack”이 발생하지 않는 것을 확인하였다.

 

<script>alert(1);</script>구문에서 문자와 문자 사이에 NULL(%00) 값을 입력하여 해당 필터링을 우회하면 해당 문제 Clear가 가능하다.


webhacking.kr 1번 문제 풀이


webhacking.kr 의 첫번째 문제..


문제접속 : http://webhacking.kr/index.php?mode=challenge&no=1

다음과 같은 화면이 나타난다.


URL 메뉴에 링크가 걸려있어서 클릭하면 다음 페이지로 연결된다.

http://webhacking.kr/challenge/web/web-01/


index.phps 클릭 시 해당문제의 소스가 제공된다.

http://webhacking.kr/challenge/web/web-01/index.phps

 

<?

if(!$_COOKIE[user_lv])

{

SetCookie("user_lv","1");

echo("<meta http-equiv=refresh content=0>");

}

?>

<html>

<head>

<title>Challenge 1</title>

</head>

<body bgcolor=black>

<center>

<br><br><br><br><br>

<font color=white>

---------------------<br>

<?

 

$password="????";

 

if(eregi("[^0-9,.]",$_COOKIE[user_lv])) $_COOKIE[user_lv]=1;

 

if($_COOKIE[user_lv]>=6) $_COOKIE[user_lv]=1;

 

if($_COOKIE[user_lv]>5) @solve();

 

echo("<br>level : $_COOKIE[user_lv]");

 

?>

<br>

<pre>

<a onclick=location.href='index.phps'>----- index.phps -----</a>

</body>

</html>

 

소스를 봤을 때 해당 문제는 Cookie 조작 문제임을 알 수 있다.

 

소스 중 핵심 구문을 살펴보면 다음과 같다.

 1) 숫자 , . 만 허용한다.

if(eregi("[^0-9,.]",$_COOKIE[user_lv])) $_COOKIE[user_lv]=1;

 

2) Cookie 변수 user_lv 6이상이면 user_lv 1이고

User_lv 5를 초과할 경우 level1을 통과할 수 있다.

if($_COOKIE[user_lv]>=6) $_COOKIE[user_lv]=1;

if($_COOKIE[user_lv]>5) @solve();

 

결국 5초과, 6미만의 값을 넣으면 된다.

해당 소스에서 피리어드(.)의 입력이 가능하므로 5.5를 입력하도록 하자

 

Cookie를 조작하여 user_lv 값으로 5.5를 입력한다.


Congraturation과 함께 level 통과 및 200점 획득



level clear!!



webhacking.kr 25번 문제 풀이


이번 문제는 간단한 javascript 우회 문제이다.


문제 접속 : http://webhacking.kr/challenge/javascript/js2.html

Level 15로 접속하면 Access_Denied Alert이 발생하고 return 된다.


js2.html 소스 화인이 필요하여 chrome view-source로 해당 페이지 소스 확인

view-source:http://webhacking.kr/challenge/javascript/js2.html



소스 확인 결과 off_script가 이번 문제의 패스워드이다.

http://webhacking.kr/index.php?mode=auth 로 가서 획득한 패스워드를 입력하면 성공



다음과 같이 level clear를 확인할 수 있음








최초 작성일 : 2014/09/13


webhacking.kr 25번 문제 풀이


문제 접속 : http://webhacking.kr/challenge/bonus/bonus-5/?file=hello

문제 사이트에 접속을 하면
hello.txt, index,php, password.php 가 보여지고
hello world 라는 문자열을 확인할 수 있다.



해당 화면을 유추해보면 hello world는 hello.txt 파일의 내용으로 생각되고,
password.php 파일 안에 이번 문제의 패스워드가 저장되어 있을 것이다.

접속 URL에 ?file=hello 인 것으로 보아 .txt 확장자를 붙여서 파일 내용을 읽는 것으로 보인다.
그럼 file=password 를 하면 password.txt 파일을 읽을 것이고

file=password.php를하면 password.php.txt 파일을 읽게 될 것이다.
결국 password.php 파일을 읽기 위해서는 확장자 .txt를 제거해야 한다.

php에서 종료문자(%00)를 사용하면, 이후의 문자열들은 무시된다.
결국 다음과 같이 종료문자를 삽입하면
http://webhacking.kr/challenge/bonus/bonus-5/?file=password.php%00
php에서는 "password.php%00.txt" 형태로 읽어 들이게 되고 종료문자 이후는 무시되므로
password.php 파일을 읽어 들이게 된다.



Auth 메뉴로 가서 패스워드 입력



 level clear










+ Recent posts