因为前两天,前学了一下有关于php相关方面的知识,今天就来做一下php方面的题目,学以致用一下
一.聪明的php
还是看了别人写的wp,才解出来的题目,感觉自己前面学习的并没有什么用,还是不会写题,有一丢丢小挫败,但是呢,在看别人wp的过程中又发现了自己未曾接触到的盲点,查了一些资料,感觉以后还是得靠练题来掌握知识
BugKu_聪明的php_bugku 聪明的php_Kobalos Baku的博客-CSDN博客
这个wp中的盲点如下:
1.最开始不知道phpinfo,是什么,后来查了一下
phpinfo函数可以显示出PHP 所有相关信息。是排查配置php是是否出错或漏配置模块的主要方式之一!代码如下 :
<?php
phpinfo();
?>
只要访问到phpinfo()函数的web页面,即返回php的所有相关信息!
2.不知道passthru是什么
https://www.cnblogs.com/gaohj/p/3267692.html
passthru — 执行外部程序并且显示原始输出
passthru ( string
$command
[, int&$return_var
] ) : void3.tac
和cat很像,但是又有点不一样
浅谈命令执行中cat和tac的区别_tac和cat_待成追忆却惘然的博客-CSDN博客
php调用系统外函数system:
cat表示抓取文件的数据内容。
但有时候cat抓取无法看见,我们可以尝试tac抓取
cat抓取是从第一行抓到最后一行。tac是从最后一行还是抓到第一行。
传一下参看一下,发现我传什么他就显示什么
大概看了一眼代码,发现用preg_match()绕过了很多的函数,那就只能用其他的
发现了一个疑点,为什么引用函数的时候不能直接
a=函数,而非要在函数前加个$且用{}将函数括起来
会发现第二张图片才真正反应了函数的作用
因为过滤掉了system,所以找他的平替passthru()
过滤掉了cat,咱就是也找平替用tac
二.字符?正则?
分析一下代码,大概能懂,我们要构造一个符合上述正则表达式的一串字符,然后用get传参给id,则会回显key
思路清晰,开始分析正则表达式
. 匹配除 "\n" 之外的任何单个字符
* 匹配它前面的表达式0次或多次,等价于{0,}
{4,7} 最少匹配 4 次且最多匹配 7 次,结合前面的 . 也就是匹配 4 到 7 个任意字符
\/ 匹配 / ,这里的 \ 是为了转义
[a-z] 匹配所有小写字母
[:punct:] 匹配任何标点符号
/i 表示不分大小写
构造payload:
keykeyaaaakey:/a/keya: