본문 바로가기
Webhacking.kr

Challenge(old)_24

by 꼬마인간 2020. 5. 19.

 

이것만 보고 ip를 바꿔야되는건가 걱정했다.

view-source를 눌러 소스코드를 확인한다.

 

extract(array)

: 입력된 배열의 키와 값에 대하여 키의 이름을 가진 변수를 새로 만들고 값도 넣어준다.

: 예를 들어 문제에서 $_SERVER는 서버, 실행환경 정보를 담고 있는 배열인데

  $_SERVER['REMOTE_ADDR']에는 사용자의 IP주소가, 

  $_SERVER['HTTP_USER_AGENT']에는 사용자의 웹 접속 환경 정보가 담겨져 있다.

  이 때 extract(array)를 하게 되면 $REMOTE_ADDR = IP주소, $HTTP_USER_AGENT = 웹 접속 환경 정보

  이런식으로 변수가 만들어지게 되어 편리하다.

  그래서 위 php 코드에서 따로 $REMOTE_ADDR, $HTTP_USER_AGENT 변수를 생성하지 않아도

  $ip = $REMOTE_ADDR;, $agent = $HTTP_USER_AGENT; 이런 식으로 쓸 수 있는 것이다 

 

htmlspecialchars(string)

: html 코드로 인식될 수 있는 기호들 &, ", ', <. >을 변환해서 특수문자로 취급될 수 있도록 한다.

  & -> &amp;

  "  -> &quot;

  '   -> &#039;

  <  -> &lt;

 

str_replace(찾을 문자열, 변경 문자열, 대상)

: str_replace("..", ".", $ip)은 ip값에서 ..을 .로 바꿔준다.

 

solve 조건은 ip값이 str_replace를 모두 거쳤을 때 127.0.0.1이 되어야한다.

..은 .으로 12, 7., 0.은 모두 삭제된다.

따라서 천천히 잘 생각해보면 처음 ip값으로 112277...00...00...1이 입력되면 될 것 같다. 

이런식으로 동작

처음에는 진짜 ip를 변경해야되나.. 근데 ip 형식이랑 제대로 맞지도 않고 어케 바꿀수도 없는 일이라

파이썬으로 바꿀수가 있나 엄청 찾아다니다가 포기하고 php 함수부터 정리하는 도중에 extract 함수가 취약하다는 글을 발견했다. 아싸!

server랑 cookie 둘다 extract 했는데 사용된건 server 관련 값만 써서 어쩐지 수상했는데

server를 extract하고 cookie를 extract 했을 때 같은 이름을 같는 건 값이 덮어쓰기 되는 점을 이용하면 될 것 같았다.

 

아래처럼 editthiscookie로 remote_addr이름을 가진 쿠키값을 만들어주었다. 

 

 

127.0.0.1이 출력되면서 끗

 

굳이 파이썬으로 만들어보면

이전 코드들과 비슷하고 마지막에 session을 닫아주는 것만 추가했다.

 

[출처, 참고]

https://zetawiki.com/wiki/PHP_$_SERVER

https://www.php.net/extract

https://www.php.net/manual/en/function.htmlspecialchars.php

 

PHP: htmlspecialchars - Manual

if your goal is just to protect your page from Cross Site Scripting (XSS) attack, or just to show HTML tags on a web page (showing on the page, for example), then using htmlspecialchars() is good enough and better than using htmlentities().  A minor point

www.php.net

 

'Webhacking.kr' 카테고리의 다른 글

Challenge(old)_26  (0) 2020.05.25
Challenge(old)_25  (0) 2020.05.20
Challenge(old)_19  (0) 2020.05.19
Challenge(old)_18  (0) 2020.05.19
Challenge(old)_17  (0) 2020.05.19

댓글