김승현
[PicoGym] picoCTF caas 풀이 본문
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}, (error, stdout) => {
if (error) return res.status(500).end();
res.type('txt').send(stdout).end();
});
});
app.listen(3000, () => {
console.log('listening');
});
위에서 const로 exec를 정의했는데 이건 child_process 모듈에서 셸 스크립트를 실행하게 하는 exec를 받아오는 코드
exec함수에서 /usr/games/cowsay이 후 message라는 파라미터를 받아서 실행하는 걸 볼 수 있다.
명령어를 실행하는 문제이고 경로가 있는 것으로 봐선 현재 경로에 있는 파일들 중 flag를 읽으면 될 것 같고,
임의의 명령어를 실행시키기 위한 방법으론 command injection을 떠올릴 수 있다. 한번 시도해보자.
hi; ls를 입력하니까 해당 디렉토리에 존재하는 파일들을 나열해준다. falg.txt를 cat으로 읽어보자.
'Web > PicoGym' 카테고리의 다른 글
[PicoGym] picoCTF Irish-Name-Repo 1 풀이 (0) | 2023.05.23 |
---|---|
[PicoGym] picoCTF Soap 풀이 (0) | 2023.05.20 |
[PicoGym] picoCTF Power Cookie 풀이 (0) | 2023.05.20 |
[PicoGym] picoCTF Web Gauntlet 풀이 (0) | 2023.05.18 |
[PicoGym] picoCTF Forbidden Paths 풀이 (0) | 2023.05.18 |