bugkuweb
1.滑稽
F12查看即可,又是考视力= =

2.计算器
小学算数,答案是111,但是输入1之后就输入不进去了,直接改前端代码

把maxlength删了或者把1改大一点就行了,提交
3.GET

简单的代码审计,直接GET传参
1 | |

4.Simple_SSTI_1
页面提示我需要绕过一个叫flag的参数,然后F12说:你知道,在flask中,我们经常设置一个secret_key变量。
![Simple_SSTI_1.1]Simple_SSTI_1.1.png)
flask的模板注入:(注意:这里的SECRET_KEY需要大写)

Flask是一个使用Python编写的轻量级Web应用框架。它的设计目标是简单明了,易于扩展和维护。Flask提供了基本的Web开发所需的组件,如路由、请求和响应处理、会话管理、模板渲染等,同时还支持各种第三方扩展和插件,可以轻松地实现各种复杂的Web应用开发。Flask框架也因其灵活性和简易性而广受欢迎,被许多Web开发者用于构建Web应用和API。Flask是一个使用Python编写的轻量级Web应用框架。它的设计目标是简单明了,易于扩展和维护。Flask提供了基本的Web开发所需的组件,如路由、请求和响应处理、会话管理、模板渲染等,同时还支持各种第三方扩展和插件,可以轻松地实现各种复杂的Web应用开发。Flask框架也因其灵活性和简易性而广受欢迎,被许多Web开发者用于构建Web应用和API。
flask使用jinjia2渲染引擎进行网页渲染,当处理不得当,未进行语句过滤,用户输入,会导致渲染出恶意代码,形成注入
注:SSTI 就是服务器端模板注入(Server-Side Template Injection)当前使用的一些框架,比如python的flask,php的tp,java的spring等一般都采用成熟的的MVC的模式,用户的输入先进入Controller控制器,然后根据请求类型和请求的指令发送给对应Model业务模型进行业务逻辑判断,数据库存取,最后把结果返回给View视图层,经过模板渲染展示给用户。
漏洞成因就是服务端接收了用户的恶意输入以后,未经任何处理就将其作为 Web 应用模板内容的一部分,模板引擎在进行目标编译渲染的过程中,执行了用户插入的可以破坏模板的语句,因而可能导致了敏感信息泄露、代码执行、GetShell 等问题。其影响范围主要取决于模版引擎的复杂性。
5.POST
1 | |
比较简单,post方式提交what变量即可:

提交就得到flag
6.矛盾
1 | |
GET方式获得num,先判断num不是数字,然后num还要等于1,才输出flag
想了一下,写出以下payload:num=1 and 1
以此类推就是条件判断就行了,写num=1 and 1or 1这种也行,交上去就有flag了
7.alert
进入场景是一个弹窗,写着flag就在这:

F12或者ctrl+u看见一串编码:
1 | |
直接放burp里Smart decode,html解密就得到flag:

8.你必须让他停下
进入页面,两行字:
I want to play Dummy game with others£¡But I can’t stop!
Stop at panda ! u will get flag
我想到的是,burp直接拦呗,放到repeater模块一直send:

这里每次刷新得到的的页面都不同,故返回页面也不一样,10.jpg是flag所在的包。
9.头等舱
啥也没有,F12,ctrl+u都没有,抓个包看看:

我一想,既然包里有,那F12网络一栏应该也有,这里是肯定的,这里就不演示了。
10.eval
页面给出了代码:
1 | |
先学习一下:var_dump() 函数用于输出变量的相关信息。
file() 函数把整个文件读入一个数组中。
命令执行嘛,先看看全局变量。构造?hello=$GLOBALS

没看见有flag相关的变量,那应该在文件里,构造?hello=file(‘flag.php’)

11.网站被黑
题目描述:网站被黑了,黑客会不会留下后门
看样子是提示我们找后门,那就御剑扫一波,发现index.php和shell.php
访问index.php和之前没啥区别,看看shell.php:

应该是后门密码,万能密码试了一下,不行,页面提示不是自己的马不要乱骑!
还挺有意思,直接burp暴破,字典里的密码都不对,在网上看了一下wp,密码是hack
然后就拿到flag了
12.本地管理员
打开页面是这样的:

试试弱口令,页面回显是“**IP禁止访问,请联系本地管理员登陆,IP已被记录.**”
看样子要改ip:X-Forwarded-For:127.0.0.1
发过去之后提示:Invalid credentials! Please try again!
应该是密码错了,F12看一下,发现了一串字符,应该是base64编码

dGVzdDEyMw==
burp解码一下:是test123,这应该是密码,提交试试

13.变量1
1 | |
先学一下:
isset()函数用于检测变量是否已设置并且非 NULL。
prep_match: 用于执行一个正则表达式匹配。
error_reporting(0)关闭错误显示。
还是老规矩,先看看全局变量,虽然不让传’$’,但是在var_dump()函数中给出了‘$’,还是挺有意思的:

14.Simple_SSTI_2
进入页面,提示:You need pass in a parameter named flag
get传参以读取系统文件

app这个文件夹有点奇怪,进去看看
发现有flag,直接cat

15.Flask_FileUpload
16.game1
让我玩游戏,先玩两把摸个鱼,然后看了看源码,没啥收获,直接在游戏结束时抓包,修改score的值,但是即使我改的了很高的分数,依然是失败
那就没这么简单了,看了一下大佬的wp,给出的思路是:说明有其他的参数来验证分数的真实性;这个参数可能是 sign或者可能在 cookie里。

很明显,当分数不同时不同的包差距在于 score和 sign
对比sign发现 sign是由 zM + xxx + == 构成
zM是很好看出来的,等号那有点难看,那好办,去base64解码看看就知道了,MjU=解密出来是25,MjU==出来是25=,所以后面俩等号是固定的
那就好办了,把分数和sign同时改高就行了,这里我改成9999:

这里我还试了一下单改sign,发现不行,说明两个参数是同时校验的。
做完之后突然想到能不能用intruder同时暴破两个地方,答案是肯定的,我写了个脚本,给出了300-1000之间的数字,然后为了实验成功,我在最后加了9999,intruder选择Pitchfork模式,Payload Sets选择Custom iterator,在Payload Processing选择Add,选base64加密,也能成功:

总结:
1.游戏类的一般都是通过修改分数来的,要嘛改高(999999) ,要嘛改低(-999999)
2.控制分数的参数可能不止一个,如果有加密的就得尝试解密。一般就多试几次,找到因分数不同而改变的参数,然后对该参数进行分析
17.bp
提示:密码top1000?z?????
TOP1000的字典跑一下,没区别

发现每个包都有一段js代码,这时需要用到Intruder中的Grep-Match功能:该功能可以帮我们分析Response中是否含有给定字符串。
Intruder模块Options,打开Grep-Extract
Add一条code: ‘bugku10000’

zxc123应该就是密码了,登录即可。
18.社工-伪造
一进来是这种

皮一下

不知道干啥,看看空间

说只有他男朋友在qq空间问他,他才能交出flag,试试暴破一下,我猜如果是他男朋友的号,包会有所不同,试了一下,速度太慢,然后server error了,看下面评论说要登自己qq,试了一下

还真是,然后把自己的QQ昵称改成他男朋友的:

不愧是社工的题,我的评价是,我还是脑洞不够大,我还是不够BT,没想到把昵称改了。
19.社工-初步收集
点下载辅助,下载了个exe文件,被拦了,说可能损坏电脑,仍要运行就行:

这里的话,涉及一个知识点就是遇到这种开挂的软件或者别的软件时,我们可以查看流量的走向。
打开wireshark,监听wlan,然后再开始刷

也算是考眼力吧,拿到账号密码了以为到此结束了,没想到不对,看着像base64编码,解码看看
XSLROCPMNWWZQDZL
怪不得有bugku@163的流量包,去网易邮箱看看,但是账号密码登录失败了,这里还有一个知识点:邮箱登录的方式,主流是两种,一种是密码登录,一种是授权码登录,官网提供的邮箱登录一般是账号+密码登录,第三方邮件系统登录的一般都是客户端+授权码登录。
很显然,我们解出来的那串base64不是密码,那么应该就是授权码了,网上wp是用foxmail,还有用QQ邮箱手机版的,都成功登录了,找到了一个邮件:

有账号密码,御剑扫后台发现了登陆界面:

去登录就行了。