ctfshow学习记录-web入门(php特性109-115&123&125-126)


web109

解答:正则匹配要求v1和v2要包含字母。题目中eval里的语句,和之前web101有点相似。
初始化$v1,v1是个类,$v2()是参数。

这道题用到了魔术方法__toString(),不少php的内置类里都包含有这个方法,如ReflectionclassExceptionError

不知道哪些类有的话,可以用php手册搜一下。
在这里插入图片描述
__toString():当一个对象被当作字符串对待的时候,会触发这个魔术方法,格式化输出这个对象所包含的数据。

PHP5.2.0之前,__toString() 方法只在使用 echo 或 print 时才生效。PHP5.2.0之后,可以在任何字符串环境生效。

所以echo使得$v1类触发__toString(),传递的参数v2会被输出。

payload:
?v1=CachingIterator&v2=system(ls)
?v1=Exception&v2=system('cat fl36dg.txt')
在这里插入图片描述在这里插入图片描述
最后,再对v2后面的括号进行解释,如v2=system(ls),$v2()会把$v2返回的值会作为函数名去调用,但是调用失败了。

只要变量后面紧跟着(),那么对这个变量进行函数调用。

如可以让返回值是phpinfo,就可以调用phpinfo()。
在这里插入图片描述


web110

解答:不能包含数字和上面一系列的符号,下划线和括号都不行,只能输入字母。v1是类名,v2是函数名,同时该函数的返回值是string,可以触发__toString()。

先用?v1=exception&v2=phpinfo查看一下有没有限制什么函数,以及扩展都有什么。

接下来就是找返回值是字符串的无参数函数。
FilesystemIterator
?v1=FilesystemIterator&v2=getcwd
返回第一个文件,正好是flag的文件。
在这里插入图片描述
flag文件就在当前目录下,所以直接访问即可获取flag。
在这里插入图片描述
知识点:
DirectoryInterator:遍历目录的类
FilesystemIterator:遍历文件的类


web111

解答:v1和v2只能输入字母,同时1要包含字符串ctfshow。

看一下getFlag,&属于地址传参,意思就是在函数内,如果对v1和v2变量进行修改,就是真实的被修改了。因此题目说的是变量覆盖。

eval("$$v1 = &$$v2;"); 意思是:以v1变量的值为新的变量名,和以v2变量的值为新的变量名,这两个新的变量指向同一个地址,改变一个的值另外一个也跟着改变。如下示例:

$n1=a;$n2=b;

$$n1=$a;$$n2=$b;  ==>  $a=&$b;#变量b将地址传给了变量a,即两个变量指向同一个地址

v1用来满足条件判断,v2用来输出想要的信息,v2也是只能输入字母。include(flag.php),$flag是在外部声明,不能直接使用。
可以查看一下全局变量,发现flag。
payload?v1=ctfshow&v2=GLOBALS
在这里插入图片描述


web112

解答:限制了部分伪协议,但是php://filter还可以用,可以不用过滤器直接读取。
同时if判断要求file不能为文件,可以用包装器伪协议来绕过。
伪协议不影响file_get_contents,和highlight_file。

payload1?file=php://filter/resource=flag.php
在这里插入图片描述
payload2:也可以用web117的convert.iconv过滤器读取。
?file=php://filter/convert.iconv.UCS-2LE.UCS-2BE/resource=flag.php
在这里插入图片描述
读完需要转一下。

<?php
#因为有特殊符号,需要加上转义符
$flag="f\$al=gc\"fthswo3{71eeb1-9103f4-7d-1b88f7-d90e06ab44}9;\"";
$result=iconv("UCS-2BE","UCS-2LE",$flag);
echo  "flag:".$result."\n";
?>

payload3:转换过滤器convert里还有一个quoted-printable-encode可以用。
?file=php://filter/read=convert.quoted-printable-encode/resource=flag.php
在这里插入图片描述
payload4:封装协议zip:?file=compress.zlib://flag.php
compress.zlib类似gzopen()
在这里插入图片描述

进一步学习:可以查看一下php手册学习一个各个协议。
在这里插入图片描述
file协议不能绕过is_file的判断。
http协议需要公网ip。
glob协议返回的是一个数组。highlight_file不能对数组进行高亮,所以本题不能用。


web113

解答:这次限制了filter,但可以用封装协议。
payload1?file=compress.zlib://flag.php
在这里插入图片描述
payload2:目录溢出导致is_file认为这不是一个文件。

?file=/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/var/www/html/flag.php

/proc/self:不同的进程访问该目录时获得的信息是不同的,内容等价于/proc/本进程pid/。/proc/self/root/是指向/的符号链接,就是根目录。
在这里插入图片描述


web114

解答:限制了compress和convert,没有限制filter。

payload:可以直接读取
?file=php://filter/resource=flag.php
在这里插入图片描述


web115

解答:有字符替换的过滤。同时
is_numeric可以在数字前面加空格绕过,同时加上空格可以绕过$num!='36'

trim是移除字符串两侧的空白字符或其他预定义字符,可以看到空格等字符是会被去掉的,那么可以用%0c
在这里插入图片描述
使用%0c也可以绕过filter。

接下来再看第二个if判断,这是看起来很矛盾的一个判断。
在这里插入图片描述
来具体看一下!==的定义,只要类型不同就不全等。
在这里插入图片描述

        如果比较一个数字和字符串或者比较涉及到数字内容的字符串,则字符串会被转换为数值并且比较按照数值来进行。此规则也适用于 switch 语句。当用 === 或 !== 进行比较时则不进行类型转换,因为此时类型和数值都要比对。
             ——《php手册》语言参考-运算符-比较运算符

可以看到!==时不进行类型转换。

所以加上%0c换页符,在==进行类型转换,所有%0c36会被转换为数值36,结果true;在!==不进行类型转换,所以字符串和数值比较,类型不同,结果true。

payload?num=%0c36

在这里插入图片描述


web123

解答:限制了一些特殊字符,限制了输入长度。

仔细看一下判断,要求CTF_SHOW、CTF_SHOW.COM必须传参,fl0g不能传参。所以$fl0g==="flag_give_me"条件难以满足,可以利用上面的eval。

c的值来源于fun,提供了分号,那么就让它执行题中的echo $flag即可。

默认会把点转换为下划线,对不符合规则的变量里只转换一次,CTF_SHOW.COM里有两个不规则的字符,所以需要写成CTF[SHOW.COM

PHP将查询字符串(在URL或正文中)转换为内部$_GET或的关联数组$_POST。如:/?CTF=ctf变成Array([CTF] => "ctf")
查询字符串在解析的过程中会删除空白符,同时将某些字符删除或用下划线代替。如,/?CTF[SHOW=42会转换为Array([CTF_SHOW] => 42)

payload-postCTF_SHOW=&CTF[SHOW.COM=&fun=echo $flag
在这里插入图片描述


web125

解答:限制了flag、GLOBALS和echo

题目中限制了一些函数,phpinfo失败,当然system之类的也不行。

输出内容函数大多被限制了,但是highlight_file肯定没有被限制,当前页面就用到了,所以用highlight_file高亮显示。限制了长度,那么可以考虑get再传参。

payload
get:?1=flag.php
post:CTF_SHOW=&CTF[SHOW.COM=&fun=highlight_file($_GET[1])

用hackbar发了半天没反应。。。让我一度怀疑是不是哪里还有问题,最后用burp成功了。
在这里插入图片描述


web126

解答:本题还限制了gifcod,而且是大小写匹配。那么highlight_file不能用了,各种输出函数不能使用了,所以不能直接通过eval来实现输出flag了,需要考虑用满足fl0g的条件来echo $flag

不能set变量fl0g,所以要通过eval实现变量覆盖。可以实现变量覆盖的函数:
extract($array): 从数组中将变量导入到当前的符号表。可以实现变量覆盖。
parse_str($str):将字符串解析成多个变量。
以及可以执行php语句的函数,如assert()、eval()。

extract($array)因为有字符c,所以不能使用。$_GET传参不可以,有字符g。

题目中还提供了一个$a,值为$_SERVER['argv']

命令行模式下$_SERVER['argv'][0]是脚本名,其他的是传递给脚本的参数。
网页模式下:需要php.ini开启register_argc_argv配置。$_SERVER['argv'][0] = $_SERVER['QUERY_STRING'];

在这里插入图片描述
$_SERVER['argv'][0] $_SERVER['QUERY_STRING'];$_SERVER['argv'][1] 的传递方式就和命令行类似了,空格,然后传递第二个参数,以此类推。利用$_SERVER['argv'][1] 就可以绕过对isset($fl0g)的判断。用+代表空格。

payload1
GET:?a=1+fl0g=flag_give_me
POST:CTF_SHOW=&CTF[SHOW.COM=&fun=parse_str($a[1])
在这里插入图片描述
payload2:还可以用assert()执行php语句,实现变量覆盖。
下图可以看到直接输入字符,$_SERVER['argv'][0] 是输入的字符串,所以可以利用来执行php语句。
在这里插入图片描述
GET:?$fl0g=flag_give_me
POST:CTF_SHOW=&CTF[SHOW.COM=&fun=assert($a[0])
在这里插入图片描述
payload3:再利用eval,需要注意里面的语句必须分号;?>结尾。
GET:?$fl0g=flag_give_me;
POST:CTF_SHOW=&CTF[SHOW.COM=&fun=eval($a[0])
在这里插入图片描述

### 回答1: ctfshow-web-web红包题是一道CTF比赛中的网络安全题目。这道题目的背景是一个在线购物网站,要求我们通过安全漏洞来获得网站的红包。 首先,我们可以检查网站的源代码,寻找可能存在的漏洞。在网站的前端页面中,我们注意到了一个提交订单的功能,并且发现了其中一个参数可以被用户任意修改。这可能导致一个被称为SQL注入的漏洞。 我们试图通过在参数中插入恶意代码来进行SQL注入攻击。我们发现当我们输入`' or 1=1 -- `时,查询结果会返回所有订单记录,而不仅仅是当前用户的订单。这表明成功利用了SQL注入漏洞。 接下来,我们要尝试进一步利用这个漏洞来获取网站的红包。我们可以通过构建特制的SQL语句来绕过登录过程,直接获取红包的信息。 最终,我们成功地利用了网站存在的漏洞,获取到了红包的相关信息。这个过程展示了在网络安全竞赛中,如何通过分析代码和利用漏洞来实现攻击的目标。 在这个过程中,我们需要具备对SQL注入漏洞的理解和掌握,并且需要有一定的编程和网络安全知识。通过解决这样的题目,我们可以提高我们对网络安全攻防的认识和技能,以更好地保护网络安全。 ### 回答2: ctfshow-web-web红包题是一个CTF(Capture the Flag)比赛中的Web题目,目标是通过分析Web应用程序的漏洞来获取红包。CTF比赛是一种网络安全竞赛,在这种比赛中,参赛者需要通过解决各种不同类型的安全挑战来积分。 该题目中的Web应用程序可能存在一些漏洞,我们需要通过分析源代码、网络请求和服务器响应等信息来找到红包的位置和获取红包的方法。 首先,我们可以查看网页源代码,寻找可能的注入点、敏感信息或其他漏洞。同时,我们还可以使用开发者工具中的网络分析功能来查看浏览器和服务器之间的通信内容,找到可能存在的漏洞、密钥或其他敏感信息。 其次,我们可以进行输入测试,尝试不同的输入来检查是否存在注入漏洞、文件包含漏洞、路径遍历漏洞等。通过测试和观察响应结果,我们可以得到一些重要的信息和线索。 最后,我们可以分析服务器响应和错误信息,查找可能存在的网站配置错误、逻辑漏洞或其它任何可以利用的安全问题。此外,我们还可以使用常见的Web漏洞扫描工具,如Burp Suite、OWASP ZAP等,来辅助我们发现潜在的漏洞。 通过以上的分析和测试,我们有可能找到获取红包的方法。然而,具体的解题方法还需要根据题目中的具体情况来确定。在CTF比赛中,每个题目的设置都可能不同,解题的方法和思路也会有所差异。因此,在解题过程中,要保持敏锐的观察力和灵活的思维,尝试不同的方法和技巧,才能成功获取红包并完成任务。 ### 回答3: ctfshow-web-web红包题是一个CTF比赛中的网络题目,其目标是寻找并利用网页内的漏洞,获取红包。 首先,我们需要分析该网页的源代码,寻找可能存在的漏洞。可以通过审查元素、浏览器开发者工具等方式进行源代码分析。 其中,可能存在的漏洞包括但不限于: 1. 文件路径遍历漏洞:通过对URL的参数进行修改,尝试访问其他目录中的文件。 2. XSS漏洞:通过在用户输入的地方注入恶意代码,实现攻击者想要的操作。 3. SQL注入漏洞:通过修改数据库查询参数,获取未授权的数据。 4. 文件上传漏洞:上传恶意文件并执行。 一旦发现漏洞,我们需要进一步利用它们来获取红包。例如,如果存在文件路径遍历漏洞,我们可以尝试通过修改URL参数的方式,访问网站服务器上存放红包的文件目录,获取目录中的文件。 如果存在XSS漏洞,我们可以尝试在用户输入的地方注入一段JavaScript代码,以获取网页中的敏感信息或执行一些恶意操作,如窃取cookies。 如果存在SQL注入漏洞,我们可以尝试通过修改数据库查询参数,获取未授权的数据,如红包的具体位置或密码。 如果存在文件上传漏洞,我们可以尝试上传一个特殊设计的恶意文件,以执行任意命令或获取服务器上的文件。 综上所述,ctfshow-web-web红包题需要我们深入分析网页代码,发现可能存在的漏洞,并利用这些漏洞获取红包。这个过程需要我们对常见的漏洞类型有一定的了解,并具备相关的漏洞利用技术。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值