2019. 2. 22. 18:26ㆍWeb Hacking/[Memo] Web Functions
안녕하세요!
오늘은 php 함수중에
preg_match 함수에 대해서
설명할게요!
웹해킹 문제들을 풀다보면
php 코드에서 자주 등장하는 함수입니다!
먼저 어떻게 쓰이는지 알아보겠습니다
<예시>
<?php
preg_match('/대조 할 문자/','입력한 문자', $matches);
?>
물론 $matches 뒤에 PREG_OFFSET_CAPTURE을 쓰기도 하는데
제일 자주 쓰이는 상태로 살펴보도록 하겠습니다!
먼저 대조 할 문자에 저희가
찾고 싶거나 필터링 하고 싶은 문자열을
넣습니다!
예를 들어 나는 a를 필터링하고 싶다하면
'/a/' 이렇게 되겠죠?
this를 필터링하고 싶다하면
'/this/' 이렇게 되겠죠?
그럼 만약에 특수문자를 필터링하고 싶을땐요?
' 이거 필터링 하고싶은데요?
그럴땐 특수문자 앞에 \를 붙이면 돼요~
이렇게요!
'/\'/'
근데 가끔씩 '/admin/'i 이렇게
i가 붙을수가 있습니다!
이 경우는 대소문자를
구분하지 않는다는 뜻입니다!
입력한 문자의 경우는
일반적으로 저희가 GET방식이든
POST방식이든
사용자가 input을 하면 특정 변수에 담잖아요!
ex) $a=$_GET['id'];
이렇게요 get 방식으로 id값을 php변수 a에 넣는거요!
만약에 저희가 get방식으로 id에 1234를 넣었으면
$a=1234가 되겠죠?
그래서 일반적으로 사용자 input이 담긴
php변수를 저 위치에 적어요!
좀 더 구조를 갖추면 이렇게 되겠죠?
preg_match('/\'/','$a',$match);
이렇게 되면 $a변수에 '가 있으면 감지되겠죠?
마지막으로 $match입니다
여기 match 변수에는 뭐가 담기냐?
바로 사용자가 설정한 값과 input값이 일치하는 경우
그 값을 $match에 배열형태로 저장합니다.
쉽게 얘기해서 검거당한 문자열은
$match에 기록된다!
예를들어 preg_match('/abcd/',$a,$match)
$a에 있는 값이 acety이면
a랑 c가 match안에 배열형태로 저장되겠죠?
마지막으로 이 함수는
하나라도 문자열이 검거가 되면 1을 반환하고
하나라도 검거가 안되면 0을 반환합니다
그래서 제가 본 문제들은 이런 형태로 되어 있었습니다!
if(preg_match('/\'/',$id,$match))
{
echo "no hack";
exit();
}
만약 $id의 입력값에 '가 있으면
no hack이라고 출력하고 php를 종료시킨다!
물론 문자열 필터링 할 때 이거 말고도
몇 가지 함수들이 더 있긴 합니다!
str_replace -> 다른 문자로 바꿔줌
preg_replace -> 다른 문자로 바꿔줌
preg_match전에
eregi -> 비슷한 원리로 문자열 필터링(근데 NULL BYTE 취약점 존재해서 없어짐)
eregi 였지만 지금은 없어요!
웹해킹 문제 푸시다가 목격하시면
취약한 함수라고 생각하시면 되요!
네 그러면 오늘 포스팅은
여기서 마치도록 하겠습니다!
감사합니다!
'Web Hacking > [Memo] Web Functions' 카테고리의 다른 글
[php] eval() 함수 (0) | 2019.02.19 |
---|