buuctf ping /include /have fun
01
打开题目的界面就大概知道这道题是要
ping ip 地址的方法做
一般的话首先ping 127.0.0.1(我自己本机) 通过回显的状态可以知道是直接ping成功了
ping的方法一般是用于检查网络配置是不是正常,多用于检查自己的网络是不是连接成功

正常的一般操作是直接用get的方式传参
ping 成功,就是之前写过的一道题目一样,,接下来寻找有flag文件夹的目录
构造payload /?ip=127.0.0.1|ls (这里的话用get的方式传参,直接在地址栏输入有空格的话会被URL编码,所以不要有空隔)
(之前那道类似的题是使用post传参,直接在hackbar上面操作加空格不影响)
会显发现是有两个PHP文件
flag.php
index.php
直接cat flag.php文件的话会报错,,显示fxck your space ///空格别过滤了
————————————————————————————————————————————————————————————————————
02
绕过姿势
首先使空格的绕过姿势
${IFS} $IFS$9 %09
读取文件的时候可以使用重定向符<>实现绕过
黑名单绕过
ls (拼接绕过)
a=l;b=s;$a$b
还有base64编码绕过
cat (要拿到一个文件内容的话)
a=c;b=at;c=文件名前一部分(到哪里主要是要看怎么样才能绕过黑名单);d=文件名的后一部分;$a$b${c}${d}
_______________________________________________________________________________________________________________________
03
题目的话回到构造payload :?ip=127.0.0.1|cat$IFS$9index.php (直接获取flag.php报错)

可以看到注入的规则是通过正则表达式实现过滤的
preg_match的使用官方解释 :https://www.runoob.com/php/php-preg_match.html
代码审计知道首先是不能够有/ 然后不能有空格 不能有flag 正则表达式匹配的话 这里只要把最后的g变一下就可以实现绕过了
payload :/?ip=127.0.0.1;a=g;cat$IFS$1fla$a.php 然后f12 可查看flag。
——————————————————————————————————————————————————————————————————————————————
04
include
主要是考察了文件包含和php伪协议
查看源码发现flag.php文件
构造playload :?file=php://filter/read=convert.base64-encode/resource=flag.php
php:filter是伪协议 read是包含函数,,,,接下来是base64编码绕过
相应的是base64编码后的flag文件内容,,之后拿去解码就好了
___________________________________________________________________________________________________________________________________
05
启动靶机
查看源代码
发现条件
get传参
结束