栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

BugKu CTF Web

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

BugKu CTF Web

BugKu CTF Web
  • 滑稽
  • 计算器
  • GET
  • POST
  • Simple_SSTI_1
  • 矛盾
  • eval
  • 变量1
  • Simple_SSTI_2
  • alert
  • 你必须让他停下
    • 方法一
    • 方法二
    • 方法三
  • 网站被黑
  • 头等舱
    • 方法一
    • 方法二
  • Flask_FileUpload
  • 管理员系统
  • game1
  • bp
  • 源代码
  • 社工-伪造

滑稽

启动场景,打开链接,页面是一堆滑稽图片,查看网页源代码,flag在注释里面,去掉注释,提交即可。

计算器

打开链接,发现左边是一个加法运算,得到结果是119,但是输入框内只能输入1位数字,fn+f12(win10)打开审查代码,将输入框的maxlength改为3,输入结果,弹出flag。

GET

打开链接,访问页面,发现是一个简单赋值判断,意思是提交get类型 what=flag 会输出flag,尝试使用url/?what=flag,得到flag,其中第一个flag是前面php代码echo出来的。

POST

与前一题类似,不过采用POST方式提交
1.利用火狐的HackBar,使用的V2,另一个似乎收费,勾选Post data,上面输入网站,下面输入what=flag即可。

2.命令行解决,开始没发现这个方法,后面又开了一次场景
curl命令使用:

>curl --help
Usage: curl [options...] 
 -d, --data    HTTP POST data
 -f, --fail          Fail silently (no output at all) on HTTP errors
 -h, --help   Get help for commands
 -i, --include       Include protocol response headers in the output
 -o, --output   Write to file instead of stdout
 -O, --remote-name   Write output to a file named as the remote file
 -s, --silent        Silent mode
 -T, --upload-file   Transfer local FILE to destination
 -u, --user   Server user and password
 -A, --user-agent   Send User-Agent  to server
 -v, --verbose       Make the operation more talkative
 -V, --version       Show version number and quit

This is not the full help, this menu is stripped into categories.
Use "--help category" to get an overview of all categories.
For all options use the manual or "--help all".

cmd命令:curl -d what=flag url

Simple_SSTI_1

打开题目,网页源代码如下:

提示我们在flask里,经常设置一个secret_key变量,查阅config的用法,得知config也是Flask模版中的一个全局对象,它包含了所有应用程序的配置值,所以可以使用 config.xxx 来查看该对象的属性值。
所以,这道题最后的payload就是
url/?flag={{config.SECRET_KEY}}

矛盾

查看网页源代码,发现是两层判断,首先判断flag是否为数字,不为数字可以进入循环,内层循环则是num=1,输出flag,涉及到php弱类型。
php转换规则是:若字符串以数字开头,则以开头字母为转换结果,若无则输出0。因此,此题选择num=1xxxx,x为任意字符,1a,1%,1aaa等等都可以。
php弱类型详细介绍

eval

打开网址,是php代码

尝试构造url/?hello=file('flag.php'),拿到flag,运气比较好,一猜就对了,详细点的分析参考eval详细分析。

变量1

打开网站,提示说flag在变量里面,下面接着是php代码

构造url/?args=GLOBALS,可以看到夹杂在变量中的flag

得到了flag,我们可以通过显示的输出,验证一下,构造url/?args=ZFkwe3,也可以得到flag

Simple_SSTI_2

参考文章
通过{{ config.__class__.__init__.__globals__['os'].popen('ls ../').read() }}读取系统文件,这里读取网站系统目录:
url/?flag={{%20config.__class__.__init__.__globals__[%27os%27].popen(%27ls%20../%27).read()%20}}

通过{{ config.__class__.__init__.__globals__['os'].popen('ls ../app').read() }}读取app目录下的文件,发现第一个文件夹就有flag:
url/?flag={{%20config.__class__.__init__.__globals__[%27os%27].popen(%27ls%20../app/%27).read()%20}}

通过{{ config.__class__.__init__.__globals__['os'].popen('cat ../app/flag').read() }}读取flag内容:
url/?flag={{%20config.__class__.__init__.__globals__[%27os%27].popen(%27cat%20../app/flag%27).read()%20}}

alert

打开网页,发现网页在循环弹出以下文字

采用ctrl+u或者fn+f12查看网页源码,发现一行注释,为unicode编码

随便找个网站进行转码,得到flag(很多人说是转ASCII,但是我是转中文出来的,不懂)。

你必须让他停下

打开网页,页面一直刷新,打开源代码,发现有加载图片的代码,联系页面显示,有几种方法

方法一

可以在页面显示图片的时候,立刻ctrl+u查看源代码,可看到flag;

方法二

直接查看源代码,在源代码页面按f5,多试几次,在图片为10.jpg的时候出现flag;

方法三

bp抓包;

网站被黑

打开网页,挺好看的页面,看网页源代码也看不出来啥

但是通过题目tips我们可以得知网站被黑之后,黑客留下了后门
参考资料:webshell(网站后门)、Web后门知识详解
我们在网站的url地址栏中添加/index.php发现也可以成功访问主页面,因此我们可以推断出档当前使用的后端语言为PHP,所以可以使用后台扫描工具对网站进行扫描
采用的是御剑后台扫描,可以看到扫描出shell.php
后面bp抓包地址和这里不一样,原因是我扫描太久了,然后场景开太久了自己关了,又重新花金币开了一次,这次就不用扫描后台了,已经知道了shell.php,就只需要用bp抓包了

参考burp简单抓包教程进行抓包

抓取到数据包之后 我们可以点击Action中的Send to Intruder(发送到暴力破解模块),再Intruder-position添加变量,先clear清空变量,再选中测试的admin添加

再在payload页面添加爆破字典破解,字典在网上下载就行

点击右上角,start attack开始破解, 通过爆破返回的长度不同,我们可以判断出密码为hack,失败的有很多次所以有很多长度为1200的数据包,而成功就那么一个,所以我们可以判断出长度为1203是我们本次爆破的密码

回到网页,提交密码,得到flag

头等舱

网页啥也没有,我也忘记了截图
后来发现头等舱=头部,这个意思

方法一

fn+f12,右侧网络,看响应头

方法二

bp抓包,Action-send to repeater

在repeater下,send,flag就出来了。

Flask_FileUpload

打开网页,是让我们上传图片的页面

先查看源代码,看到要求上传文件是.jpg或者.png,并且注释提醒我们说文件会按照py代码运行,因此,我们可以尝试在文件中写入py代码,然后转化成图片格式上传

先尝试查看目录下文件,代码如下

import os
os.system('ls /')


可以看到有一个文件叫flag,因此接下来只需要查看flag内容就可以了,得到flag

import os
os.system('ls /')
os.system('cat /flag')

管理员系统

打开网站,是让我们输入账号密码登录

查看网页源代码,没有什么特别的

最下面很长的一串n的最后,跟了一个注释,应该是有用的,这里假如没用往右边拖动,没发现这个也没关系,后面看元素的时候也会发现

查阅知道这是base64编码,解码结果是test123,猜测是密码
base64解码

随意输入账号,提示IP禁止访问,fn+f12查看,这里也可以在里面看到上述注释,应该是只有管理员才能访问

看wp才知道,这时候就得利用http协议的xxf伪造管理员的ip地址访问
相关文章:XFF漏洞攻击原理及防御方案、HTTP X-Forwarded-For 介绍
用bp抓包,输入账号密码,接着随便在某行添加头标识,进行xxf伪造ipX-Forwarded-For: 127.0.0.1

点击forward,如果账号密码正确,浏览器页面将出现flag
密码是上述的test123,账号是猜的admin,直接成功

game1

打开网站,是一个常见的游戏,网页源代码也看不出什么,试着玩一玩,后面房子掉落速度越来越快(据说这类题是和分数有关,所以就往这方面思考)
按fn+f12,点击Network,可以查看相关网络请求信息,里面有一条关于score的请求,可以看到我们刚刚玩的分数,还有一个sign:zMMzAw==,不难看出,是base64加密

同时,查看网页源代码搜索sign,有三条记录,同时验证了我们的想法:上述sign的值是base64加密后的,sign和score是对应的

将30用base64加密,发现对应的是sign的后面几位,多玩几次发现sign的组成是zM + score + ==

用bp抓包,抓取含有score分数的,就是最后游戏要死的那一次再抓包,然后就可以抓到了,还可以进行改包

想设置大一点的score,于是我选择了999999

改包后,Action-send to repeater,然后send,就在Response那里得到了flag

bp

题目提示那里是弱密码top1000,z???,打开网站,是账号密码登录,所以提示指向的就是密码

bp抓包,输入密码123456

点击Action中的Send to Intruder(发送到暴力破解模块),再Intruder-position添加变量,先clear清空变量,再选中测试的123456添加

根据提示,去网上下载弱密码top1000,然后筛选出z开头的
(说实话,含z的就几十个,z开头的就几个,一个个试都可以试出来,但是还是按照步骤做了,万一没看到提示呢hhh)
添加字典,破解,返回结果长度都一致,怀疑过字典有问题,但是试过了,知道密码在里面,所以继续分析

查看响应包,观察内容,发现错误包里面都会返回一个JavaScript代码告知我们的密码有错误

所以我们通过Burpsuite的 Grep – Match (在响应中找出存在指定的内容的一项)过滤掉存在JavaScript代码中的{code: 'bugku10000'}的数据包

发现有一个密码对应的不含有上述代码,查看内容,发现果然与其他不一样,因此,他就是我们的密码

用密码zxc123登录,得到flag

源代码

打开网页,有一个提交框

查看网页源代码,可以看到一些有用信息

参考文章:URL编码中的escape、encodeURI和encodeURIComponent
对p1,p2进行解码

unescape() 函数可对通过 escape() 编码的字符串进行解码
根据eval(unescape(p1) + unescape('%35%34%61%61%32' + p2));将代码拼接,可看出我们应该在浏览器输入框输入67d709b2b54aa2aa648cf6e87a7114f1

得到flag

社工-伪造

很简单,而且很有趣

登录一个qq,和第一个人聊天,我是直接问flag,然后回答说只告诉男朋友

点开小美qq空间,一些动态,然后看到那个表白的名叫小bug,猜测这个就是他男朋友

把登录qq改个名字,注意不是在网页改,是在自己qq改,或者不改,你去搜叫小bug的,用他账号登就行,反正不需要密码,改完了再登录问小美flag就行。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/997441.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号