Webhacking.kr Challenge 24 풀이.
일단 문제를 클릭하자마자 위와 같은 화면이 등장했다.
클라이언트에는 공인 ip가 출력되에 있다.
일단 오른쪽 마우스를 클릭해 페이지 소스 보기를 누른다.
생각보다 단순하다. 소스는 index.php라고 있으니 index.php로 들어간다.
일단 코드를 해석해보겠다.
extract($_SERVER) #extract는 배열 속의 키 값을 변수화 시켜준다. 즉 $_SERVER의 값을 변수화 시키는 것이다.
extract($_COOKIE) #$_COOKIE의 값을 변수화 시킨다.
if(!$REMOTE_ADDR) $REMOTE_ADDR=$_SERVER[REMOTE_ADDR] 문제에 접속한 클라이언트 IP가 없으면,
REMOTE_ADDR 변수에 문제에 접속한 클라이언트 IP를 저장한다.
$ip=$REMOTE_ADDR #ip 변수에 클라이언트 ip를 저장.
$agent=$HTTP_USER_AGENT #agent 변수에 $HTTP_USR_AGENT를 저장.
$ip=str_replace("12", "", $ip): 클라이언트 ip에 12라는 문자가 들어오면 공백으로 치환.
$ip=str_replace("7", "", $ip): 클라이언트 ip에 7라는 문자가 들어오면 공백으로 치환.
$ip=str_replace("0", "", $ip): 클라이언트 ip에 0라는 문자가 들어오면 공백으로 치환.
if($ip=="127.0.0.1") ip에 저장된 값이 127.0.0.1이면 if을수행.
@solve() 문제를 푼다.
즉 REMOTE_ADDR 쿠키에 저장된 값을 $ip 변수에 저장하고, 값이 127.0.0.1이면 문제를 풀린다.
일단 EditThisCookie를 사용한다.
보면 알겠지만 REMOTE_ADDR라는 쿠키는 없다.
당황하지 않고 +를 눌러 쿠키를 눌러 새로 추가해본다.
이름은 REMOTE_ADDR로 하고, 127.0.0.1을 입력한다.
입력을 하고, 새로고침을 했는데 문제가 풀리지(?) 않았다...음...
그리고 클라이언트 ip가 1로 바뀌었다.
코드를 다시 보면 127.0.0.1로 한다면 str_replace에 의해 값이 수정된다는 것을 알 수 있다.
즉 이걸 우회해야 된다.
Ex) 1122를 넣으면 12가 replace 되면서 12.
77..를 넣으면 7.이 남는다.
즉 112277..00..00..1을 넣어주면 된다.
필터링 안되게 값을 넣어준 것이다.
Cf) 이 문제의 핵심은 127.0.0.1가 replace에 의해 값이 변경되기에 112277..00..00..1로 값을 설정해야 된다는 것을 아는 것이 핵심이다.
'# Related site issues > WEBHACKING.KR' 카테고리의 다른 글
Webhacking.kr Challenge 38. (0) | 2018.05.01 |
---|---|
Webhacking.kr Challenge 26. (0) | 2018.05.01 |
Webhacking.kr Challenge 16. (0) | 2018.04.30 |
Webhacking.kr Challenge 15. (0) | 2018.04.30 |
Webhacking.kr Challenge 14. (0) | 2018.04.30 |