본문 바로가기
웹 해킹/webhacking.kr

webhacking.kr 33번

by sonysame 2018. 2. 11.

처음 소스는 다음과 같다.


<hr>
Challenge 33-1<br>
<script>document.write("<a href=http://webhacking.kr<?=$_SERVER[PHP_SELF]?>s><?=$_SERVER[PHP_SELF]?>s</a>");</script>
<hr>

<?

if($_GET[get]=="hehe")
{
echo(
"<a href=###>Next</a>");
}
else
{
echo(
"Wrong");
}
?>



$_SERVER[PHP_SELF]는 실행되고 있는 파일의 경로를 의미한다.


$_GET[get]="hehe"이 되어야 하므로

?get=hehe를 URL로 준다!


<hr>
Challenge 33-2<br>
<script>document.write("<a href=http://webhacking.kr<?=$_SERVER[PHP_SELF]?>s><?=$_SERVER[PHP_SELF]?>s</a>");</script>
<hr>

<?

if($_POST[post]=="hehe" && $_POST[post2]=="hehe2")
{
echo(
"<a href=##>Next</a>");
}
else
{
echo(
"Wrong");
}
?>

스크립트를 짠 후, post인자로 post:hehe, post2:hehe2를 주고 쿼리를 날린다!

# -*- coding: utf-8 -*-

import requests


def main():

    ID=raw_input("id: ")

    PW=raw_input("pw: ")

    cookie=login(ID,PW)

    print(cookie)


    form={'post':"hehe",'post2':"hehe2"}

    

    #post 로 로그인

    try:

#쿼리를 날린다.

        result=requests.post('http://webhacking.kr/challenge/bonus/bonus-6/lv2.php',data=form,cookies=cookie)

        print("쿼리 전송 !")

    except:

        print("Error !")

        exit()


    print("Complete!")

    print(result.text)

def login(ID, PW):

    form={'id':ID,'pw':PW}

    print(form)


    #post 로 로그인

    result=requests.post('http://webhacking.kr?enter=1',data=form)

#    print(result.text)


    #로그인 실패 시에 나오는 특정 문자열을 검색

    if(result.text.find("===========================================")!=-1):

        print("Login Fail!")

        exit()


    #로그인 성공 시 cookies를 반환

    

    else:

        print(result.headers.get('set-cookie'))

    cookie=result.headers.get('set-cookie')

        print('id : '+form['id']+'\tLogin Success !');

        max=cookie.index('=',0)

max2=cookie.index(';',max+1)


#        세션 이름 : 세션값의 형태로 cookies에 저장

        cookies={cookie[0:max]:cookie[max+1:max2]}

print(cookies)

        return cookies


if(__name__=="__main__"):

    main()

                


<hr>

Challenge 33-2<br>

<script>document.write("<a href=http://webhacking.kr/challenge/bonus/bonus-6/lv2.phps>/challenge/bonus/bonus-6/lv2.phps</a>");</script>

<hr>


<a href=33.php>Next</a>



<hr>
Challenge 33-3<br>
<script>document.write("<a href=http://webhacking.kr<?=$_SERVER[PHP_SELF]?>s><?=$_SERVER[PHP_SELF]?>s</a>");</script>
<hr>

<?

if($_GET[myip]==$_SERVER[REMOTE_ADDR])
{
echo(
"<a href=##.php>Next</a>");
}
else
{
echo(
"Wrong");
}
?>



$_SERVER[REMOTE_ADDR]=사용자가 현재 페이지를 보고 있는 시스템의 IP 주소 


121.139.96.245


<hr>
Challenge 33-4<br>
<script>document.write("<a href=http://webhacking.kr<?=$_SERVER[PHP_SELF]?>s><?=$_SERVER[PHP_SELF]?>s</a>");</script>
<hr>

<?

if($_GET[password]==md5(time()))
{
echo(
"<a href=###>Next</a>");
}
else
{
echo(
"hint : ".time());
}
?>

# -*- coding: utf-8 -*-

import requests

import hashlib


m=hashlib.md5()

def main():

    ID=raw_input("id: ")

    PW=raw_input("pw: ")

    cookie=login(ID,PW)

    print(cookie)

    query1='http://webhacking.kr/challenge/bonus/bonus-6/l4.php'

   

    try:

    #쿼리를 날린다.

        result=requests.get(query1, cookies=cookie)

        print("쿼리 전송 !")

    except:

        print("Error !")

        exit()

    print(result.text)

    max=result.text.index('hint : ',0)

    a=result.text[max+7:max+17]

    a=str(int(a)+3)

    print(a)

    a=hashlib.md5(a).hexdigest()

    print(a)

    for i in range(1,10):

        query2='http://webhacking.kr/challenge/bonus/bonus-6/l4.php?password={0}'.format(a)

result=requests.get(query2, cookies=cookie)

        print(result.text)


    

    print("Complete!")


def login(ID, PW):

    form={'id':ID,'pw':PW}

    print(form)


    #post 로 로그인

    result=requests.post('http://webhacking.kr?enter=1',data=form)

#    print(result.text)


    #로그인 실패 시에 나오는 특정 문자열을 검색

    if(result.text.find("===========================================")!=-1):

        print("Login Fail!")

        exit()


    #로그인 성공 시 cookies를 반환

    

    else:

        print(result.headers.get('set-cookie'))

    cookie=result.headers.get('set-cookie')

        print('id : '+form['id']+'\tLogin Success !');

        max=cookie.index('=',0)

max2=cookie.index(';',max+1)


#        세션 이름 : 세션값의 형태로 cookies에 저장

        cookies={cookie[0:max]:cookie[max+1:max2]}

        return cookies


if(__name__=="__main__"):

    main()

                



<hr>

Challenge 33-5<br>
<script>document.write("<a href=http://webhacking.kr<?=$_SERVER[PHP_SELF]?>s><?=$_SERVER[PHP_SELF]?>s</a>");</script>
<hr>

<?

if($_GET[imget] && $_POST[impost] && $_COOKIE[imcookie])
{
echo(
"<a href=###>Next</a>");
}
else
{
echo(
"Wrong");
}
?>
# -*- coding: utf-8 -*-
import requests

def main():
    ID=raw_input("id: ")
    PW=raw_input("pw: ")
    cookie=login(ID,PW)
    cookie['imcookie']='1'
    print(cookie)
       
    form={'impost':"1"}
    
    #post 로 로그인
    try:
#쿼리를 날린다.
        result=requests.post('http://webhacking.kr/challenge/bonus/bonus-6/md555.php?imget=1',data=form,cookies=cookie)
        print("쿼리 전송 !")
    except:
        print("Error !")
        exit()

    print("Complete!")
    print(result.text)
def login(ID, PW):
    form={'id':ID,'pw':PW}
    print(form)

    #post 로 로그인
    result=requests.post('http://webhacking.kr?enter=1',data=form)
#    print(result.text)

    #로그인 실패 시에 나오는 특정 문자열을 검색
    if(result.text.find("===========================================")!=-1):
        print("Login Fail!")
        exit()

    #로그인 성공 시 cookies를 반환
    
    else:
        print(result.headers.get('set-cookie'))
    cookie=result.headers.get('set-cookie')
        print('id : '+form['id']+'\tLogin Success !');
        max=cookie.index('=',0)
max2=cookie.index(';',max+1)

#        세션 이름 : 세션값의 형태로 cookies에 저장
        cookies={cookie[0:max]:cookie[max+1:max2]}
        return cookies

if(__name__=="__main__"):
    main()
                





<hr>
Challenge 33-6<br>
<script>document.write("<a href=http://webhacking.kr<?=$_SERVER[PHP_SELF]?>s><?=$_SERVER[PHP_SELF]?>s</a>");</script>
<hr>

<?

if($_COOKIE[test]==md5("$_SERVER[REMOTE_ADDR]") && $_POST[kk]==md5("$_SERVER[HTTP_USER_AGENT]"))
{
echo(
"<a href=###>Next</a>");
}
else
{
echo(
"hint : $_SERVER[HTTP_USER_AGENT]");
}
?>


스크립트를 돌린 우분투 환경에서는 Mozila~~이 부분이 python-requests/2.18.4 였다!

# -*- coding: utf-8 -*-

import requests

import hashlib


m=hashlib.md5()

def main():

    ID=raw_input("id: ")

    PW=raw_input("pw: ")

    cookie=login(ID,PW)

    

    

    a='121.139.96.245'

    b='python-requests/2.18.4'

    a=hashlib.md5(a).hexdigest()

    b=hashlib.md5(b).hexdigest()

    

    cookie['test']=a

    query='http://webhacking.kr/challenge/bonus/bonus-6/gpcc.php'

    form={'kk':b}

    

    result=requests.post(query, cookies=cookie,data=form)

    

    print(result.text)


    

    print("Complete!")


def login(ID, PW):

    form={'id':ID,'pw':PW}

    print(form)


    #post 로 로그인

    result=requests.post('http://webhacking.kr?enter=1',data=form)

#    print(result.text)


    #로그인 실패 시에 나오는 특정 문자열을 검색

    if(result.text.find("===========================================")!=-1):

        print("Login Fail!")

        exit()


    #로그인 성공 시 cookies를 반환

    

    else:

        print(result.headers.get('set-cookie'))

    cookie=result.headers.get('set-cookie')

        print('id : '+form['id']+'\tLogin Success !');

        max=cookie.index('=',0)

max2=cookie.index(';',max+1)


#        세션 이름 : 세션값의 형태로 cookies에 저장

        cookies={cookie[0:max]:cookie[max+1:max2]}

        return cookies


if(__name__=="__main__"):

    main()

                




<hr>
Challenge 33-7<br>
<script>document.write("<a href=http://webhacking.kr<?=$_SERVER[PHP_SELF]?>s><?=$_SERVER[PHP_SELF]?>s</a>");</script>
<hr>

<?
$_SERVER
[REMOTE_ADDR]=str_replace(".","",$_SERVER[REMOTE_ADDR]);

if(
$_GET[$_SERVER[REMOTE_ADDR]]==$_SERVER[REMOTE_ADDR])
{
echo(
"<a href=###>Next</a>");
}
else
{
echo(
"Wrong<br>".$_GET[$_SERVER[REMOTE_ADDR]]);
}
?>


아니, 이 뭔 어이없는 상황이

헷갈리게 해놓고 완전 간단한 것이었다.

지금 $_SERVER[REMOTE_ADDR]=121.139.96.245인데,

str_replace를 거치고 나면 12113996245가 된다.

$_GET[$_SERVER[REMOTE_ADDR]==$_SERVER[REMOTE_ADDR]이 되어야 하므로,

$_GET[12113996245]=12113996245가 되면 된다!


하...진짜 많다!!!


<hr>
Challenge 33-8<br>
<script>document.write("<a href=http://webhacking.kr<?=$_SERVER[PHP_SELF]?>s><?=$_SERVER[PHP_SELF]?>s</a>");</script>
<hr>

<?

extract
($_GET);

if(!
$_GET[addr]) $addr=$_SERVER[REMOTE_ADDR];

if(
$addr=="127.0.0.1")
{
echo(
"<a href=###>Next</a>");
}
else
{
echo(
"Wrong");
}
?>




$_GET[addr]이 없을때만 $addr=$_SERVER[REMOTE_ADDR]이 되므로

$_GET[addr]이 존재하면 $addr을 원하는 값으로 바꿀 수 있다!


10번이면...끝나겠지....?ㅜㅜ


<hr>
Challenge 33-9<br>
<script>document.write("<a href=http://webhacking.kr<?=$_SERVER[PHP_SELF]?>s><?=$_SERVER[PHP_SELF]?>s</a>");</script>
<hr>

<?

for($i=97;$i<=122;$i=$i+2)
{
$ch=chr($i);

$answer.=$ch;

}

if(
$_GET[ans]==$answer)
{
echo(
"<a href=###>Next</a>");
}
else
{
echo(
"Wrong");
}
?>


>>> for i in range(97,123,2):

a+=chr(i)


>>> a

'acegikmoqsuwy'


<hr>

Challenge 33-10<br>
<script>document.write("<a href=http://webhacking.kr<?=$_SERVER[PHP_SELF]?>s><?=$_SERVER[PHP_SELF]?>s</a>");</script>
<hr>

<?

$ip
=$_SERVER[REMOTE_ADDR];

for(
$i=0;$i<=strlen($ip);$i++)
{
$ip=str_replace($i,ord($i),$ip);
}

$ip=str_replace(".","",$ip);

$ip=substr($ip,0,10);

@
mkdir("answerip/$ip");

$answer=$ip*2;
$answer=$ip/2;
$answer=str_replace(".","",$answer);

$pw="###";

$f=fopen("answerip/$ip/$answer.$ip","w");
fwrite($f,"Password is $pw\n\nclear ip : $_SERVER[REMOTE_ADDR]");
fclose($f);

?>



이제 끝!

'웹 해킹 > webhacking.kr' 카테고리의 다른 글

webhacking.kr 42번  (0) 2018.02.12
webhacking.kr 36번  (0) 2018.02.12
webhacking.kr 23번-XSS  (0) 2018.02.10
webhacking.kr 20번  (0) 2018.02.10
webhacking.kr 47번  (0) 2018.02.10