Old-11 Domain & Tool

  • 구분 : 정규표현식
  • 문제풀이에 사용된 도구 
    • Chrome 103.0.5060.66 

Old-11 Question & Answer

다짜고짜 나보고 틀렸다고 한다. view-source를 확인해서 왜 틀렸는지 이유를 알아보자

<?php
  include "../../config.php";
  if($_GET['view_source']) view_source();
?><html>
<head>
<title>Challenge 11</title>
<style type="text/css">
body { background:black; color:white; font-size:10pt; }
</style>
</head>
<body>
<center>
<br><br>
<?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>");
?>
<a href=./?view_source=1>view-source</a>
</center>
</body>
</html>

PHP코드를 확인하면 solve(11)를 위해서는 pref_match를 통과해야한다는 것을 알겠다. get방식으로 val을 가져오는데, val은 다음의 정규표현식을 통과해야한다.

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

하나하나 쪼개서보자

  • [1-3] : 1에서 3까지 문자하나
  • [a-f]{5} : a에서 f까지 문자 5번 반복
  • _ : 언더바
  • $_SERVER[REMOTE_ADDR] : 자신의 IP
  • \t : 탭
  • pass : 문자열(사이사이에 \t가 섞여있는 형태인것이다.)

여기서 IP앞뒤로 .은 PHP에서 문자열을 합치기위해서 추가된 것이고, *은 정규표현식에서 생략가능한 아무문자이기에 무시한다. 자세한 정규표현식의 규칙은 이전 Python re모듈 정리글에 올려두었으니, 참고바란다.

 

[Python] - 모듈탐구 re - [^정규표현식$?]

정규표현식을 모르고 있는 사람은 아래 포스팅을 읽고 오자 2021.04.17 - [정보보안-이론] - 정규표현식에 대하여 정규표현식에 대하여 정규표현식은 여러 목적으로 사용된다. 정규표현식 자체는

tutoreducto.tistory.com

해당하는 Parameter를 필자는 1aaaaa_[내 IP]%09p%09a%09t%09s로 하여 val로 넘겼다.(%09는 tab의 url encode값이다.)

그렇다

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

[Webhacking.kr] old-14 Answer  (0) 2022.07.22
[Webhacking.kr] old-12 Answer  (0) 2022.07.15
[Webhacking.kr] old-10 Answer  (0) 2022.07.14
[Webhacking.kr] old-09 Answer  (0) 2022.07.14
[Webhacking.kr] old-08 Answer  (0) 2022.07.10

정규표현식은 여러 목적으로 사용된다. 정규표현식 자체는 어렵지 않다.

 

정규식(正規式)은 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어이다.

< 정규표현식의 정의 : 출처 위키백과 ko.wikipedia.org/wiki/%EC%A0%95%EA%B7%9C_%ED%91%9C%ED%98%84%EC%8B%9D >

이 정규표현식이 참.... 알면 편한데 문자열 파싱 하는 일이 자주 없다 보니 필자는 자주 안 쓰게 된다. 사용법이 헷갈린 것도 있고, 자주 안 보면 까먹기 일수이다. 이번 포스팅에서 내 기억도 살릴 겸 정규표현식에 대해서 정리를 해보고자 한다.

 


패턴

일단 정규 표현식은 문자열을 표현하는 "패턴"이라는 놈이 존재한다. 즉 이 "패턴"을 가지고 노는 게 정규표현식에서 자유로워야 하는데, 이 "패턴"에는 특정한 의미를 가진 "메타 문자"라는 게 존재한다.(예를 들면 정규표현식에서 점(.)은 New Line을 제외한 모든 한 문자를 의미한다.)

 

표준 표현법

아래는 POSIX의 기본/확장 문법을 정리한 표이다.

메타문자 기능 설명
. 문자 New Line을 제외한 1개의 문자
[ ] 문자 집합 대괄호에 써있는 문자중 하나를 선택한다. 
ex : [abc]d >> ab, ac, ad
[^ ] 부정 대괄호에 써있는 문자를 제외하고 선택한다.
ex : [^abc]d >> 일단 ab, ac, ad는 뺀다.
^ 처음 처음을 의미한다. 
ex : ^[asdf] >> a, s, d, f로 시작하는 문자(열)
$ 끝을 의미한다.
ex : $[asdf] >> a, s, d, f로 끝나는 문자(열)
| 선택 여러 식 중 하나를 선택한다.(파이프다)
( ) 하위식 식 여러개를 하나로 묶는다. 약간 드모르간인듯
ex : abc|acd == a(b|c)d 
\n 일치하는n번째 패턴 일치하는 패턴 중 n번째 패턴을 의미한다. (New Line이 아니다!)
* 0회 이상 0개 이상의 문자를 포함한다. 
ex : a*b >> b, ab, aab, aaab, aaaab 등등
+ 1회 이상 1개 이상의 문자를 포함한다. 
ex : a+b >> ab, aab, aaab, aaaab 등등
? 0또는 1회 ex : a?b >> b, ab
{m, n} m회 이상, n회 이하 ex : a{1,4}c >> ac, aac, aaac, aaaac 

 

또한 문자열을 지정할 때 자주 사용하는 정규표현식은 다음과 같다. 

* 아래는 POSIX 표준이 아닌 ASCII 식을 첨부한다.(더 활용성이 높다고 생각한다.)

ASCII 표현식 설명
[A-Za-z0-9] 영숫자
[^A-Za-z0-9] 영숫자가 아님
[\t] 공백 혹은 탭
[\x00-\x1F\x7F] 제어문자(00은 NULL을 1F는 이스케이프 시퀀스를, 7F는 ASCII Character DEL(? 맞는지 모르겠다.)
[\x21-\x7E] 보이는 문자
[ \t\r\n\v\f] 모든 공백문자

 

POSIX란?

POSIX는 portable Operating System Interface의 약어로 서로 다른 UNIX의 공통 API를 정리해서 이식성을 향상하기 위한 IEEE의 표준규격이다. POSIX 규격은 C 언어의 시스템 콜(System Call), 압축 포맷까지 광범위한 범위를 표준 한다. Window도 POSIX 서브시스템과 비슷한 시스템(SUA)을 탑재하고 있어서 POSIX를 만족하는 응용 프로그램이 실행 가능하다.

 


정규표현식은 거의 모든 에디터나 프로그래밍 언어에서 지원한다. 자유자재로 사용할 줄 아는 게 확실하게 도움이 된다.

'정보보안-이론 > XX에 대하여' 카테고리의 다른 글

CAM Table에 대하여  (0) 2021.05.14
OLE에 대하여  (0) 2021.05.13
Cavity Virus에 대하여  (0) 2021.05.12
USBDumper에 대하여  (0) 2021.05.12
ICMPv4에 대하여  (0) 2021.05.11

+ Recent posts