您现在的位置是:首页 > 技术教程 正文

PHP特性靶场

admin 阅读: 2024-03-17
后台-插件-广告管理-内容页头部广告(手机)

1.web89

代码讲解 

1.代码中包含了一个名为"flag.php"的文件,这是一个包含敏感信息(例如标志)的文件。include("flag.php");语句用于将该文件的内容包含在当前文件中。
2.用户输入处理: 代码通过$_GET['num']接收用户输入,并存储在变量$num中。然后,它使用正则表达式检查用户输入是否包含数字。如果用户输入中包含数字,程序将终止执行并输出"no no no!"。
3.类型转换: 如果用户输入不包含数字,代码尝试将其转换为整数(intval($num))。如果转换成功(即用户输入是一个非零整数),则会输出标志内容。
4.漏洞分析: 代码存在一个安全漏洞,即对用户输入的过滤不足。攻击者可以通过构造恶意输入,绕过数字检查,使程序执行include("flag.php");并输出标志内容。

解决

输入/?num[]=1

回车之后出现flag

2.web90

1.文件包含: 代码中包含了一个名为"flag.php"的文件,这是一个包含敏感信息(例如标志)的文件。include("flag.php");语句用于将该文件的内容包含在当前文件中。
2.用户输入处理: 代码通过$_GET['num']接收用户输入,并存储在变量$num中。然后,它首先检查用户输入是否等于字符串"4476",如果相等,则输出"no no no!"并终止执行。
3.类型转换: 如果用户输入不等于字符串"4476",代码尝试将其转换为整数(intval($num, 0))。如果转换成功且等于4476,则输出标志内容。否则,输出转换后的整数值。
4.漏洞分析: 通过将用户输入硬编码为字符串"4476",代码试图防止直接输入4476以绕过漏洞。然而,由于存在类型转换,攻击者仍然可以通过输入"0e4476"绕过数字检查,使程序输出标志内容。

解决

输入?num=0x117c

3.web91

代码讲解

1.文件包含: 代码中包含了一个名为"flag.php"的文件,这是一个包含敏感信息(例如标志)的文件。include('flag.php');语句用于将该文件的内容包含在当前文件中。
2.用户输入处理: 代码通过$_GET['cmd']接收用户输入,并存储在变量$a中。
3.正则表达式检查: 代码使用两个正则表达式检查用户输入是否以"php"开头(不区分大小写)。如果用户输入以"php"开头,那么代码会进一步检查是否完全匹配"php",如果匹配,则输出’hacker’;否则输出标志内容。如果用户输入不以"php"开头,则输出’nonononono’。
4.漏洞分析: 此代码存在一个安全漏洞,因为正则表达式检查的逻辑导致了绕过。攻击者可以通过在输入中添加换行符\n或其他字符来绕过第一个正则表达式检查,然后绕过第二个正则表达式检查,最终输出标志内容。

解决

输入/?cmd=php%0a123

4.web92

1.文件包含: 代码中包含了一个名为"flag.php"的文件,这是一个包含敏感信息(例如标志)的文件。include("flag.php");语句用于将该文件的内容包含在当前文件中。
2.用户输入处理: 代码通过$_GET['num']接收用户输入,并存储在变量$num中。
3.条件判断: 代码首先检查用户输入是否等于整数4476,如果相等,则输出"no no no!"并终止执行。然后,代码再次检查用户输入是否等于整数4476,如果相等,则输出标志内容。如果用户输入不等于整数4476,则输出转换后的整数值。
4.漏洞分析: 该代码存在一个安全漏洞,即使用相等(==)进行比较。攻击者可以通过输入字符串"4476abc",由于PHP的弱类型比较,该字符串会被转换为整数4476,从而绕过第一个条件,最终导致输出标志内容。

解决

输入/?num=4476.1

5.web93

1.文件包含: 代码中包含了一个名为"flag.php"的文件,这是一个包含敏感信息(例如标志)的文件。include("flag.php");语句用于将该文件的内容包含在当前文件中。
2.用户输入处理: 代码通过$_GET['num']接收用户输入,并存储在变量$num中。
3.条件判断: 代码首先检查用户输入是否等于整数4476,如果相等,则输出"no no no!"并终止执行。然后,代码使用正则表达式检查用户输入是否包含任何字母,如果包含字母,则输出"no no no!"并终止执行。最后,代码再次检查用户输入是否等于整数4476,如果相等,则输出标志内容。如果用户输入不等于整数4476,则输出转换后的整数值。
4.漏洞分析: 通过添加字母到用户输入,攻击者可以绕过第一个条件,并且由于正则表达式不区分大小写,仍然可以绕过第二个条件。因此,攻击者可以输入字符串"4476abc",最终导致输出标志内容。

解决

输入/?num=4476.1

6.web94

1.文件包含: 代码中包含了一个名为"flag.php"的文件,这是一个包含敏感信息(例如标志)的文件。include("flag.php");语句用于将该文件的内容包含在当前文件中。
2.用户输入处理: 代码通过$_GET['num']接收用户输入,并存储在变量$num中。
3.条件判断: 代码使用了多个条件进行判断:

(1)首先,检查用户输入是否完全等于字符串"4476",如果相等,则输出"no no no!"并终止执行。
(2)然后,使用正则表达式检查用户输入是否包含任何字母,如果包含字母,则输出"no no no!"并终止执行。
(3)接着,使用strpos函数检查用户输入中是否包含字符"0",如果不包含,则输出"no no no!"并终止执行。
(4)最后,再次检查用户输入是否等于整数4476,如果相等,则输出标志内容。

4.漏洞分析: 尽管代码尝试通过多个条件来增加安全性,但在第三个条件中,使用strpos函数检查是否包含字符"0"的逻辑存在问题。攻击者可以通过输入字符串"4476abc",绕过前两个条件,由于不包含字符"0",绕过第三个条件,最终导致输出标志内容。

解决

输入/?num = 4476.0

7.web95

1.文件包含: 代码中包含了一个名为"flag.php"的文件,这是一个包含敏感信息(例如标志)的文件。include("flag.php");语句用于将该文件的内容包含在当前文件中。
2.用户输入处理: 代码通过$_GET['num']接收用户输入,并存储在变量$num中。
3.条件判断: 代码使用了多个条件进行判断:

(1)首先,检查用户输入是否等于整数4476,如果相等,则输出"no no no!"并终止执行。
(2)然后,使用正则表达式检查用户输入是否包含任何字母或句点(.),如果包含,则输出"no no no!!"并终止执行。
(3)接着,使用strpos函数检查用户输入中是否包含字符"0",如果不包含,则输出"no no no!!!"并终止执行。
(4)最后,再次检查用户输入是否等于整数4476,如果相等,则输出标志内容。

4.漏洞分析: 虽然代码尝试通过多个条件来增加安全性,但在第二个条件中,使用正则表达式检查是否包含字母或句点的逻辑存在问题。正则表达式/[a-z]|\./i可能会导致绕过,攻击者可以通过输入字符串"4476abc",由于句点不被拦截,最终导致输出标志内容。

解决

输入/?num= +010574

8.web96

1.文件包含: 代码使用highlight_file(__FILE__);将当前文件的源代码进行高亮显示输出。
2.用户输入处理: 通过$_GET['u']接收用户输入,并存储在变量$u中。
3.条件判断: 如果用户输入的值等于"flag.php",则输出"no no no"并终止执行。否则,通过highlight_file($_GET['u']);将用户输入的文件名进行高亮显示输出。
4.漏洞分析: 该代码存在一个潜在的文件包含漏洞,因为用户可以通过设置$_GET['u']为"flag.php"来阻止访问敏感文件。此外,虽然代码尝试使用highlight_file()函数对用户输入进行高亮显示,但仍可能存在安全风险,因为用户输入未经充分验证。

解决

输入/?u=./flag.php

9.web97

1.文件包含: 代码中包含了一个名为"flag.php"的文件,这是一个包含敏感信息(例如标志)的文件。include("flag.php");语句用于将该文件的内容包含在当前文件中。
2.用户输入处理: 代码使用$_POST['a']和$_POST['b']接收用户输入,并分别存储在变量$a和$b中。
3.条件判断:

(1)首先,代码通过isset($_POST['a']) and isset($_POST['b'])检查是否同时设置了$_POST['a']和$_POST['b']。如果是,则执行后续逻辑。
(2)然后,代码比较$_POST['a']和$_POST['b']的值是否相等,如果不相等,则执行下一步判断。
(3)接着,代码使用md5()函数对$_POST['a']和$_POST['b']的值进行哈希运算,并比较它们的哈希值是否相等。

如果相等,则输出标志内容。
如果不相等,则输出"Wrong."。


4漏洞分析:

这段代码存在逻辑错误。即使输入$_POST['a']和$_POST['b']不相等,但只要它们的MD5哈希值相等,就会输出标志内容。这意味着攻击者可以通过找到相同MD5哈希值的两个不同输入来绕过输入检查,从而导致输出标志内容。
此外,MD5已经被认为是不安全的哈希算法,因为它容易受到碰撞攻击,因此不建议在安全应用中使用。

解决

输入a[]=1&b[]=2

10.web98

1.文件包含: 代码中包含了一个名为"flag.php"的文件,这是一个包含敏感信息(例如标志)的文件。然而,由于代码混乱,不易理解,实际上很难确定该文件是否会被正确地包含进来。
2.逻辑混乱: 代码使用了三元运算符和条件判断,但逻辑非常混乱和难以理解。例如,通过将$_GET赋值给$_POST,然后检查$_GET['flag']是否等于’flag’,如果是,则将$_GET重新赋值给$_COOKIE或$_SERVER,然后根据$_GET['HTTP_FLAG']的值来输出文件内容。
3.安全隐患: 这段代码存在严重的安全隐患,包括但不限于:

代码混乱难以维护,容易引入漏洞。
使用$_GET等超全局变量直接操作用户输入,存在安全风险。
可能会导致文件包含漏洞,泄露敏感信息。
对输入的验证不充分,可能受到各种类型的攻击,包括代码注入和跨站脚本攻击(XSS)等。

解决

输入HTTP_FLAG=flag

11.web100

1.文件包含: 首先,代码使用highlight_file(__FILE__);将当前文件的源代码进行高亮显示输出。然后,代码包含了一个名为"ctfshow.php"的文件,该文件中包含了一个类ctfshow,其中包含了标志信息。
2.用户输入处理: 代码接收了三个用户输入参数v1、v2、v3,分别存储在变量$v1、$v2、$v3中。
条件判断和逻辑处理:

变量$v0用于判断三个输入参数是否均为数字类型,但代码中使用了逻辑操作符and,导致$v0的值实际上是一个布尔值,而不是判断结果。这是一个常见的错误。
如果三个输入参数均为数字类型,则进入条件判断语句。
在条件判断语句中,首先检查$v2是否不包含分号;,如果是,则进入内部条件判断。
如果$v3包含分号;,则通过eval()函数执行拼接的字符串,其中包含了$v2的值作为函数名和字符串'ctfshow'。

3.漏洞分析:

此代码存在严重的安全漏洞,因为它使用了eval()函数执行用户输入,而且没有对用户输入进行充分的验证和过滤。
攻击者可以构造恶意输入,绕过条件判断,注入任意代码,并最终执行在用户输入中指定的函数,可能导致严重的安全问题,包括代码执行漏

解决

输入?v1=1&v2=var_dump($ctfshow)&v3=;

标签:
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

在线投稿:投稿 站长QQ:1888636

后台-插件-广告管理-内容页尾部广告(手机)
关注我们

扫一扫关注我们,了解最新精彩内容

搜索