1. 程式人生 > >hashcat之基於規則的攻擊

hashcat之基於規則的攻擊

原文

譯文

描述

基於規則的攻擊是最為複雜的攻擊之一。這樣說的原因很簡單。基於規則的攻擊就像是設計用於產生候選密碼的程式語言。例如,它有用於修改、切斷、擴充套件單詞的函式,有用於跳過某些單詞的條件操作。這些特性使它成為最為靈活、精確和有效的攻擊模式。

為何不使用正則表示式

為何要重複造輪子?很簡單啊,正則表示式太慢了。通常,我們不得不在趕在hash演算法開始之前——10ms內,生成1,000,000,000或更多的新鮮候選密碼,而且這一過程要一再重複。只需看一眼你的GPU速度顯示就知道該如何決定。

和其他規則引擎的相容性

hashcat的規則引擎中,只要函式名和John the Ripper

PasswordsPro規則引擎中的函式名是一樣的,那麼該函式便是100%相容的,反之亦然。稍後,我們會介紹一些我們自己和、不相容的函式。但這些函式有他們自己的名字不會產生衝突。

實現了的相容函式

下列函式100%兼容於John the Ripper和PasswordsPro:

Name Function Description Example Rule Input Word Output Word Note
Nothing : 什麼都不做 : [email protected] [email protected]
Lowercase l 將所有字母轉為小寫 l [email protected] [email protected]
Uppercase u 將所有字母轉為大寫 u [email protected] [email protected]
Capitalize c 大寫首字母,小寫其餘部分 c [email protected] [email protected]
Invert Capitalize C 小寫首字母,大寫其餘部分 C [email protected] [email protected]
Toggle Case t 改變單詞中所有字母的大小寫 t [email protected] [email protected]
Toggle @ TN 改變單詞中,第N個字母的大小寫 T3 [email protected] [email protected] *
Reverse r 反轉整個單詞 r [email protected] [email protected]
Duplicate d 重複整個單詞 d [email protected] [email protected]@ssW0rd
Duplicate N pN 在單詞後再重複N遍此單詞 p2 [email protected] [email protected]@[email protected]
Reflect f 在單詞後重復一遍反轉的單詞 f [email protected] [email protected]@p
Rotate Left { 將整個單詞迴圈左移一位 { [email protected] @ssW0rdp
Rotate Right } 將整個單詞迴圈右移一位 } [email protected] [email protected]
Append Character X||1 [email protected] [email protected]
Prepend Character ^X 在單詞前面新增一個字元 ^1 [email protected] [email protected]
Truncate left [ 刪除第一個字元 [ [email protected] @ssW0rd
Trucate right ] 刪除最後一個字元 ] [email protected] [email protected]
Delete @ N DN 刪除第N個位置上的字元 D3 [email protected] [email protected] *
Extract range xNM 取從N開始的M個字元 x04 [email protected] [email protected]
    #
Omit range ONM 刪除從N開始的M個字元 O12 [email protected] psW0rd *
Insert @ N iNX 在位置N插入一個字元 i4! [email protected] [email protected]!W0rd *
Overwrite @ N oNX 用X重寫位置N的字元 o3|p@ssW0rd|p@sW0rd *
Truncate @ N ‘N 在位置N前截斷單詞 ‘6 [email protected] [email protected] *
Replace sXY 用Y替換所有X ss$ [email protected] [email protected]$$W0rd
Purge @X 清除所有X @s [email protected] [email protected] +
Duplicate first N zN 重複第一個字元N次 z2 [email protected] [email protected]
Duplicate last N ZN 重複最後一個字元N次 Z2 [email protected] [email protected]
Duplicate all q 重複每個字元 q [email protected] [email protected]@ssssWW00rrdd
Extract memory XNMI 在位置I處插入儲存在記憶體中的詞的從N開始的長度為M的子串 lMX428 [email protected] [email protected] +
Append memory 4 將儲存在記憶體中的詞新增到當前詞後面 uMl4 [email protected] [email protected]@SSW0RD +
Prepend memory 6 將儲存在記憶體中的詞新增到當前詞前面 rMr6 [email protected] [email protected]@ssW0rd +
Memorize M 將當前詞儲存到記憶體中 lMuX084 [email protected] [email protected]@ssw0rdW0RD +

- *代表N從0開始。超過9的字元位置用A-Z來表示(A-10)
- +代表這條規則僅僅在hashcat中實現了
- #在oclHashcat v1.37→v1.38和hashcat v0.51→v0.52之間有所變動

譯者注:“改變單詞中所有字母的大小寫”的“改變大小寫”原文為“toggle case”。怎麼個改變法?大寫變小寫,小寫變大寫,如輸入為abCdE,輸出則為ABcDe。

譯者注:uMl4中包含4個函式:u、M、l、4。u函式將輸入的[email protected]轉換為[email protected],M函式將[email protected]儲存到記憶體中,l函式將輸入(也即是M函式的輸出,為[email protected])中所有大寫字母轉為小寫,輸出為[email protected],4函式的輸入是[email protected],將記憶體中的詞([email protected])新增到當前詞(即輸入)的後面,輸出為[email protected]@SSW0RD。lMX428、rMr6和lMuX084同理。

丟棄文字的規則

Name Function Description Example Rule Note
Reject less 丟棄長度小於N的 <16
Reject greater >N 丟棄長度大於N的 >8
Reject equal _N 丟棄長度不小於N的 _7
Reject contain !X 丟棄包含字元X的 !z
Reject not contain /X 丟棄不包含字元X的 /e
Reject equal first (X 丟棄不以字元X開頭的 (h
Reject equal last )X 丟棄不以字元X結尾的 )t
Reject equal at =NX 丟棄位置N不是字元X的 =1a
Reject contains %NX 丟棄字元X出現次數小於N次的 %2a
Reject contains Q 若當前詞與記憶體中儲存相匹配則丟棄 rMrQ 本例用於丟棄迴文字串

注意:丟棄規則僅僅在hashcat-legacy或是使用“-j”、“-k”的hashcat中有效。在hashcat中,丟棄規則不會作為常規規則(在規則檔案中的)而發生效力。

譯者注:迴文字串是指形如“aaabbcbbaaa”這樣正著反著讀一模一樣的字串。

實現了的特有函式

Name Function Description Example Rule Input Word Output Word Note
Swap front k 交換前兩個字元 k [email protected] @pssW0rd
Swap back K 交換最後面兩個字元 K [email protected] [email protected]
Swap @ N *NM 交換M和N位置的字元 *34 [email protected] [email protected] *
Bitwise shift left LN 對處於N位置的字元進行按位迴圈左移 L2 [email protected] [email protected]æsW0rd *
Bitwise shift right RN 對處於N位置的字元進行按位迴圈右移 R2 [email protected] [email protected] *
Ascii increment +N 將處於N位置的字元的ascii碼值加1 +2 [email protected] [email protected] *
Ascii decrement -N 將處於N位置的字元的ascii碼值減1 -1 [email protected] p?ssW0rd *
Replace N + 1 .N 用N+1位置的字元替換N位置的字元 .1 [email protected] psssW0rd *
Replace N - 1 ,N 用N-1位置的字元替換N位置的字元 ,1 [email protected] ppssW0rd *
Duplicate block front yN 重複最開始的N個字元 y2 [email protected] [email protected]@ssW0rd *
Duplicate block back YN 重複最後面的N個字元 Y2 [email protected] [email protected] *
Title E 先將整行都小寫,然後大寫空格後的字元和行首的字元 E [email protected] w0rld [email protected] W0rld +
Title w/separator eX 先將整行都小寫,然後大寫指定字元後的字元和行首的字元 e- [email protected] [email protected] +

下列函式在John the Ripper或是PasswordsPro中是無效的:

  • *代表N從0開始。超過9的字元位置用A-Z來表示(A-10)
  • +僅僅在John the Ripper中有效?
  • #在測試版或未正式發行版中有效

書寫規則

書寫規則最重要的事情是搞清楚你想寫什麼。這通常意味著你必須分析十幾個明文密碼,而這些明文密碼是被習慣設定的,來總結有什麼共同之處。例如,人們常常在他們的密碼後新增數字以增加密碼長度。所以,我們便總結出了一下兩個“要素”:

  • 我們想在後邊新增些什麼
  • 想新增在後邊的是數字

回顧下函式列表,我們會發現在後邊新增些什麼應該使用函式“$”。所以,如果我們想在密碼後新增“1”,我們應該寫出這樣的規則:

    $1

這確實很簡單。但如果我們想新增1-9的所有數字呢?這就要用到一種叫做混合攻擊的模式了。

需要注意:

  • 如果不是被用作引數,空白字元將被忽略。這會使原始碼看上去整齊些。
  • 用字元“#”開頭表示註釋一行

生成規則

有兩種方式自動地生成規則。

隨機規則

這是hashcat獨有的特性。你可以使用hashcat生成直接作用於當下命令的隨機規則。當你已經嘗試過作用於你的所有字典的所有規則後若是不知道接下來要幹什麼,這便是一件好事情。有三種配置引數:

讓hashcat生成應用於每個攻擊的NUM條規則:

    --generate-rules=NUM

要指定函式數量(最小值到最大值的一個範圍)則應該使用:

    --generate-rules-func-min=NUM
    --generate-rules-func-max=NUM

這個數量雖然沒有限制但也不推薦設定得過大。當和引數-g一起使用時,超過-g引數指定數目的規則將被忽略。

例如,隨機產生的規則可能是:“l r”、“l ^f”和“[email protected]”,這些都是能夠使用的有效的規則。然而,規則“l ^f [email protected] r $3”將被忽略,因為它包含了5個函式,而預設情況下,最小值為1,最大值為4。

你可以將隨機生成的規則和規則檔案中的規則混合。例如,你的規則檔案中包含了200條規則,使用引數-g 500,則會生成另外的300條規則。

譯者注:這一段是有些莫名其妙的。輸入命令:echo [email protected] > word,再輸入命令:hashcat –stdout –generate-rules=10 word,看看輸出,可能會有所悟。

儲存匹配的規則

這一功能和規則生成器結合使用將帶來極大的方便,也可用於統計分析你的規則集合。

使用這些引數以儲存任意的匹配密碼的規則:

    --debug-mode=1 --debug-file=matched.rule

這將儲存每個匹配中相匹配的規則,所以結果規則檔案中可能包含許多重複規則。

除錯規則

使用hashcat我們可以容易地除錯規則。這意味著可以驗證我們寫的規則實際上是不是我們想要的。只需使用引數–stdout同時忽略hashlist就行。

這有個例子:

建立一個簡單的字典:

    $ echo WORd > word

生成一個簡單的規則,規則“c”將大寫第一個字母,小寫其餘部分。

    $ echo c > rule

接著便是如何檢視規則生成器的除錯輸出了:

    $ ./hashcat-cli64.bin -r rule --stdout word
    Word

這一特性也可用於快速生成候選密碼。這意味著如果你有別的支援從標準輸入讀資料的程式,則可直接將hashcat的輸出作為別的程式的輸入。

使用“p”(第N個指定的字元)作為位置規則

位置碼字元“p”(看看Github上的討論:點這兒)記錄指定字元第N次出現的位置,這使得字串中的位置也可被用在規則中。當使用“%”(丟棄某文字,除非它中出現了指定字元至少X次)和“/”(丟棄不包含指定字元的文字)時,“p”自動生效。

如果你想操作第一次出現的指定字元,你可以使用%1s或者更簡單地使用’/’:

    $ echo -n 'Odessa77' | hashcat --stdout -j '%1s Dp ip$'
    Ode$sa77
    $ echo -n 'Odessa77' | hashcat --stdout -j '/s Dp ip$'
    Ode$sa77

如果你想操作第二次出現的指定字元:

    $ echo -n 'Odessa77' | hashcat --stdout -j '%2s Dp ip$'
Odes$a77

等等等等。不像替換所有指定字元的“s”規則,這允許你選擇替換指定字元中的哪幾個。

注意,只有在命令列引數“-j”和“-k”中,位置碼字元“p”才有效。

在下面的例子中,規則中的“%2s”的意思是丟棄某文字除非它含有兩個“s”,“p”的意思是操作第二次出現的字元“s”。

Name Function Description Example Rule Input Word Output Word Note
Toggle @ Tp 改變位置p字元的大小寫 %2s Tp [email protected] [email protected]
Delete @ p Dp 刪除位置p的字元 %2s Dp [email protected] [email protected]
Extract range xpM 從位置p開始取M個字元 %2s xp4 [email protected] sW0r
Omit range OpM 從位置p開始刪除M個字元 %2s Op2 [email protected] [email protected]
Insert @ p ipX 在位置p插入字元X %2s ip! [email protected] [email protected]!sW0rd
Overwrite @ p opX 用字元X覆蓋位置p的原有字元 %2s op|p@s.sW0rd|p@s.W0rd
Truncate @ p ‘p 從位置p前截斷單詞 %2s ‘p [email protected] [email protected]
Extract memory XpMI 在位置I處插入儲存在記憶體中的詞的從p的長度為M的子串 %2s lMXp28 [email protected] [email protected]
Swap @ p *pM 交換p與M處的字元 %2s *p4 [email protected] [email protected]
Bitwise shift left Lp 按位迴圈左移位置p處的字元 %2s Lp [email protected] [email protected]▒W0rd
Bitwise shift right Rp 按位迴圈右移位置p處的字元 %2s Rp [email protected] [email protected]
ASCII increment +p 位置p處的字元的ascii碼值加1 %2s +p [email protected] [email protected]
ASCII decrement -p 位置p處的字元的ascii碼值減1 %2s -p [email protected] [email protected]
Replace p + 1 .p 用p+1處的字元替換p處的字元 %2s .p [email protected] [email protected]
Replace p - 1 ,p 用p-1處的字元替換p處的字元 %2s ,p [email protected] [email protected]

在hashcat-legacy或hashcat中看規則/的示例。

多規則

從oclHashcat-plus v0.07開始,基於規則的攻擊中添加了一個新特性。

你可以隨心所欲地新增多個-r引數,不再是以前的只能有一個-r引數或一個規則檔案。

他們不是順序執行的!

每個規則檔案中的規則都會和另一個規則檔案中的規則相組合。這就使得你可以容易地創造自己的攻擊模式。

    $ cat 123.rule
    $1
    $2
    $3

    $ cat abc.rule
    $a
    $b
    $c

    $ hashcat --stdout -r 123.rule -r abc.rule wordlist
    hashcat1a
    hashcat2a
    hashcat3a
    hashcat1b
    hashcat2b
    hashcat3b
    hashcat1c
    hashcat2c
    hashcat3c

因為生成規則的總數取決於所有列表,所以若是疊加多個大列表,可用記憶體將會很快耗光。但是,疊加精心選擇的規則將會有很好的效果。

支援

目前支援這種攻擊模式的有:

  • hashcat-legacy

限制

在hashcat中,單行規則中函式數量和多規則中函式總量的上限均為255。

相關推薦

hashcat基於規則攻擊

原文 譯文 描述 基於規則的攻擊是最為複雜的攻擊之一。這樣說的原因很簡單。基於規則的攻擊就像是設計用於產生候選密碼的程式語言。例如,它有用於修改、切斷、擴充套件單詞的函式,有用於跳過某些單詞的條件操作。這些特性使它成為最為靈活、精確和有效的攻擊

密碼攻擊基於字典和彩虹表的密碼攻擊

一、撞庫攻擊 最近經常聽到撞庫攻擊的有關新聞,撞庫就是黑客通過收集網際網路已洩露的使用者和密碼資訊,生成對應的字典表,嘗試批量登陸其他網站後,得到一系列可以登入的使用者。作為一個小白,我先從破解口令雜湊值的嘗試入手。 二、Hash函式的特點 雜湊函式:把任意長度的輸入,通過雜湊演算法,變

PYTHON程式設計基於scapy的DHCP全自動攻擊指令碼

DHCP服務 當一個組織分配到一個網路地址塊後們就可以為該組織內的主機繼而路由器介面分配IP地址了。這個工作可以由網路管理員手動分配,也可以通過動態主機配置協議,也就是我們這裡所講的DHCP協議來動態的為主機分配地址。事實上很多的實際網路都是通過DHCP來實現地址分配的。 DHCP在

網路安全基於流量的攻擊型別

DoS 拒絕服務DDoS 分散式拒絕服務DRDoS 分散式反射拒絕服務:公網上有很多公共的服務如redis、mongodb、memcache、NTP、UPnP等,攻擊者對這些服務傳送偽造的請求。如:Hi memcache,請把快取的資料發給我。我的IP是受害者。 這種攻擊叫

Zookeeper基於Observer部署架構

sso 解決 簡單 也不會 http 架構 即使 jsb 例如 Observers:在不傷害寫性能的情況下擴展Zookeeper 雖然通過Client直接連接到Zookeeper集群的性能已經很好了,可是這樣的架構假設要承受超大規模的Client,就必須添加Zookee

Spring框架第四篇基於註解的DI註入

聯合 junit4 style troy ont student stc 創建配置文件 int 一、說明 [email protected]/* */,但意義不同的註解還有三個: 1)@Repository:註解在Dao實現類上 2)@Service:註解

revit 二次開發基於族獲得實例

相關 space typeof cef doc 過濾 list eric category Revit並沒有直接開放基於族獲取實例元素的過濾器。不過有兩個相關的過濾器,一個是FamilySymbolFilter(ElementId familyId),可以基於族ID過濾出所

Appium移動自動化測試基於java的iOS環境搭建

res .sh 變更 order edev curl 軟件包 comm 簡單的 本文僅供參考,同時感謝幫助我搭建環境的同事 操作系統的名稱:Mac OS X操作系統的版本:10.12.6 接下來我們開始踏上搭建Appium+java+ios之路,本文只說個大概,畢竟本機已經

安卓逆向基於Xposed-ZjDroid脫殼

重定位 war fill 沙盒 mar 內存 ces 鼠標 文件加載 http://bbs.pediy.com/thread-218798.htm 前言 之前介紹了普通常見的反編譯模式 但對於使用了 360加固 棒棒 愛加密 等等的加固應用就沒辦法了、 你

Nginx 基於ip和用戶的控制

控制 ip 用戶1 概述本文將介紹基於ip和用戶實現對網頁的訪問權限控制。通過ngx_http_access_module模塊實現基於ip的控制,ngx_http_auth_basic_module模塊實現基於用戶的控制2 ngx_http_access_module模塊實現基於ip的訪問控制功能.1

Spring基礎知識基於註解的AOP

sdn 相互 com 目的 declare 裝配bean 四種 ace 裝配 背景概念:   1)橫切關註點:散布在應用中多處的功能稱為橫切關註點   2)通知(Advice):切面完成的工作。通知定了了切面是什麽及何時調用。     5中可以應用的通知:         

從入門到放棄基於個人微博公共事件檢測算法的研究與實現

高級 con class 自己 權限 status com use bin   畢設選擇了這個題目,水平大概就是邊做邊學吧。當我註冊了微博開放平臺,下好了Java SDK搞了半天之後,才仔細一看,發現這是4年前的,或許能湊活著用吧。但這都不是重點,問題是第一步咋就GG了..

Nginx筆記Rewrite規則

test 整理 區別 reg 如果 跳轉 判斷 var 我們 Nginx中Rewrite規則主要用於實現URL的重寫。通過Rewrite規則,可以實現規範的URL、根據變量來做URL轉向及選擇配置。 Rewrite規則相關命令 break if return rewrit

MyBatis基於XML的表之間映射

rop iat mage ati 也有 9.png font out 既然 數據庫表之間的關系有3種,一對一、一對多、多對多。既然是ORM,這肯定是必須有的。在學習EF的時候也有涉及,今天就是參考著EF的來學習下MyBatis的表關系映射。 一、準備工作 1.準備Mode

Hadoop IO操作基於文件的數據結構

定時任務 二進制 包括 大數據文件 組成 key 上傳 刪除 大小   HDFS和MR主要針對大數據文件來設計,在小文件處理上效率低.解決方法是選擇一個容器,將這些小文件包裝起來,將整個文件作為一條記錄,可以獲取更高效率的儲存和處理,避免多次打開關閉流耗費計算資源.hdfs

TFRNN:matplotlib動態演示基於順序的RNN回歸案例實現高效學習逐步逼近余弦曲線—Jason niu

hold batch main 技術分享 1.0 dict asi itl plot import tensorflow as tf import numpy as np import matplotlib.pyplot as plt BATCH_START = 0

基於規則的安全事件關聯分析模型

們的 清洗 通信 關聯 專家 網絡攻擊 攻擊 gen 項目   在人工智能的浪潮下,現在各類科技領域都要加上一點AI、深度學習、神經網絡的概念,以免不落後於潮流。但是產品歸產品,技術歸技術。就人工智能當下的成熟度而言,筆者認為至少在信息安全領域,由專業的安全專家團隊利用龐大

Mybatis基於XML的調用存儲過程

count put state pri parameter 創建 oca 基於 XML 一、返回單個值 1、存儲過程準備 這裏先創建一個存儲過程,傳入參數為age,傳出參數為count。然後先測試一下是否正確。 CREATE DEFINER=`root`@`localh

日誌系統基於Zookeeper的分布式協同設計

服務配置 設計 onf 進程 最新 secret 要求 日誌搜索 必須 近期這段時間在設計和實現日誌系統。在整個日誌系統系統中Zookeeper的作用非常重要——它用

樹莓派與Arduino Leonardo使用NRF24L01無線模塊通信基於RF24庫 (四) 樹莓派單子節點查詢

spi listening div num 另一個 control 樹莓派 des gin 考慮到項目的實際需要,樹莓派作為主機,應該只在需要的時候查詢特定節點發送的數據,因此接收到數據後需要根據頭部判斷是否是自己需要的數據,如果不是繼續接收數據,超過一定時間未查詢到特定節