웹 모의해킹 스터디/과제 (16) 썸네일형 리스트형 서비스 거부 공격 (Denial of Service, DoS) 공격 종류 DoS 공격이란? : 시스템을 악의적으로 공격해서 해당 시스템의 자원을 부족하게 하여 원래 의도된 용도로 사용하지 못하게 하는 공격 DoS 공격의 종류 DoS 공격의 종류는 자원 고갈 공격과 취약점 공격으로 나뉜다. 자원 고갈 공격은 내트워크 대역폭이나 시스템의 자원을 소모시키는 형태고, 죽음의 핑, SYN 플러딩, 스머프 공격 등이 있다. 취약점 공격은 특정 형태의 오류가 있는 네트워크 패킷 처리 로직에 문제가 있을 때 공격 대상이 그 문제점을 이용하여 오작동을 유발하는 형태이다. 랜드어택, 봉크/보잉크, 티어드롭 등이 여기에 해당한다. 1. SYN 플러딩 공격 TCP 프로토콜의 3 Way Handshake 연결방식의 문제를 이용한 공격이다. 클라이언트가 SYN만 보내고 아무런 동작을 하지 않는다면 해.. [SQL Injection] CTF - SQL Injection Point 4 문제풀이 기억하자. SQL Injection에서는 참/거짓에 따라 달라지는 응답을 확인해야함을. + select 문만 사용 or 사용 금지 주석 사용 금지 마이페이지 쿠키 user에 id가 담겨있는 것을 확인 참인 쿼리를 날렸을 때 결과와 거짓인 쿼리를 날렸을 때 결과가 동일 이럴 땐 db 에러를 유발해보고 에러가 출력되는지 확인 db 에러가 출력되므로 조건이 참일 때 db 에러를 유발시켜 참/거짓의 결과가 다르게 나오도록 하자 qwe' and (select 1 union select 2 where(1=1)) and '1'='1 를 이용해서 1=1 부분에 쿼리를 입력해서 참이면 select 1 union select 2로 구조체가 응답되게 하여 db에러를 유발하고, 거짓이면 select 1이 응답되어 결과가 기존.. [SQL Injection] CTF - SQL Injection Point 3 문제풀이 기억하자. SQL Injection에서는 참/거짓에 따라 달라지는 응답을 확인해야함을. sort라는 파라미터가 있는걸 봐서 order by에 쓰일 것으로 예상됨 sort 값을 1로 줬을 때 2로 줬을 때 확실하다 order by에서 참/거짓을 이용해보자 case when (조건) then (참일 때) else (거짓일 때) end 구문을 사용할 것이다 참일때 (조건을 1=1로 설정) 거짓일 때 (조건을 1=2로 설정) 거짓일 때는 select 1 union select 2 즉, 구조체가 응답이 된 것이니 정렬이 불가하다 그래서 아무 게시물도 나타나지 않은 것이다 아무튼 차이가 아주 확연하다 이제 조건 부분에 sql 문을 넣어 db 부터 추출하면 될 것이다 자동화를 이용하자 import requests i.. [SQL Injection] CTF - SQL Injection Point 2 문제풀이 게시판 검색창에 작성자로 sdf를 검색하면 다음과 같이 파라미터가 전달되는 것을 확인 전달되는 파라미터를 확인했으니 db에서 사용하는 SQL 문을 대략적으로 추측해보면 select * from 테이블 where username like '%sdf%' and ~~~ 이런 식일것 같다. 추측한 sql 문을 이용해보자 option_val에 1=1 and username을 입력하면 select * from 테이블 where 1=1 and username like '%sdf%' and ~~~ 1=2 and username을 입력하면 select * from 테이블 where 1=2 and username like '%sdf%' and ~~~ 확인해보자 option_val에 1=1 and username을 입력했을.. [SQL Injection] CTF - SQL Injection Point 1 문제풀이 사실 푼건 진작인데 기억이 가물가물해가서 정리해본다 기억하자. SQL Injection에서는 참/거짓에 따라 달라지는 응답을 확인해야함을. 마이페이지에 접속해보면 쿠키의 user에 id가 담겨 있는 것을 확인 user에 sdf' and '1'='1과 sdf' and '1'='2를 넣었을 때 info의 placeholder 값이 다른 것을 확인 ==> sqli 취약점 발견 취약점을 찾았으니 어떻게 정보를 빼낼지 생각해야한다. 여기선 error based나 union based는 사용할 수 없으므로 blind로 가야한다. 파이썬으로 자동화 코드를 작성해서 추출해보자. import requests import urllib.parse url = "http://ctf.segfaulthub.com:7777/sqli.. [CSRF] CTF - GET Admin 1 문제풀이 첫번째 방법 마이페이지에서 비밀번호를 수정했을 때 id, info, pw가 파라미터로 넘어가는 것을 확인 Change request method (POST 방식을 GET 방식으로 바꿈) => Copy Url 해서 주소창에 입력했을 때 정보가 수정되는 것을 확인 관리자가 게시글을 열람하면 비밀번호가 변경되는 URL에 접근되도록 img 태그를 작성 (xss 취약점이 존재하는 것은 사전에 확인함) 위 게시글의 URL에 관리자가 접근하도록 유도해서 비밀번호가 변경되게 한 후 관리자 계정으로 로그인하면 플래그 탈취 성공 두번째 방법 비밀번호가 수정되면 수정이 완료됐다는 alert 창이 뜨지 않도록 iframe에 sandbox 속성을 주어 자바스크립트가 실행되지 않게 함 이후 과정은 동일 [JavaScript] CTF - Steal Info 문제 풀이 (Dom 접근조작으로 중요정보 탈취) 중요 정보가 있는 페이지와 똑같은 페이지에서 This is a Very Secret Info. 부분의 class가 'card-text'인 것을 확인함 document.getElementByClassName('card-text')를 이용해서 정보를 추출하면 될 것으로 예상됨 게시글 부분에서 스크립트가 삽입되는 것을 확인했으니 iframe 태그로 다른 페이지에 있는 정보를 추출해낼 것이다 으로 현재 게시글 페이지에 중요 정보가 있는 페이지를 삽입한다. 이후 스크립트로 중요 정보가 있는 페이지에 접근하여 중요 정보를 img 태그로 공격자 페이지에 전송한다. 자세한 절차는 아래 게시글에 정리해두었다 https://studysteadily.tistory.com/28 11주차 수업 정리 - 2 (JavaScript.. [JavaScript] CTF - Basic Script Prac 문제 풀이 (Dom 접근조작으로 중요정보 탈취) 문제 URL의 user 값을 임의로 변경했을 때 개인정보의 이름 또한 바뀌는 것을 확인 user 값을 sdf">로 변경한 요청을 보낸 후 응답을 통해 스크립트가 삽입되는 것을 확인 +) 마이페이지에 들어가면 대놓고 Flag Here라고 적혀있다. HTML 코드를 확인해보면 name 속성 값이 info로 되있는 것을 확인할 수 있다. 이걸 이용해서 플래그가 있는 태그에 접근한 후 placeholder 속성 값을 가져오면 된다. user 값에 관리자의 중요 정보가 공격자 페이지로 전달되도록 하는 img 태그를 작성함 (공격자 페이지는 Request bin을 이용함) 관리자가 위의 URL에 접근하여 flag가 공격자 페이지로 전송되게 함 공격자 페이지에서 flag 확인 이전 1 2 다음