우선, 정규식을 작성하고
바로바로 테스트 결과와 디버깅을 할 수 있는 사이트를 소개한다.
정규식은 로그인, 회원가입 기능에서 입력 형식의 유효성 검사를 하는데도 자주 쓰이지만
해커로부터 오는 공격 트레픽중 특정 구문을 차단하기위해서도 쓰인다.
문제풀이를 하면서 정규식에 익숙해져보자.
[문제1] E-mail
"hacker"라는 문자열을 포함한 아이디를 가진 이메일 주소를 정규식으로 잡아내고싶다.
단, 이메일의 아이디는 영문 소문자+숫자로만 이루어진다.
조건에 부합하는 정규식을 작성하라.
[해답1]
\d*(hacker)\d*[@]([a-z]+\.)+(com|net|kr)
\d*(hacker)\d* : hacker 라는 문자열 앞뒤에 정수 숫자가 올 수 있고
[@] : 이메일 형식에 반드시 '@'를 포함한다.
([a-z]+\.): 영문 소문자에.을 포함하고
마지막 자리는 com or net or kr 로 끝난다.
[문제2]
입력값이 유효한 주민번호인지 검사한다.
주민번호 생년월일중 월은 당연히 1~12, 일은 1~31 값이 들어올 수 있다.
주민번호 뒷자리의 첫글자는 1~4만 가능하고
앞/뒷자리를 구분하는 하이픈(-)은 있을 수도, 없을 수도 있다.
[해답2]
\d{2}([0]\d|[1][0-2])([0][1-9]|[1-2]\d|[3][0-1])[-]*[1-4]\d{6}
\d{2} : 맨앞 정수 2자리(생년)는 어떤 정수값이 와도 상관없다.
([0]\d|[1][0-2]) : 첫자리가 0인경우는 뒤에 어떤 정수가 와도 괜찮다. ,, 첫자리가 1인경우 뒷자리는 0,1,2만 올수있다.
// (01-12 생월을 표현)
([0][1-9]|[1-2]\d|[3][0-1]) : 생일은 첫자리가 0이면 뒷자리가 0이될경우 0일이 되기 때문에 0다음에는 1-9만 올 수있다.
[-]* : 하이픈은 0개 or 1개다.
[1-4] : 주민번호 뒷자리 첫번째 숫자는 1~4만 갖는다.
\d{6} : 주민번호 첫자리를 제외한 숫자는 총 6자리다.
[문제3]
출처 : malware-traffic-analysis.net/2020/07/21/index.html
해당 사이트에서 2020-07-21-Emotet-infection-with-Qakbot.pcap 파일을 Wireshark로 열어보자.
첫 HTTP Request 패킷의 TCP Stream을 보며
HTTP Request / Response 에서 특정 부분을 패턴을 지정하여 막을 수 있는 Snort Rule을 작성하라.
GET /blogs/JB5HY27RGXBM90/ HTTP/1.1
Host: umeedupvanfoundation.com
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36 Edg/84.0.522.40
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9
HTTP/1.1 200 OK
Cache-Control: no-cache, must-revalidate
Pragma: no-cache
Content-Type: application/msword
Expires: Tue, 21 Jul 2020 14:47:54 GMT
Last-Modified: Tue, 21 Jul 2020 14:47:54 GMT
Server: Microsoft-IIS/8.5
Set-Cookie: 5f17001adb80f=1595342874; expires=Tue, 21-Jul-2020 14:48:54 GMT; Max-Age=60; path=/
Content-Disposition: attachment; filename="RSH_070120_FLV_072120.doc"
Content-Transfer-Encoding: binary
X-Powered-By: ASP.NET
X-Powered-By-Plesk: PleskWin
Date: Tue, 21 Jul 2020 14:47:53 GMT
Content-Length: 175150
문제3_1) Request 메시지중에 난수 14자리를 탐지하는 Snort Rule로 표현하라.
정규식 표현 구문
GET[\s][/]blogs[/]+[\w\W]{14}
[해답3_1] Snort Rule (Request)
# alert tcp $EXTERNAL_NET any -> $HOME_NET $HTTP_PORTS // (외부 -> 내부)
(msg:"File Download Vulernability";
flow:to_server,established; content:"admin";
pcre:"/GET[\s][/]blogs[/]+[\w\W]{14}" // 여기 정규식 표현이 핵심이다.
http_header; content:"admin";
distance:0; http_header; metadata:policy max-detect-ips drop, service http;
reference:cve,2013-1305; reference:url,technet.microsoft.com/en-us/security/bulletin/ms13-039;
classtype:attempted-dos; sid:26635; rev:3;)
문제3_2) Response 메시지중에 filename=~~~~~6자리 숫자 난수.doc 는 고정이다. 해당 메시지를 탐지하는 Snort Rule로 표현하라.
정규식 표현 구문
(filename=")+[\w]*([\d]{6}[\.]doc["])
[해답 3_2 ] Snort Rule (Response)
# alert tcp $HOME_NET $HTTP_PORTS -> $EXTERNAL_NET any // 내부 웹 서버->외부
(msg:"File Download Vulernability";
flow:to_client,established; content:"admin";
pcre:"(filename=")+[\w]*([\d]{6}[\.]doc["])" //정규식
http_header; content:"admin";
distance:0; http_header; metadata:policy max-detect-ips drop, service http;
reference:cve,2013-1305; reference:url,technet.microsoft.com/en-us/security/bulletin/ms13-039;
classtype:attempted-dos; sid:26636; rev:3;)
🔗 Reference
medium.com/@chrisjune_13837/%EC%A0%95%EA%B7%9C%EC%8B%9D-%ED%8A%9C%ED%86%A0%EB%A6%AC%EC%96%BC-%EC%98%88%EC%A0%9C%EB%A5%BC-%ED%86%B5%ED%95%9C-cheatsheet-%EB%B2%88%EC%97%AD-61c3099cdca8
developer.mozilla.org/ko/docs/Web/JavaScript/Guide/%EC%A0%95%EA%B7%9C%EC%8B%9D
'Web > Javascript' 카테고리의 다른 글
[Javascript] Array.reduce (0) | 2020.11.14 |
---|---|
[JavaScript] Object set 'key' using variable (0) | 2020.11.01 |
window.open() (0) | 2020.02.27 |
Window 브라우저 객체 (0) | 2020.02.27 |
[javascript] style property handling error (0) | 2020.02.22 |