목록분류 전체보기 (151)
김승현
이전 문제와 비슷한 것 같다. 접속해보자. vvvv Irish-Name-Repo 1문제 링크는 여기 vvvv [PicoGym] Irish-Name-Repo 1 웹사이트에서 로그인을 해보라는 문제인 것 같다. 접속하면 이렇게 사람들 얼굴이 뜨고 왼쪽 위에 메뉴창이 있다. 메뉴를 눌러보자. 누르면 이렇게 close Menu, Support, Admin Login페이지가 뜬다. 당연 kshind.tistory.com 바로 Admin Login 페이지로 넘어가보자. (admin login 등 처음 보는 개념이라면 위의 주소로 갔다 와보자) 딱히 다른 게 없어 보인다. ' or 1=1 -- 위의 쿼리문을 입력해보자. 그랬더니 SQLi가 감지됐다고 한다. username 부분을 고쳐가면서 검사하는 부분을 확인해보자..
웹사이트에서 로그인을 해보라는 문제인 것 같다. 접속하면 이렇게 사람들 얼굴이 뜨고 왼쪽 위에 메뉴창이 있다. 메뉴를 눌러보자. 누르면 이렇게 close Menu, Support, Admin Login페이지가 뜬다. 당연히 Admin Login으로 가보자. 그냥 가볍게 SQL Injection을 해보면 될 것 같다. ' or 1=1 -- 위와 같이 입력해보자. 아주 간단하게 문제가 풀렸다. 300점 치곤 난이도가 진짜 너무 쉽다. 아마 이름 보고 어려워 보여서 안 푼 건가..? 사실 내가 어려워 보여서 손 안 대던 문제긴 하다.
soap문제이고 힌트로는 XML external entity Injection라고 적혀있다. 제목에 적혀있는 soap란 XML 기반의 메시지를 컴퓨터 네트워크 상에서 교환하는 프로토콜이라고 하고 힌트처럼 XML과 관련된 공격을 찾아보면 될 것 같다. 일단 웹사이트로 가보자. 접속하면 이런 화면이 나온다. details를 눌러보자. 이런 자세한 정보가 나오는 것 같다. 프록시를 잡아서 바꿔보자. 이렇게 xml이 있는데 ID 태그 내의 숫자의 범위가 아마도 1~3인 것 같으니 0을 넣어서 보내보자. 사용 불가능한 ID라고 한다. SOAP와 XML에 대해서 검색해보니까 XXE라는 공격이 있는 것 같다. 시도해보자. 이런식으로 xml에 /etc/passwd를 확인하는 코드를 작성했다.
power cookie라는 문제고 웹사이트에서 flag를 찾으라고 한다. 웹사이트로 이동해보자. 접속하면 이렇게 생겼다. continue as guest를 클릭해보자. check.php로 이동이 되고 guest로는 서비스를 이용할 수 없다고 한다. 소스코드를 확인해보자. Online Gradebook Continue as guest index.html의 내용이고 잘 보면 script태그로 guest.js를 실행한다. 아까 guest일 때는 서비스를 이용할 수 없다고 했기 때문에 guest.js도 한번 확인해보자. function continueAsGuest() { window.location.href = '/check.php'; document.cookie = "isAdmin=0"; } /check.ph..
필터링을 피해서 admin으로 로그인하라고 한다. 일단 기본 웹사이트로 접속해보자. 이렇게 로그인하는 창이 뜬다. filter.php로 가보자. round1의 필터는 or이라고 한다. or 대신 ||을 쓸 수도 있지만 그냥id에 admin' --만 입력해도 클리어할 수 있다. 이젠 or과 and 그리고 =과 =을 우회할 떄 사용되는 like랑 주석인 --가 필터링되었다. 이번엔 주석으로 --대신 ;를 사용해보자. ;는 쿼리문의 마무리를 알려주는 특수문자여서 뒤는 무시하게 해준다. 똑같이 입력해보자. 이번엔 admin이 필터링 됐다. adm' || 'in'과 같이 입력해도 admin으로 받아들여진다. 입력해보자. 똑같이 입력해보자.
caas라는 제목의 웹이 있따고 한다. 일단 웹사이트로 가보자. 주소에 /cowsay/{하고싶은말}을 적으면 소가 말을 해준다고 한다. 아무거나 입력해보자. 이렇게 그려진 소가 hi라고 말하게 한다. 문제에 같이 제공된 index.js를 확인해보자. 문제는 이렇게 생겼다. const express = require('express'); const app = express(); const { exec } = require('child_process'); app.use(express.static('public')); app.get('/cowsay/:message', (req, res) => { exec(`/usr/games/cowsay ${req.params.message}`, {timeout: 5000},..
website의 파일들은 /usr/share/nginx/html/에 저장된다고 하고 flag는 flag.txt라고 한다. 근데 절대 파일 경로는 필터링하고 있다는 것 같다. 문제 사이트로 접속해보자. 문제 사이튼 이렇게 생겼고 파일이름을 입력해서 read하는 방식인 것 같다. 위의 파일 이름 the-happy-prince.txt를 입력해보자. 이렇게 read.php로 이동이 되면서 책 내용이 나온다. 아마 flag.txt를 입력해서 얻으면 될 것 같다. 일단 flag.txt를 입력해보자. 위와 같이 현재 경로엔 flag.txt가 존재하지 않는 것 같다. ../를 이용해서 경로를 찾아가면 될 것 같다. 처음에 절대경로가 필터링되었다는 걸 보면 /usr/share/nginx/html/의 경로에서 벗어난 후 ..
파라미터 변조란? 말 그대로 파라미터에 있는 값을 변조하여 의도치 않은 행위를 수행하는 공격. GET메서드의 경우 URL에 파라미터가 그대로 드러나서 변조하기 용의하나, POST나 PUT의의 경우 요청 body에 파라미터가 포함되기 때문에 request와 response를 중간에 수정할 수 있어야 함 -> 이렇게 네트워크를 통해 오가는 request, response 내용을 변조하기 위해 프록시 서버를 이용해야 한다. 프록시 서버란? 클라이언트와 서버가 통신하는 과정 중간에 존재하며 이 통신을 연결해주는 역할의 서버. 클라이언트로부터 요청을 받아 서버에게 전달하고 서버로부터 응답을 받아 클라이언트에게 전달 -> 중간에서 요청, 응답에 대한 확인 및 수정이 가능함 : 변조 가능 프록시 서버를 제공하는 프로..
xss란? cross site scripting의 줄임말로 공격자가 상대방의 브라우저에 스크립트가 실행되도록 해 사용자의 세션을 가로채거나, 웹사이트를 변조하거나, 악의적 콘텐츠를 삽입하거나, 피싱 공격을 진행하는 것 Cross site scripting인데 xss인 이유 - 웹 프론트엔드에서 디자인을 담당하는 언어가 이미 css라는 이름을 가지고 있기 때문 데이터베이스를 대상으로 한 공격인 sqli와 다르게 사용자들을 대상으로 하는 공격임 xss의 종류 xss에는 크게 Reflected XSS, Stored XSS, DOM Based XSS가 있다. Reflected XSS 반사라는 뜻을 가진 reflected를 사용하는 것처럼 xss공격 구문이 포함된 URI로 사용자가 접근을 해야지만 발생하는 xss..
sql injection이란? 해석하게 되면 sql 삽입이며 sql에 악의적인 쿼리를 삽입하여 실행하게 만드는 것. 이때 악의적인 쿼리를 payload라고 함 데이터베이스를 대상으로 하는 공격이기 때문에 정보에 대한 조회, 수정, 삭제를 할 수 있기 때문에 크리티컬함 sqli가 가능한 이유: 아이디 또는 비밀번호를 ''(작은 따옴표)를 기준으로 범위를 지정해서 문자열을 받는 방식인데, 아이디에 admin' or 1=1 --과 같은 방식으로 싱글쿼터를 사용해서 강제적으로 범위를 닫아서 질의문의 내용을 바꿈 여기서 --는 sql에서 주석을 의미함. -> 따라서 1=1 뒷 부분은 모두 주석처리가 되기 때문에 admin이라는 아이디를 가진 계정에 접근하게 됨 우리가 접속해야 할 아이디가 admin인 것을 아는 ..