33-1
<?php
if($_GET['get']=="hehe") echo "<a href=???>Next</a>"; //URL 파라미터 get의 값에 hehe대입
else echo("Wrong");
?>
주소창에 https://webhacking.kr/challenge/bonus-6/?get=hehe 입력하면 Next 링크 나옴
33-2
<?php
if($_POST['post']=="hehe" && $_POST['post2']=="hehe2") echo "<a href=???>Next</a>";
//post 방식으로 post 키에 hehe 값 설정, post2 키에 hehe2값 설정. BURP SUITE 이용
else echo "Wrong";
?>
https://webhacking.kr/challenge/bonus-6/lv2.php 해당 웹페이지를 BURP SUITE를 이용해 잡는다.
그럼 GET 방식으로 웹페이지를 요청하게 되는데 우린 POST 방식으로 데이터를 전송해야된다. 따라서 BURP SUITE 화면에서 intercept한 요청 메시지 아무 곳이나 우클릭한 후 Change request method 클릭하여 POST 방식으로 요청을 바꾼다. 그러면 POST 요청으로 바뀌고 Content-Type과 Content-Length가 생성된다. Content-Length는 0으로 해도 상관없더라. Content-Type은 여러 유형이 있는데 대표적으로 다음과 같다.
- application/x-www-form-urlencoded = BODY에 key와 value 쌍으로 데이터를 넣고, 여러 key가 존재하면 &로 구분.
- text/plain = text
- multipart/form-data = 파일전송을 할 때 많이 쓰이며 바이너리 데이터 의미.
그리고나서 POST 방식에서 데이터를 보낼때처럼 post=hehe &post2=hehe2를 입력한다. HTTP 프로토콜에서는 요청 헤더로부터 2줄 아래에서부터 Body로 인식한다. 그 결과 Next 링크가 나온다.
33-3
<?php
if($_GET['myip'] == $_SERVER['REMOTE_ADDR']) echo "<a href=???>Next</a>";
else echo "Wrong";
?>
myip 키에 공인 ip(내 공유기 인터넷 ip)를 대입하여 get 방식으로 보낸다. 내 인터넷 ip는 구글에 '내 ip' 검색해도 되고 주소창에 192.168.1.1입력해서 공유기 설정에 접속해도 나온다.
https://webhacking.kr/challenge/bonus-6/33.php?myip=175.207.52.81
33-4
<?php
if($_GET['password'] == md5(time())) echo "<a href=???>Next</a>";
else echo "hint : ".time();
?>
현재시간(unix 시간)의 md5 해시값을 password 키에 대입하여 get 방식으로 보낸다. 난 python 코드를 썼는데 간단하게 몇 초 뒤의 unix시간을 온라인의 md5 hash generator를 이용해 해시값을 구한 후 URL 창에 설정해서 새로고침 하다보면 Next 링크가 뜬다. 시간상 이미 앞선 문제들에서 해왔던 간단한 작업이기에 상세한 풀이는 생략하겠다.
33-5
<?php
if($_GET['imget'] && $_POST['impost'] && $_COOKIE['imcookie']) echo "<a href=???>Next</a>";
else echo "Wrong";
?>
get 방식으로도 데이터를 보내야하고 post 방식으로도 데이터를 보내야하고 cookie 값도 설정해야한다. BURP SUITE를 사용하면 한번에 처리할 수 있다.
33-2에서 했던 것처럼 Change request method를 이용해 post 방식으로 바꾸고 get 방식 데이터 전달, post 방식 데이터 전달 & cookie 설정했다. Next 링크가 나온다.
33-6
<?php
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']}";
?>
test이름의 쿠키에 공인 ip의 md5 해시값을 설정하고 post 방식으로 kk 키에 내 브라우저 정보의 md5 해시값을 설정해서 전송하면된다. 내 브라우저 정보는 33-6 문제에 처음 접속하면 hint: ~~~라고 나온다. 이미 33번 문제의 앞단계에서 풀어본 방식이기에 직접 할 수 있을 것이다.
33-7
<?php
$_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']];
?>
내 공인 ip에서 '.' 을빼면 숫자만 남을 것이다. get방식으로 '.을 뺀 내 공인 ip' 키 값에 '.을 뺀 내 공인 ip'를 설정해서 보내면 된다. ex) ?123456789=123456789 즉, key와 value가 같다.
33-8
<?php
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 키에 127.0.0.1을 설정해서 보내면 된다.
33-9
<?php
for($i=97;$i<=122;$i=$i+2){
$answer.=chr($i);
}
if($_GET['ans'] == $answer) echo "<a href=???.php>Next</a>";
else echo "Wrong";
?>
chr 함수는 아스키코드에 해당하는 문자를 반환한다. 97은 'a'이다. 122는 'z'이다. 그리고 i는 2씩 증가한다. 따라서 a,c,e,g,...,y가 answer의 끝에 추가된다. get 방식으로 ans 키에 aceg(생략)y를 설정해서 보내면 된다.
33-10
<?php
$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);
$answer = $ip*2;
$answer = $ip/2;
$answer = str_replace(".","",$answer);
$f=fopen("answerip/{$answer}_{$ip}.php","w");
fwrite($f,"<?php include \"../../../config.php\"; solve(33); unlink(__FILE__); ?>");
fclose($f);
?>
내 공인 ip길이+1 번 공인 ip의 숫자를 0부터 공인 ip길이값까지 아스키코드로 바꾸는 작업을 수행한다.
공인 ip에서 '.' 제거
앞에서 부터 숫자 10자리 추출. 이 때의 값이 ip변수에 저장.
추출한 값에 *2
다시 /2. 이때 소수가 될 수 있음.
'.' 제거. 이 때의 값이 answer변수에 저장.
현재 디렉토리에서 answerip/answer변수_ip변수.php 파일을 생성하여 fwrite를 이용해 코드 입력하고 닫음.
즉, 생성한 파일을 실행하면 문제가 풀림. 난 귀찮아서 내 서버에 php 코드를 돌려서 결과값을 확인했다.
https://webhacking.kr/challenge/bonus-6/answerip/answer변수_ip변수.php 를 주소창에 입력하면 끝.
'webhacking.kr' 카테고리의 다른 글
old-02 (0) | 2023.02.06 |
---|---|
old-01 (0) | 2023.02.06 |
webhacking 32 (0) | 2022.12.21 |
webhacking 31 (0) | 2022.12.21 |
webhacking 29(SQL Injection) (0) | 2022.12.19 |