Author:Weil Jimmer

Found 139 records. At Page 6 / 28.

BadUSB 初體驗 Arduino Duckuino Hid Keyboard Attack

-
更新於

最近不知道為啥,突然心血來潮一直想要來編譯 USB隨身碟,做一支 BadUSB,遺憾的是一直找不到目標型號的控制器(Controller)。後來搜尋,沒想到網路上竟然已經有賣類似功能的東西了!

BadUSB 顧名思義就是壞的 USB 碟,會執行一些程式碼,可能會讓電腦受損,而這類攻擊都是需要實體插入電腦裡面的,並且,防毒軟體有很大機率是掃描不到,程式碼都是在閃存控制器(Flash Memory Controller)裡面,除非很底層的軟體,否則幾乎是碰不到那區塊。

雖然一般隨身碟拿來修改的話,價格比較便宜,但是不太好操作,真正的 Rubbery Ducky 又太貴了,買不起。網路上的 Arduino 做成的微型控制器比較便宜一點。很久以前也有萌生用 Arduino 實作的想法,不過太醜了,就是一塊電路板,沒有殼,網路上找不太到賣殼的,而現在我找到的真的很精美,不是 MicroUSB 所以連轉接都不用,於是乎買來體驗一下。僅僅是測試,至於啥麼用途,可以自由發揮,例如:騙別人這是普通的隨身碟之類的,插上去就立刻變身成鍵盤執行惡意代碼。

上圖即是我網購的帶有 Arduino ATmega32U4 控制器的 USB,外觀就像正常的隨身碟,不是所有 Arduino 都可以當成鍵盤用,例如 Arduino Nano 就不行。

這樣一來就可以把 Arduino 當成 Rubbery Ducky 使用,直接實行 Hid Keyboard Attack。網路上已經有教學文章可以直接將 Rubbery Ducky 的程式碼 轉為 Arduino專用的程式碼。這樣就不太需要自己修改。

可以參考:https://github.com/Nurrl/Duckuino

DELAY 2000
GUI r
DELAY 100
SHIFT
STRING cmd
ENTER
DELAY 100
STRING shutdown -t 0 -y -s
ENTER

以上是我編譯的 Script Example,用途是立刻將電腦關機,當我實際運行時有遇到不少麻煩,好像開不了 Windows Key + R Key,最後解決方法是把

Keyboard.press("r"); 
換成
Keyboard.press('r');

就這個單雙引號害我 Debug 好久,加上 Delay 好像也沒用。覺得奇特。

運行結果如下方影片:

By Weil Jimmer


This entry was posted in Arduino, C, Experience, Functions, General, Note By .

RFID MIFARE卡 修改 UID 進入門禁系統

-
更新於

0x00 前言

最近會想寫這篇文章主要是在網路上無意間看到了RFID相關裝置,突然萌生很久以前一直想玩的事情,於是乎,就打算來實作門禁卡的複製。再加上好久沒寫文章,現在我也懶得管是不是技術成分很重才寫,以後文章我大概也是這樣,寫得很淺,除非我研究了什麼很困難的東西。

其次,真心很感謝 Joe Jimmy 的裝置贊助,不然我大概也不會去做這個實驗,至少要等到以後購買裝備時才會做起。

0x01 目的

為了通過感應 MIFARE卡 的門禁系統,因此需要複製有效的密碼卡而進入該門。

0x02 原理

目前大部分學校門禁系統都採用 13.56 MHz 頻率的 RFID 感應卡,且學生證普遍都是和悠遊卡公司合作的學生證,基本上都是有 KeyA 和 KeyB 和 控制位元保護的。因此門禁系統想用學生證刷過,"應該是"只能採用識別 UID 的方式來驗證使用者的身分,進而決定是否開放使用者進入。如果是另外發放密碼卡,則可能該密碼卡有經過加密,驗證使用者可能不是驗證 UID,若如此,這篇文章就不適用於這種驗證方法。本篇文章僅針對 UID 部分的驗證做出複製卡 (Clone Card)。

0x03 配備

  1. Arduino Mega 2560
  2. MFRC522
  3. 數張 可修改 UID 的 S50 空白卡
  4. 蜂鳴器(非必須,覺得有聲音比較好。)

0x04 結果

以下是我寫卡UID的程式碼是參考 這篇文章 寫的,稍作修改,lib 也是採用同篇 GitHub 文章。

#include <SPI.h>
#include <MFRC522.h>
#include <MFRC522Hack.h>

constexpr uint8_t RST_PIN = 8;
constexpr uint8_t SS_PIN = 9;

MFRC522 mfrc522(SS_PIN, RST_PIN);
MFRC522Hack mfrc522Hack(&mfrc522);

byte newUid[] = {0xDE, 0xAD, 0xBE, 0xEF}; //預設UID
bool write_enable = false;
int wait_sec = 0;

MFRC522::MIFARE_Key key;

void setup() {
  Serial.begin(9600);
  while (!Serial);
  SPI.begin();
  mfrc522.PCD_Init();
  Serial.println(F("Warning: this example overwrites the UID of your UID changeable card, use with care!"));
  
  for (byte i = 0; i < 6; i++) {
    key.keyByte[i] = 0xFF;
  }
}

void loop() {

  if(wait_sec>=0 && write_enable){
    wait_sec=wait_sec-1;
    delay(1000);
    if(wait_sec<2){
      tone(5, 466, 125);
    }
    if(wait_sec<=0){
      write_enable=false;
    }
  }
  
  // Look for new cards, and select one if present
  if ( ! mfrc522.PICC_IsNewCardPresent() || ! mfrc522.PICC_ReadCardSerial() ) {
    delay(50);
    return;
  }

  if(!write_enable){
    byte *id = mfrc522.uid.uidByte;
    byte idSize = mfrc522.uid.size;
    Serial.print("UID Size: ");
    Serial.println(idSize);
    if(idSize!=4){
      Serial.println(F("New UID is not 4 byte!"));
      return;
    }
    Serial.println(F("New UID set!"));
 
    for (byte i = 0; i < idSize; i++) {
      Serial.print("id[");
      Serial.print(i);
      Serial.print("]: ");
      newUid[i]=id[i];
      Serial.println(id[i], HEX);
    }
    Serial.println();
    mfrc522.PICC_HaltA();
    write_enable=true;
    wait_sec=10;
    tone(5, 740, 500);
    delay(50);
    return;
  }
  
  // Dump UID
  Serial.print(F("Card UID:"));
  for (byte i = 0; i < mfrc522.uid.size; i++) {
    Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
    Serial.print(mfrc522.uid.uidByte[i], HEX);
  } 
  Serial.println();
  
  // Set new UID
  if ( mfrc522Hack.MIFARE_SetUid(newUid, (byte)4, true) ) {
    Serial.println(F("Wrote new UID to card."));
  }
  
  // Halt PICC and re-select it so DumpToSerial doesn't get confused
  mfrc522.PICC_HaltA();
  if ( ! mfrc522.PICC_IsNewCardPresent() || ! mfrc522.PICC_ReadCardSerial() ) {
    return;
  }
  
  // Dump the new memory contents
  Serial.println(F("New UID and contents:"));
  mfrc522.PICC_DumpToSerial(&(mfrc522.uid));
  tone(5, 740, 250);
  delay(500);
  tone(5, 740, 250);
  write_enable = false;
  delay(2000);
}

以上程式碼之功能是將要被複製的卡貼近 RC522模組,然後再將要被寫入UID的卡貼近,寫入動作結束時會B兩聲,此刻再去檢查Output的值看看有沒有寫入成功。我目前的設定是第二張卡超過10秒就不寫入了,不是無限等待,要再把第一張靠近,在10秒內放入第二張卡。

學會這個小伎倆,往後只要撿到別人的學生證就有機會可以複製對方卡的資訊,之後就可以直接進入別人的宿舍。或者是有設門禁卡的公寓、公司、飯店…等場所,就可以多備份幾把鑰匙卡。紀錄UID也未必要使用模組,有NFC功能的手機就可以讀取資訊,甚至是寫入卡片資料或模擬 UID。

再次提醒,目前複製卡的成果僅次於 UID 的讀寫,如果門禁系統採用非 UID 認證,而是使用 KeyA 或 KeyB 及 控制位元,那就可能必須破解其卡片密鑰才可以存取特定資料,否則就無法輕易的複製卡片資料。

以上是寫入卡片成功的示意圖片。

五張特製可修改 UID 的 S50 卡都被修改為相同的 UID。

這裡文章就差不多到結尾了,我想先說明幾件需要注意的事。

首先,空白卡不是所有卡片都可以修改 S0B0 (Sector 0 Block 0) 區塊的製造商資訊(這裡也是 卡號UID 的所在之處),有很多卡片都是直接燒死的,要嘛是 WriteOnce,要嘛就直接不給寫。要購買卡片時要先注意那張卡片到底可不可以修改,一般正常S50標準卡都是不可寫的,UID不給修改。

其次就是頻率一定要對得到。卡片也有頻率的,隨便亂買門禁空白卡,可能會買到 125KHz 的低頻卡,那就不合目前的模組的頻率,也比較少見。目前悠遊卡、一卡通普遍都是採用 13.56 MHz 的卡片。

最後,卡片也是大有學問的,每種卡都有使用說明書 DataSheet,扇區的數量那些都不一定,而且UID不僅僅是4個Byte,也許是7個Byte,甚至是10個。至於前面S0B0區呢,配置也是有一定規章的,這篇文章我就不講那麼詳細了。反正沒有要到完全複製卡的程度,講那麼多卡區的沒什麼意思。

差不多就這樣,日後想到新的再補充。

By Weil Jimmer


This entry was posted in Arduino, C, Experience, General, Privacy By .

本站搬遷伺服器

-
更新於

本站即刻起,將於未來不定時開始站點搬遷作業。搬到日本機房。屆時,將會有數小時下線,甚至幾天的DNS解析錯誤。此為正常現象。

※更新:本站已於 2017/08/30 12:20 (GMT+8) 搬遷完畢。


This entry was posted in Announcement By .

Grub 加入 VeraCrypt 開機選單 多系統

-
更新於

好久沒發文了,今天寫篇沒有程度的文章做個小筆記。

最近和同學聊天,正好扯到了加密硬碟,突然想到我自己的電腦 Win10 也是屬於未加密的一類,所以乾脆就用 VeraCrypt加密掉好了,可惜卻出現一個問題就是開機選單只能選單一系統,其他硬碟的系統好像偵測不到一樣,變成灰色的選項不給選。所以只好事後補修這個問題啦。

先開機進入BIOS重新選擇開機選單,開到特定Linux,安裝Grub,

apt-get install grub-efi

網路上似乎很少人講這個東西。即使有 issue 被提交了,但下面也沒啥人回應。

首先,打開目標文件:/boot/grub/grub.cfg,搜尋 menuentry 'Windows Boot Manager (on /dev/sdb1)',

然後複製整個 menuentry,在這邊直接修改是沒什麼效果的,到時候Update掉又被OverWritten,打開:/etc/grub.d/40_custom,

在下面直接加入整個 menuentry。以下是示範:

#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.

menuentry 'Windows 10 VeraCrypt (on /dev/sdb1)' --class windows --class os $menuentry_id_option 'osprober-efi-B673-5372' {
	insmod part_gpt
	insmod fat
	set root='hd1,gpt1'
	if [ x$feature_platform_search_hint = xy ]; then
	  search --no-floppy --fs-uuid --set=root --hint-bios=hd1,gpt1 --hint-efi=hd1,gpt1 --hint-baremetal=ahci1,gpt1  B673-5372
	else
	  search --no-floppy --fs-uuid --set=root B673-5372
	fi
	chainloader /EFI/VeraCrypt/DcsBoot.efi
}

直接改掉 chainloader 的資訊,對應到 /EFI/VeraCrypt/DcsBoot.efi 即可。最後直接輸入指令:

update-grub

這樣就大功告成了。

By Weil Jimmer


This entry was posted in Bash, Experience, General, Note By .

行動日(Day of Action) - 網際網路自由

-
更新於

2017年07月12日,有很多大型網站、論壇、網友們都會團結一致的向美國聯邦通訊委員會(FCC)對網路中立性的破壞表達抗議!您也可以透過這個連結一起加入抗議:https://www.battleforthenet.com/july12/

現在,新的FCC主席試圖有計劃性的摧毀網路中立性,並使各種大型電信業者能夠控制我們所看到的各種網站。如果他們順利通過了,FCC將給這些大公司權力來控制我們在網際網路上看到的東西,同時有權降低網站速度或阻擋網站,甚至對特定網站或應用程式收取額外的費用。

如果我們失去了網際網路中立性,我們很快就會面臨一個受控制、受審查、不自由的網路,一些你喜歡的網頁可能會跑得特別慢,一些擁有資金的大公司的瀏覽相同的網頁卻跑得特別快。或是一些網頁被徹底封鎖無法瀏覽。

但在七月十二日,網際網路中,將會誕生出一股力量團結在一起阻止他們。各大網站與網民和網上論壇都將齊心對抗FCC的對網路的攻擊。

Google、Facebook、Twitter、Dropbox、Imgur、Opera、Amazon……等數不清大大小小的網站都已經加入這個行列了。

「網際網路的戰役(The Battle for the Net)」活動即將展開,使您的朋友、家人和追隨者能夠採取很簡單的行動以抵制這項法案通過。

了解更多並加入行動:https://www.battleforthenet.com/july12/

什麼是網際網路中立?

簡言之,就是網路使用不應該因為使用者的階級、身分、各種因素而被有所差別待遇,ISP業者不可以因為一些私人因素或是政府法令而故意限制某些網站的連線速度、或是封鎖、審查某些網站。所有資訊的獲得應該平等對待,不會受到各種不公的濫用,不會使網際網路變成一個滿足私利的一個工具。

如果沒有網路中立,有可能會發生哪些事情?

我覺得最好拿來比喻的一件事就是中國大陸的網際網路封鎖,沒有所謂的網路言論自由,可能有一堆網站根本連不上或變非常慢,有一堆政府審查的機制。想想看,如果有人在背後監視你在網路上的一舉一動那將是什麼樣的感覺?

我認為網際網路本身就應該要是自由開放的,不會因為被企業、政府控制著而抑制了網路的多元性。


This entry was posted in General, Privacy, The Internet By .