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 可以...