CISP-PTE的题目比较难找,从2017年开始,CISP-PTE渗透测试工程开始认证培训以来,受到了广大学员的热捧,在考试培训之前对CISP-PTE必要的试题练习还是非常重要的。下面给大家准备部分试题,希望对大家有所帮助。如果想要完整的cisp-pte培训资料,可以直接咨询我们赛虎学院客服。
原本以为pte考试很简单,其实还是有一点难度的:
0x01:
payload:echo ({${system("cat ../key.php")}});
进页面是一个文件包含的题目说明
此题考查的不是伪协议读文件,也不是包含日志文件拿shell等等
一开始踩坑了,在这方面试了很多次
后来才想起来查看view.html,查看源代码,得到后门代码
所以此题的利用点是:包含这个view.html进行命令执行
呐 只要解开这个后门代码即可。
解析这个payload
echo ({${system("cat ../key.php")}});整个逻辑是这样的此处的preg_match带了\e 可以拿来命令执行,执行的就是第二个参数 \1(\1就是我们正则匹配到的第一个数值)所以这里的preg_match就是一个eval(\1)所以此题有两个eval嵌套是这样的eval(\1)而\1也需要被eval解析一下 就是 \1=eval(echo ({${system("cat ../key.php")}});)所以整个逻辑是第1步:eval(echo ({${system("cat ../key.php")}});) 此时需要一个eval来进行代码执行。eval已经耗费完了第2步:\1={${system("cat ../key.php")}}
第3步:eval(\1) 此时需要一个eval来进行代码执行第四步 因为eval(\1)已经执行完毕了 所以就只剩下了 {${system("cat ../key.php")}}第五步:所以{${}}的用处就体现出来了,把这个system("cat ../key.php") 当做变量来执行,如果不加{${}}就是独立的system("cat ../key.php") 就解析成了字符串解析:这里涉及到了php的动态变量,${}里面的值会当做变量值解析然后输出,例如${phpinfo()}就会输出phpinfo页面那么{${system("cat ../key.php")}}解析过程就是 {$True}={null}=""空所以页面就正常输出了我们想执行的命令
下面再说说我们为什么要匹配到 {${phpinfo()}} 或者 ${phpinfo()} ,才能执行 phpinfo 函数,这是一个小坑。这实际上是 PHP可变变量 的原因。在PHP中双引号包裹的字符串中可以解析变量,而单引号则不行。 ${phpinfo()} 中的 phpinfo() 会被当做变量先执行,执行后,即变成 ${1} (phpinfo()成功执行返回true)。如果这个理解了,你就能明白下面这个问题:
var_dump(phpinfo()); // 结果:布尔 true
var_dump(strtolower(phpinfo()));// 结果:字符串 '1'
var_dump(preg_replace('/(.*)/ie','1','{${phpinfo()}}'));// 结果:字符串'11'
var_dump(preg_replace('/(.*)/ie','strtolower("\\1")','{${phpinfo()}}'));// 结果:空字符串''
var_dump(preg_replace('/(.*)/ie','strtolower("{${phpinfo()}}")','{${phpinfo()}}'));// 结果:空字符串''
这里的'strtolower("{${phpinfo()}}")'执行后相当于 strtolower("{${1}}") 又相当于 strtolower("{null}") 又相当于 '' 空字符串
可以自己本地测试一下,动态变量只支持php5
<?php
preg_replace('/(.*)/ie','strtolower("\\1")','{${phpinfo()}}');
?>
还有如下的这种php动态调用
${phpinfo()}
?>
这就是现在渗透测试CISP-PTE比较的相关试题资料,如果大家又什么疑问,可以咨询我们赛虎学院客服。
- 还没有人评论,欢迎说说您的想法!