温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Python中input()函数漏洞及与raw_input()函数区别

发布时间:2020-05-11 20:59:30 来源:网络 阅读:4563 作者:菜鹅小生 栏目:安全技术

Python中input()函数漏洞

一、函数简介:

input()函数是python中的内置函数,函数作用是从stdin中读取数据

喜欢python2的朋友都知道python中有两个常见的输入函数:input()函数和raw_input()函数,但是我们在写脚本使用输入函数的时候,往往会使用raw_input()函数。这是为什么?因为input()函数在python2中拥有非常大的安全隐患。所以当我们自学python的时候,课本上,老师说的都是推荐raw_input()函数。Input()函数具体存在什么安全隐患?慢慢道来!
二、input()函数与raw_input()函数的区别

1、 input()函数,能够自动的识别出输入的类型(str,int,fload);
Python中input()函数漏洞及与raw_input()函数区别
raw_input()函数,完全默认为str字符串类型
Python中input()函数漏洞及与raw_input()函数区别
2、 input()函数如果接收的是数学计算式,会自动执行得到结果(漏洞产生的原因)
raw_input()函数则会将输入的以字符串形式显示
例:
Python中input()函数漏洞及与raw_input()函数区别
输入3+2的字符串,input()函数处理后,得到5;
而raw_input()函数则不会出现这种问题
Python中input()函数漏洞及与raw_input()函数区别
三、input()函数产生漏洞的原因
此函数会将stdin输入的内容当做python代码去执行(就像执行计算式一样,将其看做python代码,通过计算返回结果)。如果我们将输入的结果是需要查看/etc/passwd的文件内容呢?显然这里的漏洞还是不小的。接下来我们演示一下。
首先我们要清楚,在python中如何去调用系统命令。这个有很多方法,就不在一一解释,朋友们可以去百度一下。我这里是利用的os模块的system()方法。
实验结果:
Python中input()函数漏洞及与raw_input()函数区别
import():是python中的内置函数,同语法import 相同,都是调用模块
system()就是os模块中的方法,此方法用来调用系统命令
cat /etc/passwd 系统命令,用来查看文件/etc/passwd的内容
四、CTF例题实战
题目来源:https://junior.stillhackinganyway.nl/challenges?chal=13#challenge-information
题目内容:
This program consists of only 4 words, and still they've made a mistake. Read the flag from
/home/small/flag
nc small.stillhackinganyway.nl 1337*
题目附带了个脚本:
Python中input()函数漏洞及与raw_input()函数区别

这个题目就是利用所说的input()函数漏洞。
Python中input()函数漏洞及与raw_input()函数区别
输入input(),让脚本中的input()函数去执行我们输入的input()函数。这样我们就可以再次输入我们构造的查看flag的语句:
__import__('os').system('cat /home/small/flag')
五、漏洞修复
在python2中,推荐使用raw_input()函数,尽量不要使用input()函数,在python3中,input()函数被默认改为默认输入为字符串。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI