第九周报

web67

与66一样

还是txt文件

文件包含

web78

发现是include()函数,而且没有过滤所以直接用file://插入读取文件的代码,不过先要康康flag在那个文件里

data伪协议执行PHP代码?file=data://text/plain,<?php system('ls');?>

可以查看文件,发现flag.php

可以?file=php://filter/read=convert.base64-encode/resource=flag.php得到flag

web79

这题用str_replace把php变成了???

就直接用data然后编码base64绕过

先查看文件

/?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCdscycpOw==

是flag.php,再用这个<?php system('cat flag.php');,编码后读取flag

?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs=

web80

多过滤了data

日志注入

?file=/var/log/apache2/access.log访问日志路径发现不对

换成?file=/var/log/nginx/access.log

可以,直接在User Agent注入一句话木马,用蚁剑连接

web81

与80一样,可以日志注入

web82

需要竞争环境

没学会

web87

二次编码没学会

web88

这里依然用data协议

data协议构造base64的时候要求不含=和+号,要好好思考构造

我这里用eval GET的方式绕过,不会出现+号,?>后结尾加一个11不会影响代码,还可以消除=号

Cjw/cGhwIGV2YWwoJF9HRVRbJ2NtZCddKTs/PjEx&cmd=system('tac fl0g.php');、

php特性

web89

intval 会从字符串的开始位置解析直到遇到一个非数字字符,如123asd输出123,而且会转化为整数

preg_match当检测的变量是数组的时候会报错,而intval函数当传入的变量也是数组的时候,会返回1,则可以绕过?num[]=1

web90

num不能是4476还要===4476,正好有intval函数在4476后随便个字母即可

web91

这道题从GET参数中获取'cmd',然后检查这个参数是否等于'php'。如果是,它会再次检查这个参数是否完全等于'php'。如果这两个检查都通过,脚本会输出'hacker',否则,它会输出flag。

所以要通过第一个,然后第二个不过

这两个检查使用了不同的正则表达式匹配模式。第一个使用了'/im',这意味着i(忽略大小写)和m(多行模式)。第二个只使用了'i',也就是不忽略大小写,而且只在第一行查找

?cmd=111%0aphp

%0a'是url编码的换行符。

web92

这题有一个==弱等于,所以在4476后加字母就没有区别了,但是intval会把数字转换为整数,所以输入带有小数的4476即可

?num=4476.1

web93

与上题同,小数点绕过

web94

strpos(string,find,start)有三个参数,string是被检查的字符串,find是要被搜索的字符串,start是开始检索的位置

可以看出要有0

所以?num=4476.0

web95

?num=%20010574

百分号用于对特殊字符进行编码。在这种情况下,%20 表示一个空格字符,是URL编码中的空间字符。因此,“%20010574” 实际上是一个包含URL编码空格的字符串,它等同于 " 010574",其中 " " 表示一个空格。
010574 是八进制数代表是十进制4476

web96

php伪协议秒了

?u=php://filter/read=convert.base64-encode/resource=flag.php

web97

想要同时输入两个参数要在第一个参数后加&

php检查两数组是否相等的时候,不会检查指针是否相等,而是会检查元素是否相等(我的猜测是类似于调用str方法再进行对比,因为[1,2]测试了实际上不等于[2,1],而[1]是等于[1]的)

md5无法对数组加密,对数组加密返回的是null

所以直接输入两个不相等的数组即可

web98

根据题目提示直接?1=&

post    HTTP_FLAG=flag

web99

array_push——往数组尾部插入元素
rand(1,$i)——随机生成1-877之间的数
//所以array_push($allow, rand(1,$i))就是往数组中插入1-877之间的数字
in_array——搜索数组中是否存在指定的值:
in_array(search,array,type)
search为指定搜索的值
array为指定检索的数组
type为TRUE则 函数还会检查 search的类型是否和 array中的相同

这题没有type,直接6.php,再在post里面用content写入一句话木马,wp说有概率能成功,反正我没成功

web100

如果变量是数字或数字字符串(包括整数和浮点数),is_numeric() 函数会返回 true,否则返回 false。

v2,v3不需要是数字,因为and运算时v0已经计算完毕了

可以用/*   */将ctfshow注释了

v2=var_dump($ctfshow)/*&v3=*/;

web101

用new ReflectionClass($class)这个语法可获得类的反射对象(包含元数据信息)

元数据对象(包含class的所有属性/方法的元数据信息)。

?v1=123&v2=echo new ReflectionClass&v3=; 结果得到下面的代码看不懂

Class [ class ctfshow ] { @@ /var/www/html/ctfshow.php 15-17 - Constants [0] { } - Static properties [0] { } - Static methods [0] { } - Properties [3] { Property [ public $dalaoA ] Property [ public $dalaoB ] Property [ public $flag_d7846f9f0x2d51830x2d46930x2da9eb0x2d72683778be9 ] } - Methods [0] { } }

web102

substr() 字符串截取,如上意思就是把v2前两个字符去除

call_user_func() 调用方法或变量,第一个参数是调用的对象,第二个参数是被调用对象的参数

file_put_contents() 用来写文件进去,第一个参数是文件名,第二个参数是需要写进文件中的内容 (文件名支持伪协议)

所以通过file_put_contents()函数来创建文件,文件中注入攻击代码即可

v1是调用方法
v2是数字字符串,且是写进文件中的内容 v3是文件名(可通过伪协议来创建)

v3=php://filter/write=convert.base64-decode/resource=2.php(直接创建一个php文件)

v2=(<?=cat *;查看页面源码,转为base64为PD89YGNhdCAqYDs,再转为16进制的ascii码115044383959474e6864434171594473,因为字符串截取所以随便开头加两个数字,但要大于0,而且is_numeric():处理的数字有限制,要短,还要是偶数

v1=hex2bin,这是将把参数数字字符串还原为base64码

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

post   v1=hex2bin

然后访问url/2.php,查看源代码获得flag

  • 21
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值