목록Web (72)
김승현
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/의 경로에서 벗어난 후 ..
들어가면 이렇게 생겼고 동그라미가 있고 오른쪽 끝엔 Goal이라는 목표지점이 있다. 마우스를 가져다대면 yOu라고 바뀌고 클릭하면 미세하게 오른쪽으로 이동한다. 이 코드가 이동하는 지점의 코드인데 posistion을 보면 나는 left: 1px이고 if(구문을 보면 this.style.left==1600px라는 게 있는 걸 봐선 1600px까지 이동해야 되는 것 같아 보인다. 그리고 onclick을 봐선 클릭하면 1만큼 이동하는 것 같다. 내 위치를 1590으로 고쳐주고 여기서 10만큼 이동하도록 10번만 클릭해보자. 짠 25점짜리 답게 되게 간단한 문제였다. 도착지점을 2px위치로 해도 되지 않을까라고 생각이 들어서 해봤는데 이렇게 왼쪽 아래에 no hack이라고 뜨며 막았다. 내가 푼 방법이 정석적인..
접속하면 이렇게 생겼다. 1번을 누르면 apple 2번은 바나나 3번은 Secret이다. column으로 id와 no가 있다는 걸 보면 sqli와 관련이 있어보인다. password에 입력해봤는데 pw파라미터로 입력되는 걸 알 수 있었고 숫자는 no 파라미터인 걸 알 수 있다. 처음엔 password에 시도를 계속 해봤는데 딱히 변하는 게 없었다. password는 아마 secret의 id 값을 입력하는 데인 것 같은데 입력이 11자로 제한된 걸 보니 id가 11자리 문자열인 것 같다. no파라미터에 length(5)라는 값을 입력했는데 apple이 뜨는 걸로 봐선 여기에 sqli를 시도하면 될 것 같다. if(length(id)like(11),3,0) 이렇게 입력해줬다. 만약 id의 길이가 11이면 n..
접속하면 이렇게 hi guest라는 게 뜬다. 딱히 이 페이지의 소스를 보거나 해서는 얻을 힌트가 없는 것 같으니 view-source를 눌러 코드를 확인해보자. view-source를 보면 이렇게 긴 코드를 볼 수 있다. 해석해보자.
문제는 이렇게 생겼고 코드를 분석해보자. include "./config.php"; login_chk(); $db = dbconnect(); if(preg_match('/prob|_|\.|\(\)/i', $_GET[no])) exit("No Hack ~_~"); if(preg_match('/\'/i', $_GET[pw])) exit("HeHe"); if(preg_match('/\'|substr|ascii|=/i', $_GET[no])) exit("HeHe"); 첫 번째 줄은 ./config.php를 포함한다는 내용입니다. 두 번째 줄은 로그인을 했는지 체크하는 내용입니다. 세 번째 줄은 db를 연결합니다. if문들은 필터링 관련 내용입니다. (preg_match란 정규 표현식에 해당 내용이 발견되면 검색..
문제는 이렇게 생겼다. 코드를 분석해보자. include "./config.php"; login_chk(); $db = dbconnect(); if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~"); if(preg_match('/or|and|substr\(|=/i', $_GET[pw])) exit("HeHe"); 첫 번째 줄은 ./config.php를 포함한다는 내용입니다. 두 번째 줄은 로그인을 했는지 체크하는 내용입니다. 세 번째 줄은 db를 연결합니다. if문들은 필터링을 하는 내용입니다. 필터링 내용 no hack 1. prob 2. _ 3. . 4. ( 5. ) hehe 1. or 2. and 3. substr 4. = 위의 문자들..