随笔
06bbc2702bb35227cef37599aeb0d7f106b56a852baf7a205eea33945984752f092999ae4345e71cd1272cff3eece3cde57c01cd3975637338d2a964cb08c0bbbf865f1a9f5eaf9725cc22b74de54d15792e186967df82f3480cd041d7b330132237a81a739e530c3e44aedcf775ce29c6e0bb56aac6bc759e3efe0148e78c713c81caf1762d1d634826e1034642bc7a560c9323f4b0f7a5485d1d38c735f52a61bda7a44be0ac805df59c93a15f221debecb26ed46d9785e6202e1fe701c1f70bb9f7ade3a26c0cb03f53a86b7a384d7cf723c10955ad3b8df1abf1edbf5de9886f42ec7b477e592a091f3873f13e55045135c8df6f7f642 ...
权限设计小技巧 - 位运算
权限设计小技巧 - 位运算
我们在Linux系统中,最常见的文件权限,就是124了吧,777是不是看的很多,哈哈哈哈
那么如果在一个系统中,权限是区域固定的,是否也可以用这种模式呢
其实原理就是采用了二进制的位运算,通过1、2、4就能表示7以内的所有数字,通过十进制会发现如果要添加一个权限,是要思考很久的,但是转换为
那几个位运算
https://www.php.net/manual/zh/language.operators.bitwise.php
这里我们暂时只会用到
例子
名称
结果
$a & $b
And(按位与)
将把 $a 和 $b 中都为 1 的位设为 1。
$a | $b
Or(按位或)
将把 $a 和 $b 中任何一个为 1 的位设为 1。
$a << $b
Shift left(左移)
将 $a 中的位向左移动 $b 次(每一次移动都表示“乘以 2”)。
tips:这部分的计算,应该大家都会吧,不聊了,哈哈哈哈
二进制的“与(&)”和“或( | )”操作的简单解释。&操作
123456 A= ...
通过一句话木马来看PHP的一些危操作
通过一句话木马来看PHP的一些危操作
一句话木马就是只需要一行代码的木马,短短一行代码,就能做到和大马相当的功能
先看一个示例准备工具
蚁剑 - 开源的跨平台网站管理工具
一个php文件ant.php <?php eval($_POST['ant']);-PHP内置web服务器
启动 ant.php12$ php -S 127.0.0.1:8000 ant.php[Sat Nov 26 13:27:08 2022] PHP 7.4.30 Development Server (http://127.0.0.1:8000) started
启动蚁剑 并添加数据
发现新天地我的文件夹被发现啦
我的shell也被暴露啦
嘻嘻原来这就是木马,我的服务器权限被拿到了
工作原理
仅仅靠着这一个文件就能提权webshell,简直可恶
依靠 eval 函数,执行了恶意代码
先试试一个最简单的$_GET吧
1<?php @eval($_GET['shell']);
启动
1$ php -S 127.0.0.1:8000 eval.php
我 ...
看看yield
看看yield缘由在看hyperf源码时,发现了一个 CoordinatorManager::until(Constants::WORKER_START)->yield();
突然想到yield
很早之前就听说过这玩意,一直没咋去认真看看,印象只停留在foreach的内存优化上
看了一些文章,还是有些懵懵懂懂的,希望以后真的吃透后再写个自己的理解吧
转载
个人认为不错的文章
PHP yield 协程 生成器用法探究 (一)
PHP yield from 生成器用法探究 (二)
PHP yield 高级用法—同步编码,异步执行
在PHP中使用协程实现多任务调度
PHP用yield实现异步Webserver
嘻嘻最近心情不行,偷个懒
国庆
2022.10.07
知不可乎骤得托遗响于悲风
今年的最后一个假期的最后一天啦见了一些老朋友不变的是大多数变化的还是有不甘时间过得越来越快一生能得到和想拥有的东西太多了而真正得到的又太少了有些人和事错过了就是永远可能多年以后回首那些人和事都会在斑斓的岁月里变得模糊
Get国庆七天总的来说还是开心多于遗憾本来想做一些事但放弃了也做成了另外的事还算不错
Work接下来连上七天班哭死感觉现在有点舒适圈了这样不行呀要努力
Blog好久好久没有认真学习了看着上一篇博文还是7月本来这几天想写一个的但还没写完加油吧活到老学到老感觉现在自己有点颓废了
hyperf/box 尝尝鲜
hyperf/box 尝尝鲜
https://github.com/hyperf/box
管理PHP环境和相关依赖项,提供将Hyperf应用程序打包为二进制程序的能力,并提供用于管理和部署Hyperf应用程序的反向代理服务。
相关资料
https://github.com/hyperf/box 在lwmbs的基础上,封装box命令工具
https://github.com/dixyes/lwmbs 在micro的基础上,定制了swow脚手架的扩展
https://github.com/easysoft/phpmicro micro自执行SAPI提供了php“自执行文件”的可能性
box get pkg@version这个命令就是获取dixyes/lwmbs构建出来的包,目前支持php8.0、8.1、micro、composer
如:box get php@8.1
box build-prepare在build之前做一个预检查,检测项目是否全部下载:
composer
php
micro
都是去github上面进行下载,php与micro下载github
build打包swow- ...
php bin/hyperf.php start 发生了啥
php bin/hyperf.php start 发生了啥
用了这么久的hyperf框架,还没细细研究过源码,先看看start,入个门
先安装一个脚手架吧
php 7.4
swoole 4.8.5
hyperf 2.2 - https://hyperf.wiki/2.2/#/1composer create-project hyperf/hyperf-skeleton:2.2 study-hyperf
先直接运行一下,看看有啥变化1$ php bin/hyperf.php
可以看到整个项目有一些些变化,在runtime下面生成了几个文件
123456789runtime├── container│ ├── aspects.cache│ ├── classes.cache│ ├── proxy│ │ ├── App_Controller_AbstractController.proxy.php│ │ └── App_Controller_IndexController.proxy.php│ └── scan.cache└── hyperf.pid ...
php8的新特性 浅过一下
php8的新特性 浅过一下
php8都出了这么久,还没仔细看过文档,知道一些常用特性,今天浅过一下官网着重介绍的一些知识点吧
8.0
https://www.php.net/releases/8.0/zh.php
命名参数
命名参数允许基于参数名称(而不是参数位置)将参数传递给函数。 这使得自变量的含义可以自动记录,使自变量与顺序无关,并允许任意跳过默认值。
这里就是对原来的参数,进行了命名,外部传入时,可无顺序的进行传参
1234567891011121314151617<?phpfunction named_params(int $a, int $b, int $c = 0, int $d = 0){ echo "a:{$a} b:{$b} c:{$c} d:{$d}" . PHP_EOL;}named_params(1, 2, 3, 4); // a:1 b:2 c:3 d:4named_params(a: 1, b: 2, c: 3, d: ...
PHP - Spl数据结构
PHP - Spl数据结构
今天在看hyperf源码的时候,看到一个SplPriorityQueue的使用,想起很久以前要学习一下spl库的一些知识,一直没去看,今天就先学习一下spl提供的数据结构
https://www.php.net/manual/zh/spl.datastructures.php
实践双向链表
当底层结构是 DLL 时, 迭代器的操作、对两端的访问、节点的添加或删除都具有 O (1) 的开销
SplDoublyLinkedList123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 ...
PHP 类的自动加载
PHP 类的自动加载
以前看过这块的概念与讲解,知道通过composer构建的现代化框架都是通过spl_autoload_register函数进行类的自动加载,现在形成笔记记录一下
php官方文档: https://www.php.net/manual/zh/language.oop5.autoload.
类的加载方式
手动引入
__autoload
spl_autoload_register
手动引入
就相当了刚开始学习php时的几个函数 include、include_once、require、require_once 。
寻找方式:
按参数给出的路径寻找
没有目录(只有文件名)按照include_path指定的目录去寻找
调用脚本文件所在目录和当前工作目录下寻找
include实验:
12345678910111213141516<?php// 正常引入$includeRes = include 'AutoloadDemo.php';var_dump($includeRes);AutoloadDemo::hello();// 错误引入$in ...