首页 > 其他分享 >代码审计笔记

代码审计笔记

时间:2024-08-31 16:57:06浏览次数:8  
标签:审计 index target 代码 REQUEST 笔记 && array include

渗透测试
白盒:基于内部的测试,
黑盒:基于外部的测试
灰盒:既有功能点又有源代码

在php文件包含:include\require

代码审计:
1.找关键函数
2.全文通读

文件包含:include、require
漏洞:如何控制漏洞呢------传参点
include('./inc.php');
include("$_POST[1]")

第八行:include $_REQUEST['target']
if (! empty($_REQUEST['target'])
&& is_string($_REQUEST['target'])
&& ! preg_match('/^index/', $_REQUEST['target'])
&& ! in_array($_REQUEST['target'], $target_blacklist)
&& Core::checkPageValidity($_REQUEST['target'])
) {
include $_REQUEST['target'];
exit;
}

当if语句中的条件表达式为true,则执行include代码
共有五个条件表达式
! empty($_REQUEST['target'])
&& is_string($_REQUEST['target'])
&& ! preg_match('/^index/', $_REQUEST['target'])
&& ! in_array($_REQUEST['target'], $target_blacklist)
&& Core::checkPageValidity($_REQUEST['target'])

第一个:
! empty($_REQUEST['target'])=>true
empty($_REQUEST['target'])
=>false
empty(var) 函数用于检查一个变量是否为空,为空则为true
当 var 存在,并且是一个非空非零的值时返回 FALSE 否则返回 TRUE

target传参需要值,可以满足

第二个:
is_string($_REQUEST['target'])
is_string() 函数用于检测变量是否是字符串
如果指定变量为字符串,则返回 TRUE,否则返回 FALSE

可以满足

第三个:
! preg_match('/^index/', $_REQUEST['target'])=>true
preg_match('/^index/', $_REQUEST['target'])
>false
返回匹配次数。 它的值将是 0 次(不匹配)或 1 次
0--false 1---true

target传参不能以index开头的文件  index.php  index.html

第四个:
! in_array($_REQUEST['target'], $target_blacklist)=>true
in_array($_REQUEST['target'], $target_blacklist)
=>false

in_array数组中找到值则返回 TRUE,否则返回 FALSE
target传参值不能有$target_blacklist的值

$target_blacklist = array ('import.php', 'export.php');

target传参不能只传入import.php、export.php
可以满足

第五个:
Core::checkPageValidity($_REQUEST['target'])===>true

public static function checkPageValidity($page, array $whitelist = [])
                $page = $_REQUEST['target']

$whitelist===> public static $goto_whitelist = array()

strpos() 函数查找字符串在另一字符串中第一次出现的位置
strpos(string,find)

返回字符串在另一字符串中第一次出现的位置,如果没有找到字符串则返回 FALSE

标签:审计,index,target,代码,REQUEST,笔记,&&,array,include
From: https://www.cnblogs.com/Crushz-2024/p/18390461

相关文章

  • c# 笔记 winform添加右键菜单,获取文件大小 ,多条件排序OrderBy、ThenBy,list<double>截取
    Winform右键菜单‌要在C#Winform应用程序中添加右键菜单,‌你可以按照以下步骤操作:‌1.‌创建菜单项‌在Form的构造函数或加载事件中,‌创建ContextMenuStrip控件的实例,‌并为其添加菜单项。‌2.‌绑定到控件‌将ContextMenuStrip控件绑定到需要显示右键菜单的控件上,‌......
  • 后缀数组学习笔记
    后缀数组挺好玩的,于是来写后缀数组学习笔记了。什么是后缀数组?后缀数组主要关系到2个数组:\(sa\)和\(rk\)。\(sa[i]\)表示将所有后缀按照字典序从小到大排序,排名第\(i\)的后缀的开头为第\(sa[i]\)个字符。\(rk[i]\)表示将所有后缀按照字典序从小到大排序,后缀开......
  • 代码执行命令
    代码执行漏洞原理:用户输入的数据被当做后端代码进行执行//其实一句话木马的本质就是一个代码执行漏洞用户输入的数据被当做代码进行执行。在PHP存在诸多函数可以做到代码执行[注:为了方便此处我把要执行的代码简写为$a]1、eval($a);//eval是代码执行用的最多的,他可以多行执......
  • 【华为OD机试真题E卷】31、最大社交距离 | 机试真题+思路参考+代码分析(E卷复用)(C语言、
    文章目录一、题目......
  • python并发与并行(十) ———— 结合线程与协程,将代码顺利迁移到asyncio
    在前一篇中,我们用asyncio模块把通过线程来执行阻塞式I/O的TCP服务器迁移到了协程方案上面。当时我们一下子就完成了迁移,而没有分成多个步骤,这对于大型的项目来说,并不常见。如果项目比较大,那通常需要一点一点地迁移,也就是要边改边测,确保迁移过去的这一部分代码的效果跟原来相同。为......
  • 图形数据检验工具R_SPSS实战笔记(二)
    数据分析领域初期需要特别注意,目前大多数的数据分析软件都要求数据的存储形式为"宽格式",即每一列都应当是一个变量,而每一行则代表一个单独的观测值。且需要“长格式”数据的时候,可以通过宽格式数据轻易进行转换;存储格式,推荐使用.text或.csv另外,任何形式的数据检验(异常值识别[缺......
  • 【全网独家】OpenCV: 像素巡访(at、ptr) 介绍与应用(代码+测试部署)
    OpenCV:像素巡访(at、ptr)介绍与应用介绍在图像处理过程中,直接操作图像的每个像素值是一个非常常见的需求。OpenCV提供了多种方法来访问和修改图像像素,其中at和ptr是两种高效的方法。at方法:适用于小规模的像素访问操作,提供了方便的接口。ptr方法:更适合大规模......
  • 代码大全伪代码转换为高层次的注释是一种很好的编程实践
    首先,把伪代码转变为高层次的注释,并写出第一条和最后一条语句在C++中也就是“{”和“}”。伪代码示例/*Thisroutineoutputsanerrormessagebasedonanerrorcodesuppliedbythecallingroutine.Thewayitoutputsthemessagedependsonthecurrentproce......
  • 读书笔记(10)《生活蒙太奇》
    序言 我之所以叫它蒙太奇,是因为这是我用漫画呈现出来的片段,是由我的观察编辑而成,它们是我观察世界的样子。可是每位读者的性格不同,际遇不同,得到的感受也不一样,所以每个人读下来,蒙太奇剪辑的方式也不尽相同。我从我的角度把这些漫画故事组合成了这本书,但你可以按照自己的习惯和喜......
  • 代码大全调试存根
    在Go语言中使用调试存根(debuggingstubs)可以帮助你在开发和生产环境中有效地进行调试和性能优化。以下是如何在Go中实现类似C++中的调试存根的示例:开发阶段的调试存根:在开发阶段,你可以编写一个详细的检查函数来验证传入的指针或其他参数。这些检查可能会比较耗时,但能确保代码......