凭理解代码理解万物吗?

学习记录代码审计的一些思路

首先要知道,程序的根本是什么

我们代码审计就怼这两个东西,要让其变成可利用的漏洞,关键在于

  • 变量到达有利用价值的函数(危险函数)

一般来说,漏洞的利用效果取决于最终函数的功能

一般拿到一个cms后的操作:

  • 如果是之前没有审计过的,就先通读一遍代码,再通过写思维导图(就是写目录注释),看目录和对应功能的文件给一一列举一下出来(就是写代码注释),摸清楚大体的框架
  • 如果是之前就审计过的,直接上工具走一遍危险函数

接下来就是审计了,有两条线:

(1)按照具体功能审计

就是对应我们通读代码的时候标志好的

比如说,upload对应的是上传功能,那我们首选就应该开工找上传

比如有函数名 move_uploaded_file() ,接着看调用这个函数的代码是否存在为限制上传格式或者可以绕过

  • 未过滤或本地过滤:服务器端未过滤,直接上传PHP格式的文件即可利用

  • 扩展名可绕过:不被允许的文件格式.php,但是我们可以上传文件名为/evil-code.txt?”这里“?”实现了“伪截断”:),好象这个看上去不是那么舒服那么我们简单写个代码fuzz一下:

    4096。对于php.ini里设置远程文件关闭的时候就可以利用上面的技巧包含本地文件了。(此漏洞由cloie#ph4nt0m.org最先发现])

    对于很多web应用文件在很多功能是不容许重复数据的,比如用户注册功能等。一般的应用程序对于提交注册的username和数据库里已有的username对比是不是已经有重复数据,然而我们可以通过“数据截断”等来饶过这些判断,数据库在处理时候产生截断导致插入重复数据。

    这个漏洞又是大牛Stefan Esser发现的,这个是由于mysql的sql_mode设置为default的时候,即没有开启STRICT_ALL_TABLES选项时,MySQL对于插入超长的值只会提示warning,而不是error(如果是error就插入不成功),这样可能会导致一些截断问题。测试如下:

    很多的web应用程序没有考虑到这些问题,只是在数据存储前简单查询数据是否包含相同数据,如下代码:

(3)文件操作里的特殊字符

文件操作里有很多特殊的字符,发挥特别的作用,很多web应用程序没有注意处理这些字符而导致安全问题。比如很多人都知道的windows系统文件名对“空格”和“.”等的忽视,这个主要体现在上传文件或者写文件上,导致直接写webshell。另外对于windows系统对“…\”进行系统转跳等等。

下面还给大家介绍一个非常有意思的问题:


很多人看出来了上面的代码的问题,程序首先禁止使用“.php”后缀。但是下面居然接了个str_replace替换$webdbwww_url为空,那么我们提交“.p$webdbwww_urlhp”就可以饶过了。那么上面的代码杂fix呢?有人给出了如下代码:

str_replace提到前面了,很完美的解决了str_replace代码的安全问题,但是问题不是那么简单,上面的代码在某些系统上一样可以突破。接下来我们先看看下面的代码:

  • 审计策略:文读取件操作函数

主要是学习各位大佬的代码审计思路,后面自己尝试审计


推荐于 · 繁杂信息太多,你要学会辨别

道生一,一生二,二生三,三生万物.”
首先要明白这句话中“道”字的意思.此道就是我们存在的这个世界中一切事物运行的规律,包括天体、宇宙、包括我们用筷子夹菜吃饭,包括我们发射火箭上天、包括我们抵制日寇的侵略、包括我们为了拯救大自然而作的各种努力.,其中都有个“道理”.但这也是只是个比喻罢了,按照老子说的“道可道,非常道”来讲,“道”这个东西压根就是说不出来的表不清楚的,如果说出来也就不称为“道”了,所以只可意会.
那么“道生一,一生二,二生三,三生万物.”又在说什么呢?这句话有如下几层意思:
1,说明了天下万物的由来.即,万物是由“道”演变而来.具体如何演变,请参考霍金著的《霍金的宇宙》《世间简史》等现代科学著作.其中大量描述了宇宙是如何从一片虚无通过大爆炸演变二来.同时要结合中国传统哲学思想《易经》以及王大有先生的著作《宇宙全息自律》等经典哲学思想来学习.通过这种结合现代科学进展与古代哲学精华的互相参照的学习方法,你会发现,原来宇宙确实是这样一生二、二生三点进化演变二来的.
2,说明了,万物不论如何演化,其中都存有最原始的“道”.也就是说,道是当今一切万物存在以及运行的根本.
3,这里面一生二、二生三、三生万物都不难理解,难理解的是道生一.道如何生一,如何在一片虚无中就自发地产生了一呢.这里面除了要参看1中所述的各种书籍和知识外,还需要你有颗灵动的心灵才能去理解.因为真正的宇宙和世界是存在于你的心灵之中的.你能够理解自己会有灵光炸现、突然悟道、顿悟,那你也应该理解这个宇宙这个世界为什么会突然的诞生了.
4,并且,同时存在有多个宇宙以及多个世界.我们能观察到的只是我们凡胎肉眼和有限的科技所能及之处.真正的真实的世界可能远比我们想象的还要无限广袤.但是,无论在哪里都有“道”.此所为“万物皆由道生”.
最后,需要指出的是,我们的老祖宗早就认识到这些伟大的哲理,只是通过简单地“道生一,一生二,二生三,三生万物”这几个字来表达罢了.但这几个字中蕴涵的博大精深的知识结构是必须由我们现代人类不断地通过科学研究探索分析、运用科学的方法以及广泛的哲学思想分析才能透析出来,从而最终应用到我们日常生活中,造福人类的.否则我们只在文字功夫上作作文章或者只把他们归为古代经典哲学供奉起来甚或有的批为迷信和过时的东西而不加钻研开发利用,那我们就真正地荒废了老祖宗留给我们的世间精华了.
我相信以上我的回答中仍然由未涉及真正道理的地方.也有很多缺陷,还待各位专家作进一步分析.


· TA获得超过5.5万个赞

道本体,无法言说表达,更非某一表达近道而似道!
中国哲学是讲永恒不变,适用可物的道,是为真理!
而以上四句,每句话,本质真理都一样。
科学,严格来讲,属于永恒真理中的一小段,用于解决客观问题!条件一变又会不适用!

道,则存于主观客观万物宇宙

道本无一,更无二,道是一切真理!道非逻辑,非数学,非语言,非主观非客观,存于万物联系万物
因感知,而有分别,有分别,而有了研究,一,可以是数,可以是世界,可以是宇宙,也可以你自己,你若无,世界无,二,三,万物如是!

这一真理,并非西方的科


就比如坐标系,一开始只有x轴,当发现解决不了问题的时候,增加了y轴,变成平面坐标系,再后来加了z轴变成空间坐标系。这是否可以看作三生万物的一种表现

这个问题我也想了很久,目前我能得出的答案与别人有出入,道:混沌,无法言说,也说不清楚,存在(有)与不存在(无)之间; 一,代表绝对,真理;二,代表相对,阴阳,谁都能理解,唯有二生三,三生万物,这一点网上很多人的回答不能令人信服,基本上都是理解成从二直接生出了万物。我认为三代表了时间,因为有了这个存在,才能动态的演化世间的一切,如果没有了时间这个因素,一切都是静止的,何来万物变化生老病死新旧更替。但是阴阳如何能产生时间这个因子,想不明白,这个可能需要科学界的解释,哲学上是可以解释过去的,代表了高等生命以旧有知识模糊的定性解释未知事物的能力。

下载百度知道APP,抢鲜体验

使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。


这门课能帮助你快速进入人工智能领域,从事工程或者算法工作。

第三部分:有监督学习 I

第四部分:有监督学习 II

第六部分:从机器学习到深度学习

1.AI 技术岗位求职知识储备

2.触类旁通各大模型与算法

3.极简版实例体验实际应用

4.配套数据+代码快速实操上手

数据是我们经过见过的万事万物,而算法则是我们的思辨能力。

01---为什么要学原理和公式推导

功利层面:面试会考、老板会问、同事会质疑

实用层面:优化模型、针对问题实际问题定向建模

真正创造价值的,从来都是解决实际问题的人。

02---学习机器学习原理,改变看待世界的方式

破除迷信、追本溯源、精进看待世界的方法

学习机器学习原理和公式推导,并非只是做一些无聊的数字变换。很可能由此为我们打开一扇窗,让我们从新的角度就看待世界,并为日常决定的思考过程提供更加可量化方法。

03---如何学习“机器学习”

机器学习的核心——将事物转化为数值,将关系、变换转化为运算——以事实(数据)为依据,以规章(算法)为准绳,通过计算来掌握事物的客观规律(模型)。

反复学习,从记忆到掌握,由易到难,螺旋式推进。

日常学习 Tips:关联、记录、分享

根据数据平台 Kaggle 发布的2017年机器学习及数据科学调查报告,Python 是数据科学家和人工智能从业者使用最多的语言/工具。

语言简单易学,支持库丰富强大,这两大支柱从早期就奠定了 Python 的江湖地位。

了解下面这些概念:数据类型、变量、函数、参数、返回值、调用、递归……

学习流程控制:顺序、条件、循环。

在这个过程中,学习什么是静态类型,什么是动态类型,什么是强类型,什么是弱类型,这些不同设计的目的和应用场景分别是什么。

05---机器是如何学习的?

机器学习就是:让计算机程序(机器),不是通过人类直接指定的规则,而是通过自身运行,习得(学习)事物的规律,和/或事物间的关联。

计算机程序所能够处理,只有数值和运算。

要让一段程序了解客观世界变化万千的事物,则必须将这些事物数值化,将事物的变化

和不同事物之间的关联转化为运算。

通过标注数据进行学习的方法,就叫做有监督学习或直接叫监督学习(SupervisedLearning)

06---机器学习三要素之数据、模型、算法

1. 确定用哪些特征来表示数据;2. 确定用什么方式表达这些特征。

通过标注数据进行学习的方法,就叫做有监督学习或直接叫监督学习(SupervisedLearning)

训练--根据已经被指定的 f(x) 的具体形式——模型类型,结合训练数据,计算出其中各个参数的具体取值的过程。

有监督学习的目标就是:让训练数据的所有 x 经过 f(x) 计算后,获得的 y’与它们原本对应的 y 的差别尽量小。

损失函数(Loss Function):对于一个训练数据,描述 y’与 y 之间的差别。

代价函数(Cost Function)对于所有训练数据,描述整体的损失。一般写作J(theta)

算法是机器学习和深度学习中最具技术含量的部分。

要得到高质量的模型,算法很重要,但往往(尤其是在应用经典模型时)更重要的是数据。

有监督学习需要标注数据。因此,在进入训练阶段前必须要经过一个步骤:人工标注。

标注的过程繁琐且工作量颇大,却无法避免。

机器学习三要素:数据、模型、算法

算法通过在数据上运算产生模型。

07--模型的获取和改进

训练集、验证集和测试集

每个集合都应当是独立的,和另外两个没有重叠。

大量的高质量训练数据,是提高模型质量的最有效手段。

超参数是需要模型训练者自己来设置和调整的

08---模型的质量和评判指标

指标对应的是模型和数据集

模型的偏差和过拟合(相对于过拟合)

09---最常用的优化算法——梯度下降法

学习的目标就是最小化目标函数的取值,而目标函数又是凸函数,那么学习的目标自然转化成了寻找某个凸函数的最小值。最常用的一种方法,叫做梯度下降法。

1. 随机取一个自变量的值 ;

2. 对应该自变量算出对应点的因变量值: ;

3. 计算 处目标函数 的导数;

4. 从 开始,沿着该处目标函数导数的方向,按一个指定的步长  ,向前“走一步”,

走到的位置对应自变量取值为 。换言之, 是 在 处的斜率;

5. 继续重复2-4,直至退出迭代(达到指定迭代次数,或 近似收敛到最优解)。

步长 是算法自己学习不出来的,它必须由外界指定。

这种算法不能学习,需要人为设定的参数,就叫做超参数。

如果目标函数有多个极小值点(多个向下的“弯儿”),那么如果开始位置不妥,很可能导致最终是走到了一个局部极小值就无法前进了。

这种情况下,可以尝试几个不同的起始点。甚至尝试一下大步长,说不定反而能够跨出局部最小值点所在的凸域。

10---线性回归——从模型函数到目标函数

从数据反推公式:用美国纽约若干程序员职位的年薪举例

综合利用训练数据,拟合线性回归函数:获得 a, b 两个参数取值

综合利用的原则是什么呢?就是我们要求的这个 a 和 b,在将训练样本的 x 逐个带入后,得出的预测年薪 y’= a + bx 与真实年薪 y 整体的差异最小。

具体的一个样本的 y 和 y’的差异用  来表示。

怎么衡量这个整体差距呢?我们用下面这个公式,我们把它叫做为 Cost Function,形式如(其中 m 为样本的个数):

在 y = a + bx 这个模型函数中,a 和 b 是常量参数,x 是自变量,而 y 是因变量。

但到了 J(a,b) 中, 和 是常量参数(也就是 m 个样本各自的 x 和 y 值),而 a 和 b

成了自变量,J(a,b) 是因变量。能够让因变量 J(a, b) 取值最小的自变量 a 和 b,就是最好的 a和 b。

我们要做的,就是找到最好的 a 和 b。

线性回归模型是:利用线性函数对一个或多个自变量 (x 或 ( ))和因变量(y)之间的关系进行拟合的模型。

线性函数的定义是:一阶(或更低阶)多项式,或零多项式。

特征是一维的,线性模型在二维空间构成一条直线;特征是二维的,线性模型在三维空间中构成一个平面;若特征是三维的,则最终模型在四维空间中构成一个体;以此类推……

用线性回归模型拟合非线性关系:比如把特征从一个“变成”两个。

11---线性回归——梯度下降法求解目标函数

# 将特征数据集分为训练集和测试集,除了最后5个作为测试用例,其他都用于训练

# 把目标数据(特征对应的真实值)也分为训练集和测试集

# 用训练集训练模型——看就这么简单,一行搞定训练过程

# 用训练得出的模型进行预测

# 将测试结果以图标的方式显示出来

操作过程:先再命令行键入python(或者IDLE),回车。

然后等待程序开始运行。

分类模型 VS 回归模型,最根本的不同:前者是预测一个标签(类型、类别);后者则是预测一个量。

换一个角度来看,分类模型输出的预测值是离散值;而回归模型输出的预测值则是连续值

13---朴素贝叶斯分类器:条件概率的参数估计

极大似然估计,就是去寻找让似然函数 的取值达到最大的参数值的估计方法。

最大化一个似然函数同最大化它的自然对数是等价的

用代码实现朴素贝叶斯模型

我的存储方式:先打开一个空白文本文档,把数据复制过去,把文本文档的名字和后缀改为career_data.csv

注意,文档的位置要和py程序的位置在一个目录即统一路径,不然调用不了。

运行脚本,即运行程序,结果应该是:

14---逻辑回归: 非线性逻辑函数的由来

逻辑函数表现的是存量随时间增长渐增的关系。而增长率和时间的关系式存量(逻辑函数)的微分函数。

学习理论相对于学习经验具备更长久也更深入的有效性。

15---逻辑回归: 用来做分类的回归模型

LR 典型的应用是二分类问题上

模型函数在y=0.5附近非常敏感。大于0.5,真性,阳性,小于0.5,假性,阴性

16---决策树——既能分类又能回归的模型

一棵决策树(Decision Tree)是一个树结构(可以是二叉树或非二叉树),每个非叶节点对应一个特征,该节点的每个分支代表这个特征的一个取值,而每个叶节点存放一个类别或一个回归函数。

决策节点、特征、分裂特征

分裂特征的目标,是让各个分裂子集尽可能地“纯”。

使得各个分裂子集“纯”:

ID3 算法(Iterative Dichotomiser 3):以信息增益为度量,选择分裂后信息增益最大的特征进行分裂。

后剪枝优化决策树、先剪枝(局部剪枝)、后剪枝(全局剪枝)

#9个女孩和8只猫的数据,对应7个feature,yes取值为1,no为0

#1 表示是女孩,0表示是猫

# 从数据集中取20%作为测试集,其他作为训练集

# 对比测试结果和预期结果

线性可分、超平面(Hyperplane)、线性分类模型、线性分类器

以最大间隔把两类样本分开的超平面,是最佳超平面

求最大分割超平面问题其实是一个约束条件下的最优化问题

线性可分 SVM 的目标函数:一个带约束条件的求极值问题

19---SVM——直观理解拉格朗日乘子法

拉格朗日乘子法,一种多元函数在变量受到条件约束时,求极值的方法。可以用来解决 SVM 的目标函数最优化。

函数的梯度与它的等高线垂直。

拉格朗日函数也可以通过求导变化成约束条件本身。

原本有约束的优化问题,就可以转化为对拉格朗日函数的无约束优化问题了。

线性可分 SVM 的目标函数可以通过求解其对偶问题来求解

对于在有限维度向量空间中线性不可分的样本,我们将其映射到更高维度的向量空间里,再通过间隔最大化的方式,学习得到支持向量机,就是非线性 SVM.

这个更高维度的新空间叫做特征空间.

23---SVR——一种“宽容”的回归模型

线性回归:在向量空间里用线性函数去拟合样本。

严格的线性回归,所有样本实际位置到该线性函数的综合距离为损失,通过最小化损失来求取线性函数的参数

SVR 和线性回归,却是两个不同的回归模型,计算损失的原则不同,目标函数和最优化算法也不同

SVR 在线性函数两侧制造了一个“间隔带”,对于所有落入到间隔带内的样本,都不计算损失;只有间隔带之外的,才计入损失函数。之后再通过最小化间隔带的宽度与总损失来最优化模型。SVR 巴不得所有的样本点都落在“隔离带”里面,而 SVM 则恰恰希望所有的样本点都在“隔离带”之外!

SVR 的两个松弛变量

SVR 的主问题和对偶问题

我要回帖

更多关于 代码怎么解读 的文章

 

随机推荐