寒假学web--day02
简介
今天学习的是php的一些东西,仍然比较基础
php基础知识
php是一种脚本语言,文件的后缀名为php
它是执行在服务器上的,通过url访问来解释执行
特点:简单易学,部署简单,开发快速,多平台兼容,适合中小企业网站开发
安装环境
使用phpstudy,或者网上的一些php在线运行网站,可以使用菜鸟工具(PHP 在线工具 | 菜鸟工具)
开发环境:vscode
get与post
bp里面可以在repeater中右键,直接把get改为post方式
可以同时发get和post的数据,但是不能同时发get和post的包
telnet手动发包
注意:你需要现在程序和功能中开启telnet客户端
- telnet google.com 80
- 在telnet窗口按下ctrl+] ,就能获得提示,再按下enter打开回显
- 输入GET / HTTP/1.1,再连按两次回车
php的命令执行
CTF比赛中很多环境都是linux,所以更多的是linux的命令
php可以执行系统命令的函数
- system
- passthru
- exec
- shell_exec
- popen
- pcntl_exec
- `
php命令执行的应用
比如 ping -c 1 www.baidu.com
- 命令可控 比如我们可以控制ping这个字符串
- 参数可控 比如-c这个参数
- 参数值可控 1和www.baidu.com
- 整体可控,但是要突破过滤
我们遇到命令执行时,首先要判断可控位置,再突破过滤,如果被包裹的是字符串,我们要考虑怎么逃逸出去,不然永远都只是字符串,无法进行命令执行
这里说一下为什么有时候读到的flag不显示在页面中,而是需要查看源代码
是因为浏览器不认识<?php,所以把他当成了注释,不显示在页面上
一些连接符号
&& 前后两个命令并列执行,前面执行成功后面才会执行
|| 前后两个命令有一个执行成功就可以,前面执行成功则后面的不执行
; 独立的两条,命令执行
黑名单过滤
替换过滤:
比如把cat替换为空,那么我们可以双写绕过,比如双写为ccatat,替换之后就变成了cat
过滤特定字符串:
比如过滤了flag关键字,那么我们可以使用通配符*或者占位符?
*表示任意长度的字符串,可以用于一条命令处理多个文件,如fl*
?表示一个字符,比如fl?ag可以匹配到flag而不能匹配到flaaag
读取文件的命令
cat tac more
利用反引号
ls `echo '/bin'`
执行该命令可以列出/bin目录下的所有文件
比如我们要cat flag时,flag被ban了
我们可以对flag进行编码绕过
首先
echo 'flag' |base64
得到结果ZmxhZw==
那么我们就可以利用下面的命令来读取flag
cat `echo 'ZmxhZw=='|base64 -d`
符号过滤
过滤空格
<>
读文件时,可以用<>来代替空格 tac<>flag.php
${IFS} ,$IFS$9,{cmd,args}
也可以使用${IFS}或者$IFS$9来代替空格,bash下也可以使用{cmd,args}来代替空格
控制字符串绕过空格
比如%09,%0b,%0c
字符串截断
比如,a=abcd,我想输出字符c,那么我就可以写${a:2:1}
在做题时,可以先cmd=env,读取环境变量,然后找一个有空格的环境变量,然后找到空格的位置,利用字符串截断来获取空格,这与python的切片操作尤其相似

浙公网安备 33010602011771号