para-code

DefCamp 문제로 풀이에 참여하였던 문제입니다.

 

Description :

I do not think that this API needs any sort of security testing as it only executes and retrieves the output of ID and PS commands.

 

해당 API는 ID, PS 명령만 출력, 실행, 검색하므로 보안 테스트가 필요하지 않다고 알려주고 있습니다.

문제 페이지로 접속 해보도록 하겠습니다.

 

 

문제 분석

 

본 문제의 페이지는 php 코드를 출력해주기 때문에 가독성을 위해 코드로 대체하였습니다.

<?php
require __DIR__ . '/flag.php';
if (!isset($_GET['start'])){
    show_source(__FILE__);
    exit;
} 

$blackList = array(
  'ss','sc','aa','od','pr','pw','pf','ps','pa','pd','pp','po','pc','pz','pq','pt','pu','pv','pw','px','py','pq','pk','pj','pl','pm','pn','pq','pf','pz','pv','pw','px','py','pq','pk','pj','pl','pm','pn','pq','pf','pz','pv','pw','px','py','pq','pk','pj','pl','pm','pn','pq','pf','pz','pv','pw','px','py','pq','pk','pj','pl','pm','pn','pq','pf','pz','pv','pw','px','py','pq','pk','pj','pl','pm','pn','pq','pf','pz','pv','pw','px','py','pq','pk','pj','pl','pm','pn','pq','pf','pz','pv','pw','px','py','pq','pk','pj','pl','pm','pn','pq','pf','pz','pv','pw','px','py','pq','pk','pj','pl','pm','pn','pq','pf','pz','pv','pw','px','py','pq','pk','pj','pl','pm','pn','pq','pf','pz','pv','pw','px','py','pq','pk','pj','pl','pm','pn','pq','pf','pz','pv','pw','px','py','pq','pk','pj','pl','pm','pn','pq','pf','pz','pv','pw','px','py','pq','pk','pj','pl','pm','pn','pq','pf','pz','pv','pw','px','py','pq','pk','pj','pl','pm','pn','pq','pf','pz','pv','pw','px','py','pq','pk','pj','pl','pm','pn','pq','ls','dd','nl','nk','df','wc', 'du'
);

$valid = true;
foreach($blackList as $blackItem)
{
    if(strpos($_GET['start'], $blackItem) !== false)
    {
         $valid = false;
         break;
    }
}

if(!$valid)
{
  show_source(__FILE__);
  exit;
}

// This will return output only for id and ps. 
if (strlen($_GET['start']) < 5){
  echo shell_exec($_GET['start']);
} else {
  echo "Please enter a valid command";
}

if (False) {
  echo $flag;
}

?>

 

해당 페이지의 코드는 크게 3가지로 보입니다.

  1. filtering
  2. shell_exec
  3. echo $flag

우선 문자열 필터링은 $blackList 변수를 선언하여 2글자인 명령어를 사용 불가하게 조치를 취한것으로 보입니다.

두 번재로 shell_exec는 start라는 파라미터를 통해 GET 방식으로 사용자에게 값을 입력받으며 명령어로 사용합니다.

이때 사용자로부터 받는 입력값은 코드상 4글자로 제한 되어 있습니다.

 

필터링 된 두 글자 명령어들과 env, set을 확인하여 추출해 보았습니다.

더보기
set.txt
0.01MB
env.txt
0.01MB
2char_cmd_result.txt
0.00MB

이때 필터링 되어 있는 명령어는 l"s" 혹은 l\s 와같이 중간에 특수문자를 입력하여 우회하였습니다.

 

 

ls result

ls 명령어를 통해 flag.php 파일이 존재한다는 것을 확인하였습니다.

 

※정리※

  • flag.php 읽기
  • 입력값 4글자
  • 공백과 "*" 사용 필수적이므로 사실상 2글자 명령어

 

 

문제 풀이

결국에는 특정 명령어를 찾는 문제였습니다.

m4라는 두 글자 짜리 명령어가 존재합니다.

view-source:http://34.159.7.96:32210/?start=m4%20*

 

해당 명령어를 사용하여 view-source 페이지에서 flag를 확인할 수 있습니다.

<?php

$flag = "791b21ee6421993a8e25564227a816ee52e48edb437909cba7e1e80c0579b6be";

?>

'Challenge > CTF' 카테고리의 다른 글

[MHSCTF] Em Dee  (0) 2022.02.20
[DefCamp CTF 21-22] casual-defence  (0) 2022.02.15
[DefCamp CTF 21-22] web-intro  (0) 2022.02.15
[Intent CTF] Graphics  (0) 2021.11.30
[Intent CTF] Etulosba  (0) 2021.11.25

web-intro

DefCamp에 참여하여 풀이에 참여한 문제입니다.

 

Description :

  1.  Are you an admin?
  2.  note: Access Denied is part of the challenge

Clinet가 admin인지에 대하여 묻고 있고 Acess Denied 또한 문제의 일부라고 알려주고 있습니다.

문제 페이지로 접속 해보도록 하겠습니다.

 

 

문제 분석

challenge page

앞서 말한 Acess Denied는 이 페이지를 두고 하는 말인것 같습니다.

개발자 도구를 사용하여 페이지 소스, 네트워크 등을 확인해 보았지만 해당 페이지 하나와 cookie값만 확인 되었습니다.

이때 session이라고 적힌 쿠키의 형태를 보고 jwt인 느낌을 강하게 받아 복호화를 진행하였습니다.

 

jwt decrypt

복호화 결과 "logged_in": false 값을 보고 jwt라는 확신이 들었습니다.

"Are you an admin?" "logged_in": false

위 두가지를 통해 false 대신 admin 혹은 True 값을 시도해 보았으나 맞지 않았습니다.

그렇기에 jwt crack을 사용하여 사전 대입 공격을 수행하였습니다.

 

jwt-cracker

 

secret key로 password가 나온것을 확인할 수 있습니다. 

이를 사용하여 인증해보도록 하겠습니다.

 

 

문제 풀이

authentication

 

secret key를 사용하여 새로운 session값을 얻었습니다.

획득한 값을 cookie에 입력해주면 FLAG가 출력 됩니다.

 

You are logged in! CTF{66bf8ba5c3ee2bd230f5cc2de57c1f09f471de8833eae3ff7566da21eb141eb7}

 

'Challenge > CTF' 카테고리의 다른 글

[DefCamp CTF 21-22] casual-defence  (0) 2022.02.15
[DefCamp CTF 21-22] para-code  (0) 2022.02.15
[Intent CTF] Graphics  (0) 2021.11.30
[Intent CTF] Etulosba  (0) 2021.11.25
[Intent CTF] Careers  (0) 2021.11.22

+ Recent posts