목록Web/PicoGym (15)
김승현
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/의 경로에서 벗어난 후 ..