1.HTTP

进入题目发现要get name,我们猜测要用get的提交数据方式传一个值
get传值公式为
?+变量名+等于号(=)+变量值
题目中的“name”添加了单引号,猜测变量名为name传入
?name=1

进入第二关,需要我们post一个key值,但我们不知道key
F12进入开发者模式,html中藏了key值

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

用bp传入key=ctfisgood后,发现response说我们不是admin,
我们看到cookie中显示user=guest,改为user=admin
得到flag{ed52ca0c-40c7-4c7e-bfd7-d4f2cbbd2435}
2.Head?Header!

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

必须要求我们来自‘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:ctf.com

这里提示我们不是local,在php中有很多头能改来源常见的是X-Forward-For
我们添加一行
X-Fordward-For:127.0.0.1
127.0.0.1就是本地地址

得到flag{d0637815-c4fc-4aa4-a842-06ebfc22817b}
3.我真的会谢

flag放在三个地方,都是敏感文件
一般常见的有
robots.txt .index.php.swp www.zip index.php~ 还有很多可以自行查询
题目这里是robots.txt .index.php.swp www.zip



得到flag
正常情况下我们用dirsearch就可以扫出来,不过buu这里不支持
4.NotPHP
1 |
|
是一道php代码审计题目一共有四关
第一关
1 | if(file_get_contents($_GET['data']) == "Welcome to CTF") |
这里给出相关知识点file_get_contents相关知识点
这里我们用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可以绕过
当我们让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

看着像sql注入猜一波万能密码
1 | 1' or 1=1# |

直接出,这里给一个sql注入学习链接
第一周做完了,题目还算比较简单,这段时间充实下自己吧