web 1

11. FFI扩展(PHP>7.4.0)
      这一扩展可以让PHP语言中使用C语⾔中的函数和库
常见调用方式:
1)FFI::def
2)创建FFI对象,一个字符串,包含常规C语言中的一系列声明(类型、结构、函数、变量等)。实
际上,这个字符串可能是从C头文件复制粘贴的。
$ffi=FFI::cdef("int system(const char *command);");
$a = '/readflag > /var/www/html/1.txt';
$ffi->system($a);exit();
这段代码首先创建了一个新的 FFI 对象调用 Linux 库的 int system(const char* command);函数,作用是把 command 指定的命令名称或程序名称传给要被命令处理器执行的主机环境,并
在命令完成后返回。
3)FFi::load
加载C文件
public static FFI::load ( string $filename ): ? FFI
4) FFi::scope
使用预加载期间解析的C声明实例化FFI对象
public static FFI::scope ( string
$name ): FFI
5)FFi::new
创建一个C语言数据结构
public static FFI::new ( FFI\CType |string $type , bool $owned = true , bool $persistent = false ): ? FFI\CData
6)FFi::cast
执行C类型转换
public static FFI::cast ( FFI\CType |string $type , FFI\CData |int|float|bool|null &$ptr ): ? FFI\CData
7) FFi::memcmp
比较内存区域的大小字节
public static FFI::memcmp ( string| FFI\CData &$ptr1 , string| F FI\CData &$ptr2 , int $size ): int
8)FFI::memcpy
复制一个内存区域到另一个内存区域
public static FFI::memcpy ( FFI\CData &$to , FFI\CData |string &$from , int $size ): void
12. 特定函数绕过
例:web396

 传入http://`ls`/a.php,parse_url函数分解为 echo `ls`> /a.php,会写如到根目录下,不方便访问。因此要想办法写入到当前目录,构造语句将前面提前闭合。http://1/1;echo `ls` >t.txt  (注意这里用反引号,不用system,因为system是php函数,这里设shell_exec里,用反引号来代表命令替换)发现flag文件,访问即可:http://1/1;echo `cat fl0g.php` >t.txt

call_user_func: PHP: call_user_func - Manual

preg_match绕过:
不会匹配换行符
在非多行模式下,$会忽略掉句尾的%0a
preg_match 只匹配字符串不匹配数组 ,传入数组时返回 false
PHP利用PCRE回溯次数绕过限制 正则匹配中的某些字符对于被匹配字符串出现可匹配也可不匹配的情况,那么先不匹配,让下一个正则表达式的字符去匹配,如果无法匹配则让该字符匹配字符串称为一次回溯,但正则匹配有回溯次数的限制,一般利用脚本提交10000个字符差不多可以超过回溯次数绕过正则)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值