[webhacking.kr]old-11 write up

zzsla·2023년 11월 6일
0
post-custom-banner

문제 정보

없다.

문제

문제에 들어가면 "Wrong"이란 글자와 함께 소스코드가 주어진다.

소스코드는 이렇게 되어 있다.

분석

php부분만 분석하면 $pat에는 정규표현식으로 값이 있다.
그리고 get으로 val이란 이름에 값과 $pat값이 같으면 문제가 풀리고, 다르면 "Wrong"이란 글자가 나온다.

<?php
  $pat="/[1-3][a-f]{5}_.*$_SERVER[REMOTE_ADDR].*\tp\ta\ts\ts/";
  if(preg_match($pat,$_GET['val'])){
    solve(11);
  }
  else echo("<h2>Wrong</h2>");
  echo("<br><br>");
?>

php 정규표현식을 찾아보면 문제를 풀 수 있다. 한 번 정규표현식을 정리해 본다.

문자설명
[1-3]1~3 중 하나
[a-f]a~f 중 하나
{5}바로 앞에 있는 내용 5번 매치
__
.임의의 한 문자(\n 문자 제외한 모든 단일 문자)
*바로 앞에 있는 내용 최소 0회 이상 매치
\ttab 문자(\t)

그리고 $_SERVER[REMOTE_ADDR]는 현재 접속중인 사용자의 ip주소를 의미한다.

"/[1-3][a-f]{5}_.*$_SERVER[REMOTE_ADDR].*\tp\ta\ts\ts/

그래서 정리를 하면 val값 문자열 안에 1~3 중 하나의 문자로 시작해야 하고([1-3]), 그 다음은 a~f 중 하나의 문자가 있어야 하는데([a-f]) 그 내용(a~f 중 하나)을 5번 반복한다.({5}) 그 다음은 _가 있는 다음 \n문자를 제외한 한 문자가 있어야 하는데(.) 그 내용이 없어도 되고, 여러개 있어도 된다.(*) 그 다음 내 ip주소가 들어가고, 다시 \n문자를 제외한 문자가 없어도 되고 여러개 있어도 된다. 그 다음 탭이 들어가고(\t), p가 들어가고 탭하고 a, 탭하고 s, 탭하고 s로 끝나면 된다.

위 내용을 정리하면 ?val=1aaaaa_1.1.1.1%09p%09a%09s%09s이렇게 나온다.(1.1.1.1 대신 자신의 ip 주소를 넣으면 된다.)
ip 주소는 구글에 찾아보면 내 ip주소 알려주는 사이트가 있다.
%09는 tab의 url 인코딩값이다.
?val=1aaaaa_1.1.1.1%09p%09a%09s%09s

몇 가지 문제를 더 내 본다.
1.
?val=fda121aaaaf_1.1.1.1%09p%09a%09s%09s은 정답일까 오답일까?
2.
?val=1aaaaa_asdc%00%03 cc1.1.1.1%09p%09a%09s%09s은 정답일까 오답일까?
3.
?val=1aaaaa_%0a1.1.1.1%09p%09a%09s%09s은 정답일까 오답일까?

정답은 1 - O, 2 - O, 3 - X 이다.
1번은 앞에 문자가 오든 뒤에 형식만 맞다면 문제가 없다.
(fda121aaaaf_1.1.1.1%09p%09a%09s%09s)
2번은 \n을 제외한 아무 문자가 들어와도 상관이 없기 때문에 정답이다.
(1aaaaaasdc%00%03 cc1.1.1.1%09p%09a%09s%09s)
3번은 \n이 들어갔기 때문에 오답이다.
(1aaaaa
%0a1.1.1.1%09p%09a%09s%09s)

profile
[README]newbi security hacker :p
post-custom-banner

0개의 댓글