본문 바로가기

전체 글

(76)
[DevOps 구축하기 4] Github Webhook 설정, DevOps 구축 완성 https://tomatohj.tistory.com/82 에서 이어집니다. 이전에 설명했듯, Jenkins는 Github로 부터 Repository에 변화가 있음을 알아채고, 빌드/배포 과정을 진행할 것이다. 그렇다면 Github은 어떻게 Jenkins에게 그 정보를 전달 할 수 있을까? 답은 바로 Github Webhook에 있다. Github Webhook을 이용하면 Repository에 발생하는 이벤트들을 특정 URI로 전달할 수 있다. Fork 해온 Repository로 가서, 우측 상단 Settings 메뉴를 클릭한다. 그리고 왼쪽 메뉴 중 Webhooks메뉴를 선택한 뒤, 우측 상단 Add webhook을 클릭한다. Webhook을 추가하기 위해서는 Repository의 변경사항을 전달할 UR..
[DevOps 구축하기 3] Blue/Green 웹 서버 + Nginx 리버스 프록시 설정 https://tomatohj.tistory.com/81 에서 이어집니다. 이제는 실제로 배포할 웹 서버 2대를 구성할 것이다. Jenkins를 이용해서 Blue/Green 형태의 무중단 배포를 구현할 것이기에, 동일한 환경의 컨테이너 2개를 생성한다. 'docker run -it --name [이름] ubuntu' 명령어로 이름만 다른 2개의 컨테이너를 생성한 뒤, 2개 컨테이너 모두 'apt update && apt install -y vim net-tools openjdk-17-jdk ssh psmisc'를 수행한다. 이 과정을 통해 웹 서버에서 필요한 모든 패키지를 다운로드 받게 된다. 2개 서버 모두 설치가 끝나면. 'service ssh start' 명령어를 실행시켜 ssh server를 동작..
[DevOps 구축하기 2] Jenkins와 Github 연결하기 https://tomatohj.tistory.com/80에서 이어집니다. 설치된 Jenkins의 좌측 상단 '새로운 Item' 버튼을 클릭한다. 이름은 자유롭게 설정하고 종류는 'Freestyle project'를 선택한 뒤 OK 버튼을 누른다. 소스 코드 관리쪽으로 이동하여 Git을 선택하면, 연결할 Repository URL과 Github 인증을 위한 정보를 추가해야함을 알 수 있다. Github으로 이동하여 이 정보들을 알아내보자 환경 구성에 이용할 웹 애플리케이션은 WebGoat라는 오픈소스 웹 애플리케이션이다. 아래 링크로 접근하면 Github에 올라가 있는 공식 Repository를 확인할 수 있다. https://github.com/WebGoat/WebGoat GitHub - WebGoat/..
[DevOps 구축하기 1] Jenkins 설치 및 초기 설정 아래 그림과 같이 간단한 DevOps 아키텍처를 Docker를 이용하여 로컬 환경에 구성할 것이다. 로컬 환경에 Docker를 이용하여 구축할 것이므로, Linux가 아닌 Windows나 Mac이라면 Docker Desktop을 필요로 한다. (Linux는 바로 Docker Engine을 설치하면 된다.) 가능하다면 모든 컨테이너는 Stop(종료) 상태로 진행하는 것을 추천한다. 예상치 못한 오류를 예방할 수 있는 가장 좋은 방법이기 때문이다. VirtualBox나 Vmware와 같은 가상머신으로는 동일한 환경을 구성할 수 없으니 반드시 Docker를 이용해야한다. 'docker run -it --name jenkins -p 8080:8080 ubuntu' 명령어로 Jenkins 실행을 위한 ubuntu..
[WebGoat] Injection-Cross Site Scripting 풀이 이번챕터는 XSS에 대한 내용을 담고있다. 원래 XSS는 Injection과 별개로 OWASP에서 항목이 있었는데, 2021 항목에서 Injection에 포함되었다. XSS도 어찌보면 클라이언트사이드 코드 인젝션처럼 볼 수 있으니, 이해가 된다. 문제 풀어보자. (첫번째 문제는 그냥 체크박스 클릭만 하면 되기때문에, 그냥 넘어가고 다음문제부터 풀이하겠다) Reflected XSS 문제이다. alert나 console.log를 실행시키면 되는 문제인데, 일단 지금 당장은 공격을 할 부분이 마땅히 보이지 않으니, Purchase를 눌러보자. Purchase 버튼을 누르니, 추가 정보가 서버로부터 응답되었다. 응답된 정보를 살펴보다보니, 입력되어있던 credit card number가 응답값에 노출됨을 확인할..
[WebGoat] Injection-Path traversal 풀이 Path traversal 취약점에 대한 챕터이다. 한글로는 경로 탐색 또는 디렉터리 탐색 취약점이라고 한다. 쉽게 설명하면 개발자가 의도한 경로에서 임의로 벗어나 어떠한 행위를 하거나 정보를 조회하는 등의 행위를 할 수 있는 취약점을 의미한다. 문제를 한번 보자. 첫번째 문제를 보니... 임의의 경로에 파일을 업로드하면 풀리는 문제로 보인다. 우선 파일을 업로드 할 수 있는 부분은 프로필 사진밖에 없으니, 프로필 사진을 업로드 한 뒤 Update를 시도해보자 파일명 testtesttest.png를 이용해 업로드했는데, 응답을 보니 /root/.webgoat-2023.3/PathTraversal/testtest/asdf 경로에 저장된다고 한다. 보아하니 testtest까지는 고정이고 그 뒤 경로는 Ful..
[WebGoat] Injection-SQL Injection (mitigation) 풀이 이번엔 SQL Injection 대응 방안에 대한 내용이다. Static Queries 방법을 사용했을때 문제가 발생하고, 우리는 Parameterized Queries 방법이나 아니면 정적인 쿼리만을 수행하는 Stored Procedures 방법을 사용하면 된다. Stored Procedure란 실행시킬 쿼리를 하나의 명령어처럼 만들어서, 이를 호출해서 사용하도록 하는 방식이다. 주로 Safe Stored Procedure 방식을 사용하기에, SQL Injection으로 부터 보호받을 수 있으나, 간혹 Injectable하게 procedure안에 또 다른 쿼리를 넣어 dynamic하게 만드는 실수를 하는 개발자분들이 있다. 이 경우 SQL Injection으로부터 위험해진다. 또 여기 설명은 되어있지 ..
[WebGoat] Injection-SQL Injection (advanced) 풀이 SQL Injection 고급 버전 챕터이다. 조금더 어려운 내용을 다루고 있다고 생각하면 된다. 문제풀러 가자. 이번 문제는 다른 테이블에 있는 데이터를 조회하는 SQL Injection 문제이다. 다른 테이블에 있는 데이터를 조회하기 위해서는 몇가지 방법이 존재한다. 이전에 학습한 쿼리체이닝, 그리고 Union 마지막으로 서브쿼리형태가 있다. 이번 문제의 경우 Union방식 또는 쿼리체이닝 방식으로 풀수가 있다. 먼저 쿼리체이닝부터 테스트를 진행해보자. 공격은 Name에 진행하고 Password는 실제 찾아낸 정보를 인증하는 부분이다. Name에 우선 임의의 값을 넣고 ';를 넣어 문자열 범위를 임의로 종료시킨 뒤, 쿼리를 임의로 종료시키고 이어 select * from user_system_data..