self php语法,PHP代码审计之关于PHP_SELF的简单利用
这两天突然看到 https://blog.ripstech.com/2020/sql-injection-impresscms/,想着复现一下,记录一下学习过程。
漏洞分析
漏洞复现
首先我们先下载安装一下这个 cms,然后直接访问:
http://127.0.0.1:81/admin.php/modules/system' and sleep(2) and '1
这个 url,会发现延迟了三秒,没错这个漏洞就是这么简单。更深的用法我们就不讨论了。
漏洞分析
打开 cms 的文件: \htdocs\libraries\icms\module\Handler.php,找到 service 函数:
static public function service($inAdmin = FALSE) {
if ($inAdmin || ... ) {
$url_arr = explode('/', strstr($_SERVER['PHP_SELF'], '/modules/'));
if (isset($url_arr[2])) {
//关键点
$module = icms::handler("icms_module")->getByDirname($url_arr[2], TRUE);
我们首先访问 admin.php 会执行到这个函数,然后 inAdmin 会设置成 true,到第四行获取了 PHP_SELF 并以 /modules/ 分割,然后讲 /modules/ 后的内容带入 getByDirname,跟进该函数:
public function getByDirname($dirname, $loadConfig = FALSE) {
if (!empty($this->_cachedModule[$dirname]) &&
$this->_cachedModule[$dirname]->getVar('dirname') == $dirname
) {
...
} else {
$sql = "SELECT * FROM " . $this->db->prefix('modules') . " WHERE dirname = '" . trim($dirname) . "'";
//执行sql
可以看到这里直接带入了 $sql 没有任何过滤。
扩展思考
之前我也审计到过一个此类的漏洞,这里顺便分享一下:
然后下面的代码:
//此处的 $uri 就是 PHP_SELF
$tmp = strtolower(substr($uri,-4));
if(in_array($tmp,array('.jpg','.gif','.png','jpeg')) && substr($uri,0,11) == 'res/_cache/'){
$tmp = substr($uri,11);
$tmp = explode("/",$tmp);
get_one($tmp[0]);
当文件名是 .jpg 结尾并且 uri 前十一位是 res/_cache/ 时进入,最后用 / 分割 uri 并带入 sql 语句。
很容易就可以 payload:
index.php/res/_cache/a'-sleep(3)-'/test/test.jpg
此外还有一个点,但是暂时没有见到过案例,比如:
print_r($_SERVER['REQUEST_URI']);
?>
这样的代码,然后我们用 bp 讲 /test/test.php 修改成:/abc'd/../test/test.php
当然,不管是 PHP_SELF 还是 REQUEST_URI 我们直接 echo 出来都会造成 反射的 XSS
实际上我们访问的依然是 test.php,但是 REQUEST_URI 输出的却是 /abc'd/../test/test.php。
当然,$_SERVER 里还有很多好玩的,期待师傅们挖掘出来教我QAQ
self php语法,PHP代码审计之关于PHP_SELF的简单利用相关推荐
- %3c?php else:?%3e,[红日安全]代码审计Day15 - $_SERVER['PHP_SELF']导致的防御失效问题
本文由红日安全成员: DYBOY 编写,如有不当,还望斧正. 前言 大家好,我们是红日安全-代码审计小组.最近我们小组正在做一个PHP代码审计的项目,供大家学习交流,我们给这个项目起了一个名字叫 PH ...
- mysql怎样查表的模式_mysql常用基础操作语法(四)--对数据的简单无条件查询及库和表查询【命令行模式】...
1.mysql简单的查询:select 字段1,字段2... from tablename; 如果字段那里写一个*,代表查询所有的字段,等同于指定出所有的字段名,因此如果要查询所有字段的数据,一般都是 ...
- Lua基本语法-lua与C#的交互(相当简单详细的例子)
lua脚本 与 C#的交互 本文提供全流程,中文翻译. Chinar坚持将简单的生活方式,带给世人! (拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) 1 Lua And C# - ...
- python 抽象语法树_用python演示一个简单的AST(抽象语法树)
假设对'a + 3 * b'进行解释,其中a=2,b=5 代码很简单,就不再进行详细的解释了. Num = lambda env, n: n Var = lambda env, x: env[x] A ...
- mysql常用基础操作语法(四)--对数据的简单无条件查询及库和表查询【命令行模式】
1.mysql简单的查询:select 字段1,字段2... from tablename; 如果字段那里写一个*,代表查询所有的字段,等同于指定出所有的字段名,因此如果要查询所有字段的数据,一般都 ...
- 【代码审计】PHP文件包含漏洞利用总结
0x01 概述 PHP文件包含漏洞的产生原因是在通过PHP的函数引入文件时,由于传入的文件名没有经过合理的校验,从而导致意外的文件泄露甚至恶意的代码注入.涉及文件包含漏洞的四个函数如下: includ ...
- Java代码审计基础——RMI原理和反序列化利用链
目录 (一)何为RMI (二). RMI的模式与交互过程 0x01 设计模式 0x02 交互过程 0x03 Stub和Skeleton (三)简单的 RMI Demo 1.Server 2.Regi ...
- PHP代码审计中你不知道的牛叉技术点
一.前言 php代码审计如字面意思,对php源代码进行审查,理解代码的逻辑,发现其中的安全漏洞.如审计代码中是否存在sql注入,则检查代码中sql语句到数据库的传输 和调用过程. 入门php代码审计实 ...
- 布尔表达式的语法及语义分析程序_XSS语义分析的阶段性总结(一)
作者:Kale 合天智汇 前言 由于X3Scan的研发已经有些进展了,所以对这一阶段的工作做一下总结!对于X3Scan的定位,我更加倾向于主动+被动的结合.主动的方面主要体现在可以主动抓取页面链接并发 ...
最新文章
- Mysql左连接分页查询
- python使用imbalanced-learn的RandomUnderSampler方法进行下采样处理数据不平衡问题
- Windows 之 win10快捷键
- 迷你MVVM框架 avalonjs 学习教程14、事件绑定
- 不包含本位置值的累乘数组
- 使用脚本编写 Vim 编辑器,第 2 部分: 用户定义函数
- AIR720串口2收发数据问题
- 神话人物的现代版简历
- 电脑删除的文件怎么恢复?你要找的方案
- 小程序的 rpx布局问题
- Android 系统优化(33)---Android ART GC之GrowForUtilization的分析
- 程序员训练机器学习 SVM算法分享
- 1篇SCI二区+4篇一类可定A档博士!110万房补,享副教授甚至教授待遇!
- Shell(Bash)单引号、双引号、不加引号和反引号用法详解
- 404页面是什么意思?怎么正确设置?
- 激光雷达和毫米波雷达工作原理对比
- react 使用qs
- Pytorch的model.train() model.eval() torch.no_grad() 为什么测试的时候不调用loss.backward()计算梯度还要关闭梯度
- word2003如何设置护眼模式_在word中开启保护眼睛模式的详细教程
- vb.net如何查询电脑麦克风收到声音_远程会议痛点多?看Poly Studio X30如何破局