ブログ - とにかくたくさん攻撃を受けるので反撃したいが ZIP爆弾
ウェブサイトに侵入してくる相手にZIP爆弾を送りつけて撃退する方法
https://gigazine.net/news/20240120-how-to-defend-your-website-with-zip-bombs/
引用:
ファイルは簡単に作成できる.
設置する場所を検討.まずはWordPress関係かな.
圧倒的にwp-login.phpが多い.ブルートフォースの試行でしょう.
そして別の静的サイトではこのような順序.
そして実装してみる.
https://gigazine.net/news/20240120-how-to-defend-your-website-with-zip-bombs/
引用:
セキュリティの不十分なサーバーを見つけるためにウェブサイトには日々多数の不審なアクセスが行われています。そうしたアクセスをしてくる相手に対して解凍すると容量が膨れ上がる「ZIP爆弾」を送りつけて撃退する方法がブログにまとめられています。
ファイルは簡単に作成できる.
$ dd if=/dev/zero bs=1M count=10240|gzip > 10G.gzip
10240+0 records in
10240+0 records out
10737418240 bytes (11 GB, 10 GiB) copied, 52.7252 s, 204 MB/s
$
設置する場所を検討.まずはWordPress関係かな.
$ grep wp- access.log*|awk '{print $7}'|sort|uniq -c|sort -r|more🆑
652 /wp-login.php🈁
55 /wp-content/uploads/
55 /modules/wp-login.php
52 /wp-head.php
49 /wp-includes/
49 /wp-content/
48 /wp-admin/
45 /wp-content/plugins/
44 /wp-content/themes/
42 /wp-admin/network/cloud.php
39 /wp-admin/user/cloud.php
39 /wp-admin/images/cloud.php
38 /wp-admin/css/colors/coffee/cloud.php
38 /wp-admin/css/colors/blue/cloud.php
37 /wp-admin/cloud.php
36 /wp-content/themes/seotheme/db.php?u
36 /wp-admin/js/widgets/cloud.php
36 /wp-admin/includes/cloud.php
35 /wp-includes/ID3/
35 /wp-admin/css/colors/cloud.php
32 /wp-includes/rest-api/
32 /wp-includes/Text/
32 /wp-includes/SimplePie/
そして別の静的サイトではこのような順序.
sh-3.2# grep .php ipaccess.log.1* |awk '{print $7}'|sort|uniq -c|sort -r|head -n 20
743 /xmlrpc.php?rsd
701 /modules/d3blog/index.php?cid=99
374 /wp-login.php
346 /info.php
339 /systembc/password.php
303 /1.php
290 /?XDEBUG_SESSION_START=phpstorm
282 /upl.php
268 /password.php
211 /vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php
138 /_profiler/phpinfo
135 /admin.php
114 /dropdown.php
103 /repeater.php
102 /alfanew.php7
102 /alfanew.php
101 /wp-includes/ID3/about.php
101 /phpinfo.php
100 /.well-known/pki-validation/about.php
98 /wp-content/themes/about.php
sh-3.2#
まずは,小さいテストファイルを作成.
作成されたファイルのハッシュ値をとる.手段はなんでも良いが,ここではmacOSでMD5をとる.
おとりのログインPHPファイルを作成.
サーバ(ここでは192.168.1.1)に設置して,curlコマンドでアクセス.
ファイルがダウンロードされそうだが保存先を設定する必要がある.
outputオプションでファイル名を指定し,再度実行.ダウンロードしたファイルのハッシュ値を取得して,元のファイルとの差分がないことを確認.
これで正常動作ができたので,10GBファイルに置き換えれば完了.
ちなみに,curlコマンドで10G.gzipをダウンロードしても自動伸張しないので被害は無い.ヘッドレスブラウザなどを使って自動ログインを試みている場合に意味があるのだろうと考えられる.
$ dd if=/dev/zero bs=1M count=1|gzip > test.gzip
1+0 records in
1+0 records out
1048576 bytes (1.0 MB, 1.0 MiB) copied, 0.004967 s, 211 MB/s
$
$ md5sum test.gzip🆑
1b72b43217dd60d5789002988dd7d938 test.gzip
$
<?php
//prepare the client to recieve GZIP data. This will not be suspicious
//since most web servers use GZIP by default
header("Content-Encoding: gzip");
//header("Content-Length: ".filesize('10G.gzip'));
header("Content-Length: ".filesize('test.gzip'));
//Turn off output buffering
if (ob_get_level()) ob_end_clean();
//send the gzipped file to the client
//readfile('10G.gzip');
readfile('test.gzip');
$ curl http://192.168.1.1/wp-login.php🆑
Warning: Binary output can mess up your terminal. Use "--output -" to tell
Warning: curl to output it to your terminal anyway, or consider "--output
Warning: <FILE>" to save to a file.
$
outputオプションでファイル名を指定し,再度実行.ダウンロードしたファイルのハッシュ値を取得して,元のファイルとの差分がないことを確認.
$ curl http://192.168.1.1/wp-login.php --output downloadfile.bin🆑
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1051 100 1051 0 0 96732 0 --:--:-- --:--:-- --:--:-- 102k
$ md5sum downloadfile.bin🆑
1b72b43217dd60d5789002988dd7d938 downloadfile.bin
$
ちなみに,curlコマンドで10G.gzipをダウンロードしても自動伸張しないので被害は無い.ヘッドレスブラウザなどを使って自動ログインを試みている場合に意味があるのだろうと考えられる.