본문 바로가기

학원

2023/07/17 Web



오늘부턴 Web을 배우게 될 것
필요한 것은 공격자용도인 BT와 클라이언트인 xp 그리고 웹서버로 사용하는 win Server이다.

 

 

IP설정은 192.168.1.0 /24 대역을 사용한다. GW는 192.168.1.2를 사용했음
xp는 10번, win server 20번, BT는 30번으로 넣어줌

 

 

Client에서 인터넷에 192.168.1.20을 하면 웹 페이지가 뜨는걸 확인해주고 꺼주고



와이어샤크를 켜주고 다시 웹페이지를 확인해줌
가장 처음에 3핸드 쉐이크가 가게되고 리퀘스트를 보내게 된다.
그리고 받게 되면 리스폰스로 주게 됨 아래 사진을 보면 이런식으로 진행되고 있는 것
이 방화벽에 웹에 특화되어있는 방화벽이 존재하는데 그걸 웹방화벽인 Web F/W라고 함
첫번째 방화벽은 간단하게 80포트랑 443포트가 아니면 드랍시키는 필터링 기능
두번째에 있는 Web F/W는 대표적인 공격인 Injection, XSS같은 공격기법엔 패턴이 있는데 
그런 패턴을 감지해서 탐지가 된다면 허용하지 않는 방화벽이다.


요즘에는 웹페이지에 메인페이지에서 사람마다 페이지에서 사용하는게 다르게 넘겨줘야하고
넘겨주는 거뿐만아니라 사용자에 따라 요청하는것을 처리해야한다. 그렇기 때문에
정적 방식은 요즘 상황에서 어울리지 않는다. 동적인 페이지를 요구함
똑같은 페이지임에도 사용자가 넘기는 페라미터(검색)에 따라서 원하는 것을 보여줘야함


 

그래서 생긴게 동적방식이고 동적방식은 Database가 클라이언트가 비번과 아이디를 서버에게 
넘기면 서버는 데이터베이스에 SQL문으로 질의를 한다.
서버에서 데이터베이스 사이에 WAS라는 것이 있는데 Web Applicaiton Server인 이것으로 질의를 하게 된다.
그 질의는 서버에서 데이터베이스에 이 아이디와 비밀번호와 정확히 일치하는 사용자가 있니 ?
하고 물어보는 느낌이고 데이터베이스에서 정보를 찾아보고 맞는 정보가 있다면 
정상페이지를 보여주게 된다.

우리 VM을 보게 되면 Server랑 Client만 있는데 DB와 WAS, Web server가 어딨냐 하면
Win안에 Client와 DB와 WAS를 다 포함하는 것 방화벽도 윈도우에서 제공하는 것만 있다.



HTTP(HyperText Transfer Protocol)
하이퍼 텍스트 : 기존의 텍스트보다 많은 기능을 가진 텍스트
ex) 비순차적 검색(색인검색), 링크역할

HTTP의 특성

- TCP기반의 프로토콜이다
- 읽을 수 있는 텍스형태의 문서이다
- HTTP는 Stateless기반의 방식이다.
- HTTP는 버전이 1.0 > 1.1 > 2.0 (가끔 문서를 보면 0.9가 있는데 공식적으로 발표 전 연구에 썼던 버전)
현재는 1.1을 많이 사용함 서버가 클라이언트에 요청하는 리퀘스트 패킷에서 확인가능
1.1버전의 대표적의 기능으로 지속적인 연결을 지향한다. 지속적인 연결을 하게 하는 요소가 Cookie이다.



 

리퀘스트를 하나 살펴보면
리퀘스트는 맨 윗줄 리퀘스트라인이 있고 \r\n이 나오기전까진 헤더이고 그 다음부터 바디인데
지금은 바디가 없다.
바디와 헤더를 구분하는 방법은 \r\n이라고 하는 개행으로 구분한다.

리퀘스트에 리퀘스트 라인을 살펴보면 띄어쓰기로 요소를 구분하고 3개의 요소로 이루어져 있다.
첫 번째 요소 GET은 리퀘스트 방식이라고 한다. 리퀘스트 방식에는 POST 와 GET이 있다.
두 번째 요소 \는 웹페이지에 대한 경로를 의미한다.(요청하는 URI) 
역슬래쉬 하나만 나올경우 아래에 Host필드도 같이 확인해야함
세 번째 요소는 HTTP의 버전을 의미한다.

헤더를 살펴보면 각각 헤더필더라고 한다. 보이는거 뿐만아니라 더 많은 필드가 존재함
Accept로 시작하는 것은 클라이언트가 허용하는 파일 확장자이다.
이중에 MIME이라고 하는게 있는데 굉장히 중요하고 쉴 때 검색해보라
User-Agent는 클라이언트가 사용하는 웹브라우저의 정보
Host는 요청하는 대상의 호스트이다
Connection은 현재 연결 상태를 나타낸다.


 

리스폰스를 살펴보면 첫 줄은 status line이라고 함 맨윗줄 아래로 내용은 리퀘스트와 비슷하고
리스폰스 패킷에는 바디가 있다.

 

 

리스폰스의 요소도 3가지가 있다.
HTTP/1.1과 200그리고 OK

HTTP/1.1은 버전정보이다.
숫자부분은 상태코드이다 100 ~ 500까지 있다.

100 : continue(잘 안보임)
200 : OK(정상응답 했다)(자주 보임)
300 : redirection(간혹보임)
400 : client error (대표적으로 404 Notfaund)
500 : server error 

헤더를 보게 되면
server는 현재 웹서버에서 사용하고있는 종류를 나타낸다.
Date : 시간이다. GMT로 표현
Content-Length : 뒤에 오는 메시지바디의 길이
Contetn-Type : 메시지 바디의 타입
Set-Cookie : 쿠키값
cahe-conftrol : 캐시 사용 여부 지금은 사설캐시를 사용

 



 

메시지 바디를 보면
html로 표현된 코드이다.


 

Wireshark는 패킷을 단순히 보여주기만 하고 패킷자체를 핸들링(생성, 수정, 삭제) 할 수 없음
하지만 HTTP 패킷은 캡처해서 확인하고 필요하다면 수정해야한다.
burpsuite : 유로버전
paros : 교육용 UI가 이해하기 쉬움

 


paros 설치한다고 바로 사용하는건 아니고 
도구 > 인터넷 옵션 >연결탭 > 랜 설정 > 프록시서버 체크 
프록시서버 127.0.0.1 8080 port로 해줌 서버에 IP주소를 입력하게되면 Paros에 패킷 내용이 잡힌다.



 

Paros에 들어가 Trap부분에 들어가서 아래에 Trap request와 Trap response를 체크하게 되면
다시 인터넷 창을 키면 창이 안켜진다. Continue를 계속 눌러주게 되면 창이 제대로 다시 뜸
이거 끄고 인터넷을 다시 켜보게 되면 안켜진다. Proxy가 잡고있기 때문



 

Burp Suite는 그냥 켜주면 된다.
Intercept가 Paros에 Trap기능이다. 이게 on이니까 가로챈다는 말이다.
Continue 대신에 Forward가 대신하는 말이다.


 

Desktop들어가서 unzip paros-3.2.13-unix.zip으로 압축 풀어주고
cd paros로 이동해서 java -jar paros.jar해주고

 

 

하면 paros에서 잡게 된다. 웹페이지에서 구글에서 아이티뱅크라고 쳐서 들어가면
그것에 대한 것을 잡았다. 구글에 검색한것에 대해서 내용을 바꿀 것



Paros에 Tools에 Filter로 들어오면 HTTP인 4개가 보인다.

우리는내용을 바꿔야하기 때문에 Response를 바꿔야한다. 

그중에서 내용은 body에 들어있을 것이고 body에 체크를 해주고 오른쪽에 ...을 눌러주면  itbank를 검색하면 얘가 ittank로 검색하게 되는것



만약 내가 구글 이미지가 맘에 안든다면 구글에 이미지를 복사해서 넣고싶어진다.
Trap에 response만 체크를 해서 바디부분에 이미지 부분을 내가 원하는 이미지로 넣어주고 컨티뉴 해주면 나오게 된다.


 

이런식으로 텍스트 문서를 만듦
html로 시작해서 html로 끝을 냈다.

 

 

 

head부분이 맨 위에 창인것이고
body가 내용부분이다.
input으로 값을 입력받고 type에 따라 입력값이 다르게 나옴

input을 ID와 PW submit으로 3가지의 규칙을 준 것

마지막에 submit은 누르는 버튼을 만든것이고 login이라는 이름으로 줬다.

form이 형식
method 클라이언트가 웹서버를 다루는 형식
action 실제 일어나는 변화 method_test.asp파일을 연다.


 

paros가 켜져있는 상황에서 xp에서 192.168.1.20/method_test.html을 검색하면 화면이 나오게 된다
지금은 ID와 패스워드를 입력하고 로그인한다고 해도 페이지를 불러올 수 없다.


 

그 페이지를 불러올 메모장을 하나 더 만든다.


 

로그인을 하고 입력하게 되면 이렇게 뜨게 된다.


 

get과 post의 차이점을 알기 위해서 html의 get부분을 post로 바꾸었다.
바꾸었더니 타이틀에 body의 내용이 출력되지않는다.
get은 클라이언트가 입력한 정보가 url에 노출된다.
post는 body부분에 입력값이 붙여진다.

post는 평문화 해서 body부분에 입력값이 들어가기 ㅒㄸ문에 url부분에 입력값이 노출되지 않는다.
하지만 body에 들어간 값이 평문화되어 제 3자가 열람시 확인할 수 있기 때문에 추가적으로 Secure(암호화)
필요하다.


'학원' 카테고리의 다른 글

2023/07/19 디렉터리 리스닝  (0) 2023.07.19
2023/07/18 SSS, CSS, Web, 인증  (0) 2023.07.18
2023/07/14 SNMP  (0) 2023.07.14
2023/07/13 SSH, 암호화  (0) 2023.07.13
2023/07/12 SSH스푸핑  (0) 2023.07.12