[CTFshow]WebPHP特性章节之[89-104]笔记

前言

我好菜,打着打着就忘了之前打过的靶场的思路了

图片[1],[CTFshow]WebPHP特性章节之[89-104]笔记,网络安全爱好者中心-神域博客网

Web89

图片[2],[CTFshow]WebPHP特性章节之[89-104]笔记,网络安全爱好者中心-神域博客网

intval取整数 就跟python中的int一样

这里是只要有0-9就输出nonono 但是还需要是传出去是整数

所以我们用数组绕过

图片[3],[CTFshow]WebPHP特性章节之[89-104]笔记,网络安全爱好者中心-神域博客网

Web90

图片[4],[CTFshow]WebPHP特性章节之[89-104]笔记,网络安全爱好者中心-神域博客网

intval($var,$base),其中var必填,base可选,这里base=0,则表示根据var开始的数字决定使用的进制: 0x或0X开头使用十六进制,0开头使用八进制,否则使用十进制。

这里是0开头 说明是根据开始的数字决定使用的进制

这里用的是八进制十六进制绕过 加0是告诉服务器这是八进制 如果转换成十六进制需要加0x

图片[5],[CTFshow]WebPHP特性章节之[89-104]笔记,网络安全爱好者中心-神域博客网

Web91

图片[6],[CTFshow]WebPHP特性章节之[89-104]笔记,网络安全爱好者中心-神域博客网

不想打字了,感觉WP里给的说的好全面

i忽略大小写 m多行模式 我们只要让我们的参数里含有php即可

payload:cmd?=111%0aphp 或者cmd?=php%0aggg

图片[7],[CTFshow]WebPHP特性章节之[89-104]笔记,网络安全爱好者中心-神域博客网

Web92

图片[8],[CTFshow]WebPHP特性章节之[89-104]笔记,网络安全爱好者中心-神域博客网

这里与web90的不同之处就在于等号了

===表示类型和数值必须相等 ==是值相等就可以类型不一定相等

我们知道强制转换如果是小数部分的话会舍弃小数部分直接构造小数

图片[9],[CTFshow]WebPHP特性章节之[89-104]笔记,网络安全爱好者中心-神域博客网

Web93

图片[10],[CTFshow]WebPHP特性章节之[89-104]笔记,网络安全爱好者中心-神域博客网

不解释直接秒

Web94

图片[11],[CTFshow]WebPHP特性章节之[89-104]笔记,网络安全爱好者中心-神域博客网

查一下strpos用法

图片[12],[CTFshow]WebPHP特性章节之[89-104]笔记,网络安全爱好者中心-神域博客网

这里说明我们得含有0 但不能在开头,因为开头告诉服务器使用几进制

图片[13],[CTFshow]WebPHP特性章节之[89-104]笔记,网络安全爱好者中心-神域博客网

Web95

图片[14],[CTFshow]WebPHP特性章节之[89-104]笔记,网络安全爱好者中心-神域博客网

过滤了.八进制起手 +或者空格绕过最后一个限制

图片[15],[CTFshow]WebPHP特性章节之[89-104]笔记,网络安全爱好者中心-神域博客网

Web96

直接远程读取高亮显示

图片[16],[CTFshow]WebPHP特性章节之[89-104]笔记,网络安全爱好者中心-神域博客网

Web97

图片[17],[CTFshow]WebPHP特性章节之[89-104]笔记,网络安全爱好者中心-神域博客网

这个意思需要我们post传入a和b的内容不同但md5的值一样

图片[18],[CTFshow]WebPHP特性章节之[89-104]笔记,网络安全爱好者中心-神域博客网
图片[19],[CTFshow]WebPHP特性章节之[89-104]笔记,网络安全爱好者中心-神域博客网

Web98

图片[20],[CTFshow]WebPHP特性章节之[89-104]笔记,网络安全爱好者中心-神域博客网

三元操作符号 以冒号为分隔 如果?之前成立则执行一,否则执行二

第二个和第三行意思一样 没用 直接看最后一行 如果get的值http_flag==flag则输出flag

因为之前传的get会给咱们变成post 所以咱们直接传get

post里传值

图片[21],[CTFshow]WebPHP特性章节之[89-104]笔记,网络安全爱好者中心-神域博客网

Web99

图片[22],[CTFshow]WebPHP特性章节之[89-104]笔记,网络安全爱好者中心-神域博客网

头稍微有点小大,我们的目的应该是把content里传入一句话木马,写入n里即可

写入n 那么n肯定是php中吧所以后缀肯定让n=几php 0x36d 一眼十六进制 转化过来是877

图片[23],[CTFshow]WebPHP特性章节之[89-104]笔记,网络安全爱好者中心-神域博客网

接下来就是上蚁剑连接

图片[24],[CTFshow]WebPHP特性章节之[89-104]笔记,网络安全爱好者中心-神域博客网
图片[25],[CTFshow]WebPHP特性章节之[89-104]笔记,网络安全爱好者中心-神域博客网

WEB100

图片[26],[CTFshow]WebPHP特性章节之[89-104]笔记,网络安全爱好者中心-神域博客网

=的优先级比and高 所以只需满足V1是数字=true让if那里成立 让后尝试绕过第一个if

第一个if不含; 第二个if含;

图片[27],[CTFshow]WebPHP特性章节之[89-104]笔记,网络安全爱好者中心-神域博客网
图片[28],[CTFshow]WebPHP特性章节之[89-104]笔记,网络安全爱好者中心-神域博客网

Web101

图片[29],[CTFshow]WebPHP特性章节之[89-104]笔记,网络安全爱好者中心-神域博客网

过滤的更多了,

这里是新建了一个类,通过反射类拿到flag,在java一些语言也有(都是看wp说的..

v3并没有给;所以可以让v3=;

?v1=1&v2=echo new ReflectionClass&v3=;
图片[30],[CTFshow]WebPHP特性章节之[89-104]笔记,网络安全爱好者中心-神域博客网
图片[31],[CTFshow]WebPHP特性章节之[89-104]笔记,网络安全爱好者中心-神域博客网

最后转换少一位爆破就可以了

Web102

图片[32],[CTFshow]WebPHP特性章节之[89-104]笔记,网络安全爱好者中心-神域博客网

需要好好考虑一下构造payload

我们的内容是什么 我们的内容是把str的内容写进v3 也就说str里要写eval函数或者能拿flag的函数

根据优先级的问题还是让v1=1这样才能v4等于true

 $str = call_user_func($v1,$s); 意思我们通过调用v1这个函数(hex2bin这个函数将十六进制转换为二进制字符串) 执行s并把执行结果给str 让后把str的结果写给进v3

v3得的后缀是个php把 这样才能写进去 通过伪协议进行创建

substr截取两个字符 也就是从第三个字符开始读取 所以要用十六进制 让后通过hex2bin将十六进制转换为二进制字符串 关键这个十六进制改怎么构建 我们需要把<?php `cta *`?> 转换一下 我们可以先把他转换成base64 再把base64转换为十六进制

5044383959474e6864434171594473=PD89YGNhdCAqYDs=<?php `cta *`?>

但是为了截取两个数字那么要从要在前面十六进制加两个数字随便加个99吧995044383959474e6864434171594473

加什么都无所谓都会被截取

?v2=995044383959474e6864434171594473&v3=php://filter/write=convert.base64-
decode/resource=godyu.php

POST里传

v1=hex2bin
图片[33],[CTFshow]WebPHP特性章节之[89-104]笔记,网络安全爱好者中心-神域博客网

访问godyu.php 右键查看源代码

图片[34],[CTFshow]WebPHP特性章节之[89-104]笔记,网络安全爱好者中心-神域博客网

Web103

图片[35],[CTFshow]WebPHP特性章节之[89-104]笔记,网络安全爱好者中心-神域博客网

上把的直接梭哈

图片[36],[CTFshow]WebPHP特性章节之[89-104]笔记,网络安全爱好者中心-神域博客网

WEB104

图片[37],[CTFshow]WebPHP特性章节之[89-104]笔记,网络安全爱好者中心-神域博客网

sha1转换一下直接秒

图片[38],[CTFshow]WebPHP特性章节之[89-104]笔记,网络安全爱好者中心-神域博客网
图片[39],[CTFshow]WebPHP特性章节之[89-104]笔记,网络安全爱好者中心-神域博客网

------本文已结束,感谢您的阅读------
THE END
喜欢就支持一下吧
点赞8 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容