webhacking/etc

WeChall Training: PHP LFI, PHP 0817, Training: Register Globals, PHP 0819

qkqhxla1 2015. 7. 6. 16:53

PHP LFI

../solution.php에 중요한게 많다는 설명이 있다. 그럼 이 페이지를 가져오면 된다.


http://www.wechall.net/challenge/training/php/lfi/up/index.php?file=../../solution.php%00

끝부분에 html이 붙는건 널바이트로 지워준다.



PHP 0817

solution.php를 include하면 된다고 하는데... ? 그냥 주소를 써주면 통과. 의도가 뭔지 모르겠다.


http://www.wechall.net/challenge/php0817/index.php?which=solution



Training: Register Globals

register global이 있다는 설정이다. 내부의 foreach ($_GET as $k => $v) { $$k = $v; }로 register global을 비슷하게 구현했다고 한다. 그러면 GET방식으로 어떤 변수를 전달하면 된다. register global설정은 내가 get이던 post던(여기서 get) 입력한 변수가 검증없이 그냥 들어가는 취약점이다. $_COOKIE는 원래 쿠키값을 가져오지만 우리가 ?COOKIE=A처럼 GET방식으로 전달해서 변경할수 있는 그 취약점이다.


소스를 잘 살펴보면 

if (strtolower($login[0]) === 'admin') {

                $chall->onChallengeSolved(GWF_Session::getUserID());

}

부분에서 $login[0]값이 admin이면 문제가 통과됨을 알수있다. register global이므로 get방식으로 전달해주면 된다.


http://www.wechall.net/challenge/training/php/globals/globals.php?login[0]=admin



PHP 0819

문자열로 변환한 1337을 넣어야되는데, '나 ", (등이 다 막혀있다. 처음에는 PHP의 이상한 형변환을 이용해볼까 하다가 끝의 비교가 ===인걸 발견했다. 어떤 이상한 형변환으로 변환시킨다고 해도 ===는 형까지 맞아야 하므로 안된다. 그래서 php string을 찾아보니 

http://php.net/manual/kr/language.types.string.php#language.types.string.syntax.heredoc

에서 heredoc라는 방법이 있었다.


http://blackfrost.blog.me/40131505083 여기도 설명 잘되있다.

이걸 이용해서 넣으면 되는데, 계속 실패했다. 원인을 몰라서 이것저것 찾아보니, 한줄씩 꼭 내려가 있어야 한다고 한다. http://www.wechall.net/challenge/space/php0819/index.php?eval=%3C%3C%3Ca%0a1337%0aa%3b%0a처럼 입력하니 성공했다.

'webhacking > etc' 카테고리의 다른 글

php wrapper (추가예정)  (0) 2015.07.28
chall.tasteless.eu Leetmore  (0) 2015.07.21
adm1nkyj님의 새 워게임  (0) 2015.07.05
securitytraps.pl Let's start  (0) 2015.07.02
overthewire natas 12, 13, chall.tasteless.eu Get Me Down  (0) 2015.06.27