第五题:远程包含
根据题目,使用远程包含进行
打开phpinfo,可以看到allow_url_fopen和allow_url_include都是On,因此可以使用php://input,由于代码会检查file中的内容,因此不能够使用php://filter包含文件,使用php://input通过hackbar使用POST方式发包,抓包并在最后一行加php代码执行
成功得到flag
第六题:命令注入
首先熟悉管道符
Windows:
1. “|”直接执行后面的语句。
2. “||”如果前面的语句执行失败,则执行后面的语句,前面的语句只能为假才行。
3. “&”两条命令都执行,如果前面的语句为假则直接执行后面的语句,前面的语句可真可假。
4. “&&”如果前面的语句为假则直接出错,也不执行后面的语句,前面的语句为真则两条命令都执行,前面的语句只能为真。
Linux:
1. “;”执行完前面的语句再执行后面的语句。
2. “|”显示后面语句的执行结果。
3. “||”当前面的语句执行出错时,执行后面的语句。
4. “&”两条命令都执行,如果前面的语句为假则执行执行后面的语句,前面的语句可真可假。
5. “&&”如果前面的语句为假则直接出错,也不执行后面的语句,前面的语句为真则两条命令都执行,前面的语句只能为真。
根据题目中的php代码可以看到通过get方法获得我们输入的ip并传入cmd变量中,通过exec将cmd中的字符串当做命令执行。
先输入127.0.0.1
能够正确执行,那么使用&管道符执行我们自己的语句
可以看到带出了一个php文件,查看该文件内容
使用hackbar,构造传入的get参数为?ip=127.0.0.1&cat 24475257734453.php,根据传入参数后url可以看出其中的&符号是经过了url编码的,因此对于传入的这个参数也需要进行编码,&和cat后的空格需要url编码将传递的参数转化为?ip=127.0.0.1%26cat%20199408059289.php,点击发送
网页中未出现文件内容,右键查看网页源代码,发现文件内容即flag
第七题:过滤cat
和上一道题目一样,还是先试用ls指令得到flag文件名,通过hackbar传参,将cat指令改为tac效果一样,构造参数为?ip=127.0.0.1%26tac%20flag_28093118082000.php,点击发送,右键查看网页源代码即可看到flag
第八题:过滤空格
在 bash 下, 空格可以用以下字符代替空格:
<,<>,%20(space),%09(tab),$IFS$9, ${IFS},$IFS 等(摘抄)
因此本题中可以使用${IFS}代替cat后面的空格,构造参数为?ip=127.0.0.1%26cat${IFS}flag_301911467122181.php,点击发送右键查看源代码即可看到flag
第九题:过滤目录分隔符
通过ls命令发现只有一个又flag文件的目录,那么就先使用cd flag_is_here进入到该目录中,然后使用ls查看该目录下的文件,传入参数为?ip=127.0.0.1%26cd%20flag_is_here;ls
可以看到flag文件名,使用cat获取flag的内容,参数改为?ip=127.0.0.1%26cd%20flag_is_here;cat%20flag_14913376128096.php,点击发送,右键查看网页源代码即可看到flag内容
第十题:过滤运算符
过滤了 | 与 &,没有过滤;,那么可以用分号执行命令,构造参数为?ip=127.0.0.1%3Bls#查看该目录下的文件,查看到flag文件名
构造参数为?ip=127.0.0.1%3Bcat%20flag_750523229890.php,点击发送右键即可看到flag的内容
第十一题:综合过滤练习
根据题目过滤了前面几道题的内容,过滤了| & ; cat flag ctfhub和空格
拼接指令除了这几个管道符,还可以使用%0a(换行符)和%0d(回车符)进行拼接,首先使用%0a拼接ls查看该目录下的文件内容,构造语句为?ip=127.0.0.1%0als,看到flag文件的目录
绕过空格可以使用%09*,使用ls%09*可以查看该目录下的所有内容(包括子目录),构造参数为?ip=127.0.0.1%0als%09*,发送后可以看到flag文件的名字,通过
使用%0a拼接cd%09*_is_here进入flag文件所在的目录中,由于cat被过滤因此使用tac,再使用%0a拼接tac%09*输出flag文件内容,构造语句为?ip=127.0.0.1%0acd%09*_is_here%0atac%09*,点击发送,右键查看网页源代码即可看到flag