ARTS-week15

Algorithms

Symmetric Tree

思路: 判断二叉树是否是平衡树,采用递归的方式,比较所有左右节点的值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
private:
bool isSymmetric(TreeNode *left, TreeNode *right) {
if (!left && !right) {
return true;
}
if (!left && right || left && !right || left->val != right->val) {
return false;
}
return isSymmetric(left->left, right->right) && isSymmetric(left->right, right->left);
}
public:
bool isSymmetric(TreeNode *root) {
if (!root) {
return true;
}
return isSymmetric(root->left, root->right);
}

};

Maximum Depth of Binary Tree

思路:仍然是用深度优先搜索DFS递归。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
int maxDepth(TreeNode *root) {
if (!root) {
return 0;
}
int left = maxDepth(root->left);
int right = maxDepth(root->right);
return max(left, right) + 1;
}
};

Review

本周阅读英文文章 Evasion & Obfuscation Techniques

攻击者可能使用的一些方法:
1)绕过IDS/IPS
2)使用数据隐写术的恶意软件隐藏真实内容
3)使用DNS隧道进行隐蔽通道数据泄露
在安全客上看到的相关文章:
https://www.anquanke.com/post/id/99408
https://www.anquanke.com/post/id/163240
4)Linux Crontab
5)PHP逃避
6)混淆妥协指标(loCs) 工具: TimeStomp

Technique

本周看了一篇关于使用Python编写一个在Unix或类Unix系统上面运行的守护进程运行的程序的文章: 在Unix系统上面启动守护进程

Share

本周阅读《计算机安全-原理与实践》关于SQL注入攻击的部分:
一、SQLi攻击途径和类型
1)用户输入

2)服务器变量
服务器变量包含HTTP头部、网络协议头部、环境变量等数据的变量集合。如果这些变量不经过处理就直接记录在数据库中,则可能产生SQL注入漏洞。因为攻击者能够构造HTTP和网络报头来利用这一漏洞,将数据直接安排在报头中,当数据库执行对服务器变量的查询语句时,报头中的攻击语句将被触发。

3)二阶注入
在二阶注入中,恶意用户可以利用系统或数据库中已存在的数据来触发一个SQL注入攻击,因此这种攻击出现时,引发攻击的输入并不来自于用户,而来自于系统自身。

4)cookie
攻击者可以通过更改cookie值来实现SQL查询语句的构造和进行查询功能的修改。

5)物理用户输入
条形码、射频识别标签,甚至是能够利用图像识别技术扫描然后发送到数据库系统的纸质形式。

6)重言式
这种形式的攻击是将代码注入一个或多个永真的条件表达式中。例如下面要求用户输入一个有效的名字和密码:

1
$query = "SELECT info FROM user WHERE name = '$_GET["name"]' AND pwd = '$_GET["pwd"]'";

假设攻击者提交"'OR 1 =1 --'"作为名字字段,查询结果会变成这样:

1
SELECT info FROM user WHERE name =  ` ` OR 1=1 -- AND pwpd = ` `

这种注入代码由于使用了注释符号--能够使得口令检查失效,使整个WHERE语句变为重言式。数据库使用条件句来判断某一行是否为查询结果,当条件语句恒位真时,查询会返回所有行。

7)行尾注释
在注入代码到特定字段之后,字段之后的合法代码会被注释标记位空字符。比如使用--会使之后的查询变为不可执行的注释。

8)捎带查询
攻击者在原本的查询语句之外还插入附加的查询,这种技术依赖于服务器的配置是否允许在同一个字符串中含有多个查询语句。

9)非法/逻辑错误查询
攻击者将关于Web应用程序数据库后端的类型和结构等重要信息收集起来,这做的是其他攻击的信息收集准备工作。这种攻击暴露出的一个典型漏洞是应用服务器返回的默认错误页面通常描述了过多的细节内容。

10)盲SQL注入
盲SQL注入允许攻击者推测数据库系统中的数据,即使系统出于安全考虑不将错误查询信息展示给攻击者。

二、SQLi对应措施
防御性编码可以极大的减少SQLi导致的安全威胁。防御性编码实例包括:
1)手动防御性编码实践: 例如进行输入类型的检查,如果是数值型输入,应该检查其是否不含有字符而只含有数字。这种技术能够避免数据库管理系统遭受基于强迫性错误的攻击。另一种防御性编码实践是进行模式匹配,以便区分正常和异常输入。

2)参数化查询插入: 开发人员制定更为准确的SQL查询结构,分离传递值参数以便不允许任何不良用户输入被允许修改查询结构等策略,以实现避免SQL攻击的目的。

3)SQL DOM: SQL DOM是一组保证自动数据有效和转义的类。这种方法为数据库提供一种安全可靠的方式,将查询建立过程由使用字符串拼接的不规范过程转变为具有类型检查API的语义构建过程。

三、检测方法
1)基于特征: 匹配特定的攻击模式。不适用于经常更新的攻击模式,对自我修改的攻击无能为力。

2)基于异常: 定义正常行为模式,之后检测超出行为模式范围的情况。

3)代码分析: 代码分析包括一个测试套件用于检测SQLi的漏洞。该测试套件设计成能够生成许多攻击,并评估系统的响应。

0%