가장 초기에 사용되었던 단순 읽기 기능만 지원했던 HTTP 0.9 버전의 기본연결
위의 기본 연결은 HTTP의 버전에 관계없이 동일
0.9 버전은 하나의 웹 페이지 안에서도 텍스트와 그림이 반복적으로 connect 과정을 거쳐야 하는 등의 비효율성이 드러나서 오래 사용되지 못함
현재 인터넷에서 사용되는 대부분의 HTTP는 1.0 또는 1.1 버전
가장 일반적인 HTTP Request 형태
아래와 같은 요청 데이터의 인수를 웹 브라우저의 URL(Uniform Resource Locator)
GET 방식은 데이터가 주소 입력란에 표시됨
클라이언트, 즉 웹 브라우저에서 실행되는 프로그램 영역
가장 단순한 형태가 HTML
초기의 웹 서비스는 정적 웹 페이지가 대부분
정적 웹 페이지는 변화에 적응할 수 없고 새로운 것을 추가하는 데 많은 시간이 걸린다는 단점이 있음
이후 동적 웹 서비스를 위한 JavaScript, Visual Basic Script 등이 사용
현재의 프론트 엔드 담당으로는 흔히 자바 스크립트를 사용
CSS는 서버가 아닌 웹 브라우저에서 해석되어 화면에 적용
웹의 구조 파악 및 취약점 점검, 웹 해킹에 사용되는 웹 프록시
위의 그림은 웹 프록시의 동작 구조를 나타냄
웹 프록시는 클라이언트에 설치되고 클라이언트의 통제를 받음
Burp Suite를 사용하기 위해서는 클라이언트 웹 브라우저 패킷이 웹 프록시로 향하도록 설정해야 함
윈도우의 프록시 설정 창에서 주소 란에 루프백 주소를 입력하고 포트에는 8080 포트, HTTP Alternate 번호를 입력
위의 설정을 마친 후 Burp Suite를 사용하면 아래와 같이 동작
intercept is on 상태에서는 패킷을 하나씩 살펴볼 수도 있고 내용을 수정하여 전송할 수 있음
intercept is off 상태에서는 패킷을 살펴보지 않고 웹 프록시를 통해 바로 주고받게 됨
해킹하려는 대상이 클라이언트에 있는 경우
서버에서 클라이언트에 정보를 전송했다가 이를 다시 전송받아 처리하는 경우
특정 데이터의 값을 확인하고 해당 값을 클라이언트로 전송
서버는 전송한 데이터가 필요할 때 자신의 데이터베이스에서 다시 읽지 않고, 클라이언트가 관련 서비스를 수행할 때 서버에 다시 전송해주는 데이터의 값을 참조하여 서비스 수행
2번 과정에서 값을 바꾸면 3, 4, 5 과정 전체에서 변경된 값으로 작업 수행
4번 과정에서 변조를 가해도 되지만 일반적으로 2번 과정에서 변조하는 것이 훨씬 쉬움
위의 정보 처리 방식이 가능한 이유는 HTTP 프로토콜이 기본적으로 연결이 존재하지 않는 무상태 프로토콜(Stateless Protocol)이기 때문에 가능
개발자들이 웹 사용자의 정보를 간단한 형태로 유지 및 처리하려는 의도에서 이용하는 방식
이러한 위험을 없애기 위해서는 서버에서 클라이언트로 전송한 값을 다시 참조하지 말아야 함
wishfree.com 도메인이 있는 페이지에서 admin 문자열 검색
site:wishfree.com admin
파일 확장자가 txt이고 문자열 password가 들어간 파일 검색
filetype:txt password
디렉터리 리스팅이 가능한 사이트 검색
intitle:index.of admin
일단 웹 서버를 구동해야 함
기초 기반은 다 완성했으니 실습 때마다 어떻게 웹 서버를 키는지만 기록하겠음
nodemon index.js
데이터베이스에 SQL문을 보내려면 별도의 클라이언트가 필요
DB로 SQLite, 클라이언트로 DBeaver 툴을 사용
웹에서 로그인할 때도 유사한 SQL문이 삽입됨
사용자가 아이디와 패스워드를 입력하면 아래의 SQL문이 작성되어 DB로 전달
만약 DB에 입력된 아이디, 패스워드와 동일한 계정이 있으면 결과 창에 계정 정보가 출력됨
DB에 동일한 계정이 없으면 아무것도 출력되지 않음
아래의 그림은 실제로 웹 소스에서 SQL을 처리하는 부분을 나타냄
인증을 하기 위해 할 일
SQL 결과 값에 NULL이 나오지 않고 출력 값이 나오게 하면 로그인에 성공할 수 있음
정확한 아이디와 패스워드를 아는 것이 가장 기본이긴 하지만 SQL문에서는 where로 입력되는 조건문을 항상 참으로 만들 수 있는 방법이 있음
조건 값에 ' or ''=' 입력하는 것
' or ''='
이를 실제 웹 사이트에서 실행
아이디에 admin@russia.com, 패스워드에 ' or ''=' 입력