Python2 input函数漏洞利用
在 Python2 中,input 函数相当于
eval(raw_input(prompt))
如果输入的数据是一个恶意的表达式,存在任意代码执行的风险
实例演示
- 字符串拼接
- 命令执行
__import__('os').system('cat /etc/passwd')
靶场利用
在 vulnhub bottleneck 靶机中,遇到 input 漏洞利用的情况
# 核心代码
foreach($blacklist as $elem){
if(strstr($imagefile, $elem) !== FALSE)
$isblocked = TRUE;
}
// report the intrusion to the soc and save information locally for further investigation
if($isblocked){
$logfile = 'intrusion_'.$timestamp;
$fp = fopen('/var/log/soc/'.$logfile, 'w');
fwrite($fp, "'".$imagefile."'");
fclose($fp);
exec('python /opt/ids_strong_bvb.py </var/log/soc/'.$logfile.' >/tmp/output 2>&1');
print_troll();
exit();
}
代码的意思是参数输入要是包含黑名单的字符串中,则将输入输出到日志文件中
我们不知道 ids_strong_bvb.py 的内容是什么,但靶机中存在文件包含漏洞可读取 /tmp/output 的内容
由于靶机中还存在定时清空 /tmp/output 的程序, 所以还需要先 读一个包含黑名单字符串的路径,在立刻读取 output 文件,方可读取
如图所示,先读取这两个路径
输出为:
/etc 后加单引号使 程序报错
知道程序中包含 input 参数,经由上面输出推测得,用户输入由input函数处理
由报错可以知道闭合规则,将payload放到 /etc' and payload and '
中即可
输出:
更改system里面的命令,可造成任意命令执行,直接getshell,进行下一步提权。