CBC位元組反轉攻擊

2021-12-30 05:35:16 字數 1974 閱讀 8451

1、首先看到 cbc的解密模式

這裡可以看到在cbc解密的時候,是將密文分組為16位元組的塊,將前一組密文與後一組密文解密後的分組進行異或,從而得到最終的明文。

2、檢視原始碼

發現,在判斷使用者輸入的時候,是不能在字串**現「;」的,但是在驗證的時候卻需要在明文**現「;」

當用於輸入的時候,發現服務端會將使用者的輸入與prefix和suffix進行組合,將這個組合作為最終的輸入進行加密。

cbc加密模式是16個位元組進行分組的,可知我們所輸入的第乙個字元與前面第16位元組有間接異或的關係。

3、數學背景

有這樣一種關係:

如果:a ^ b = *

那麼:a ^ b ^ * ^ ; = * ^ * ^ ; = ;

其中,a ^ b ^ * ^ ;就是我要構造的。

4、客戶端**

使用python編寫簡單的指令碼與服務端進行互動

import socket

import sys

s = socket.socket()

host = '127.0.0.1'

port = 9002

s.connect((host,port))

s.recv(1024)

s.send("getapikey:*admin=true")

data = s.recv(1024)

print data

data = data.strip()

data = data.decode("hex")

data = list(data)

data[16] = chr(ord("*") ^ ord(";") ^ ord(data[16]))

data = "".join(data)

data = data.encode("hex")

print data

s.send("getflag:" + data)

print s.recv(1024)

當服務端執行的時候,執行編寫的python指令碼,得到flag。

chr()函式:引數是0 - 256 的乙個整數,返回值是當前整數對應的ascii 字元 。引數可以是10進製也可以是16進製制的形式 ord()函式:引數是乙個ascii字元,返回值是對應的十進位制整數1、缺少庫,除了要求的兩個庫以外,還需安裝seccure,在安裝seccure的時候出現錯誤:

building wheels for collected packages: gmpy

running setup.py bdist_wheel for gmpy ... error

complete output from command /usr/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-qvvejl/gmpy/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" bdist_wheel -d /tmp/tmpnjwdwbpip-wheel- --python-tag cp27:

CBC位元組反轉攻擊

1 首先看到 cbc的解密模式 這裡可以看到在cbc解密的時候,是將密文分組為16位元組的塊,將前一組密文與後一組密文解密後的分組進行異或,從而得到最終的明文。2 檢視原始碼 發現,在判斷使用者輸入的時候,是不能在字串中出現 的,但是在驗證的時候卻需要在明文中出現 當用於輸入的時候,發現服務端會將使...

反轉位元組中的位

使用有限的記憶體操作完成位元組中的位反轉。完成後,修改 讓它執行得盡可能快 但沒有記憶體限制 優化和正確性相比,總是居於次要位置。uint8 t swapbitsinbyte uint8 t input uint8 t output 0 for uint8 t i 0 i 8 i if input ...

寬位元組XSS跨站攻擊

寬位元組跨站漏洞多發生在gb系統編碼。對於gbk編碼,字元是由兩個位元組構成,在 df遇到 5c時,由於 df的ascii大於128,所以會自動拼接 5c,吃掉反斜線。而 27 20小於ascii 128 的字元就會保留。通常都會用反斜線來轉義惡意字串,但是如果被吃掉後,轉義失敗,惡意的xss 可以...