黑客攻防技术宝典web实战篇:查找源代码中的漏洞习题
猫宁!!!
参考链接:http://www.ituring.com.cn/book/885
随书答案。
1. 列出 3 种可在源代码中找到明确签名的常见漏洞。
(a) 跨站点脚本
(b) SQL 注入
(c) 路径遍历
(d) 任意重定向
(e) 操作系统命令注入
(f) 后门密码
(g) 某些本地代码漏洞
2. 当审查 PHP 应用程序时,为什么有时很难确定用户输入的所有来源?
PHP 使用一系列内置数组来存在用户提交的数据。如果启用了
register_globals,则 PHP 会为每个请求参数创建一个全局变量,并且应用程序
会通过引用一个同名变量来访问参数——没有任何语法现象表明此变量表示用
户输入,而不是在其他位置定义的任何其他变量。
3. 以下两个执行 SQL 查询的方法都使用了用户提交的输入:
// method 1
String artist = request.getParameter(“artist”).replaceAll(“’”,“’’”);
String genre = request.getParameter(“genre”).replaceAll(“’”, “’’”);
String album = request.getParameter(“album”).replaceAll(“’”, “’’”);
Statement s = connection.createStatement();
s.executeQuery(“SELECT * FROM music WHERE artist = ‘” + artist +
‘” AND genre = ‘” + genre + ‘” AND album = ‘” + album + “’”);
// method 2
String artist = request.getParameter(“artist”);
String genre = request.getParameter(“genre”);
String album = request.getParameter(“album”);
Statement s = connection.prepareStatement(
“SELECT * FROM music WHERE artist = ‘” + artist +
“’ AND genre = ? AND album = ?”);
s.setString(1, genre);
s.setString(2, album);
s.executeQuery();
哪一个方法更加安全,为什么?
方法 1 更加安全。
虽然方法 1 从用户输入动态构建 SQL 查询,但它将输入中出现的所有单引号全部
配对,并将所有用户提交的参数视为字符串数据。虽然这并非安全处理 SQL 查询
的最佳方法,但目前似乎并没有任何 SQL 注入风险。
方法 2 使用一个参数化查询,这是在 SQL 语句中安全合并用户提交的输入的首选
方法。但是,在三个用户输入中,只有两个输入被正确参数化。其中一个输入被
错误地直接放置到指定查询结构的字符串中,因此应用程序肯定易于受到 SQL
注入攻击。
4. 在审查一个 Java 应用程序代码时,首先要检查
HttpServletRequest.getParameter API 的所有用法。下列代码引起了你的注意:
private void setWelcomeMessage(HttpServletRequest request) throws
ServletException
{
String name = request.getParameter(“name”);
if (name == null)
name = “”;
m_welcomeMessage = “Welcome “ + name +”!”;
}
这段代码表示应用程序中可能存在什么漏洞?还需要进行哪些代码分析才能确
定应用程序是否确实易于受到攻击?
该应用程序可能易于受到反射型 XSS 攻击,因为它似乎正从请求参数直接构建在
屏幕上显示的欢迎消息。
仅仅从这个代码片段无法最终确认应用程序是否易于受到攻击。为此,还需要进
行以下调查:
(a) 是否对其他位置的 name 参数执行了任何输入确认;以及
(b) 在将 m_welcomeMessage 复制到应用程序的响应中之前,是否对它执行了任
何输出确认。
5. 假设渗透测试员正在审查一个应用程序用于生成会话令牌的机制。相关代码
如下:
public class TokenGenerator
{
private java.util.Random r = new java.util.Random();
public synchronized long nextToken()
{
long l = r.nextInt();
long m = r.nextInt();
return l + (m << 32);
}
}
应用程序生成的会话令牌是否可以预测?请解释理由。
是。了解所使用的令牌创建算法后,就可以基于一个令牌示例进行前后推断,从
而确定应用程序创建的所有令牌。
Java API java.util.Random 实施一个线性同余发生器,可根据一个完全可预测
的算法生成伪随机数字。如果知道该发生器在任何迭代时的状态,就可以推断出
它接下来将生成的数字序列,以及它之前生成的序列(利用一点数论知识)。
但是,java.util.Random 发生器维持 48 位的状态,而 nextInt 方法仅返回 32
位的状态。因此,获取 nextInt 方法的一次输出并不足以确定该发生器的状态,
或者预测它的输出序列。
当前,我们可以轻松解决这个难题,因为应用程序使用的算法会连续两次调用
nextInt。创建的每个会话令牌均包含发生器的一次迭代的 32 位状态,以及下一
次迭代的 32 位状态。基于这些信息,就可以直接实施本地蛮力攻击,以查明第
一次迭代所缺少的 16 位状态(通过尝试缺少的 16 个位的每个可能的排列组合,
并测试发生器是否会输出从第二次迭代中获取的 32 个位)。确认缺少的 16 个位
后,就知道了发生器的完整状态,从而能够以标准的方法推断随后及以前的输出。
讽刺的是,开发者做出的两次调用 nextInt 并组合相关结果的决定却使令牌创建
算法比在其他情况下更易于受到攻击。
有关这类攻击的详情,请参阅以下由 Chris Anley 撰写的论文:
http://www.ngssoftware.com/research/papers/Randomness.pdf
黑客攻防技术宝典web实战篇:查找源代码中的漏洞习题的更多相关文章
- 黑客攻防技术宝典web实战篇:攻击应用程序架构习题
猫宁!!! 参考链接:http://www.ituring.com.cn/book/885 随书答案. 1. 假设受攻击的应用程序使用两台不同的服务器:一台应用程序服务器和一台数据库服务器.已经发现一 ...
- 黑客攻防技术宝典web实战篇:攻击用户·其他技巧习题
猫宁!!! 参考链接:http://www.ituring.com.cn/book/885 随书答案. 1. 已知一项应用程序功能将一个查询字符串参数的内容插入到某个 HTTP 重定向的 Locati ...
- 黑客攻防技术宝典Web实战篇:避开客户端控件习题
猫宁!!! 参考链接:http://www.ituring.com.cn/book/885 随书答案. 1. 通过客户端传送的数据如何阻止破坏性攻击? 可以使用保存在服务器上的密钥对数据进行加密或散列 ...
- 黑客攻防技术宝典web实战篇:攻击应用程序逻辑习题
猫宁!!! 参考链接:http://www.ituring.com.cn/book/885 随书答案. 1. 何为强制浏览?可以通过它确定哪些漏洞? 强制浏览包括避开浏览器导航对应用程序功能访问顺序实 ...
- 黑客攻防技术宝典web实战篇:攻击数据存储区习题
猫宁!!! 参考链接:http://www.ituring.com.cn/book/885 随书答案. 1. 如果要通过实施 UNION 攻击.利用 SQL 注入漏洞获取数据,但是并不知道最初的查询返 ...
- 《黑客攻防技术宝典Web实战篇@第2版》读书笔记1:了解Web应用程序
读书笔记第一部分对应原书的第一章,主要介绍了Web应用程序的发展,功能,安全状况. Web应用程序的发展历程 早期的万维网仅由Web站点构成,只是包含静态文档的信息库,随后人们发明了Web浏览器用来检 ...
- 黑客攻防技术宝典web实战篇:核心防御机制习题
猫宁!!! 参考链接:http://www.ituring.com.cn/book/885 黑客攻防技术宝典web实战篇是一本非常不错的书,它的著作人之一是burpsuite的作者,课后的习题值得关注 ...
- 黑客攻防技术宝典web实战篇:攻击验证机制习题
猫宁!!! 参考链接:http://www.ituring.com.cn/book/885 随书答案. 1. 在测试一个使用joe和pass证书登录的Web应用程序的过程中,在登录阶段,在拦截代理服务 ...
- 黑客攻防技术宝典Web实战篇(二)工具篇DVWA Web漏洞学习
DVWA是一个学习Web漏洞的很好的工具. DVWA全程是Damn Vulnerable Web Application,还有一个跟它一样好的工具尽在http://www.360doc.com/con ...
随机推荐
- 【转载】.NET Remoting学习笔记(三)信道
目录 .NET Remoting学习笔记(一)概念 .NET Remoting学习笔记(二)激活方式 .NET Remoting学习笔记(三)信道 参考:♂风车车.Net .NET Framework ...
- JavaScript 刚開始学习的人应知的 24 条最佳实践
原文:24 JavaScript Best Practices for Beginners (注:阅读原文的时候没有注意公布日期,认为不错就翻译了,翻译到 JSON.parse 那一节认为有点不正确路 ...
- Android 特别大的Activity和Fragment的生命周期图
这么 这么大的图.不做太多解释,哈哈,真的是棒棒的. 代码測试下载:http://download.csdn.net/detail/pcaxb/8906085
- JavaScript 模拟键盘事件
JavaScript 模拟键盘事件和鼠标事件(比如模拟按下回车等) 2016年09月08日 15:23:25 神秘_博士 阅读数:41158 标签: javascript鼠标键盘事件模拟更多 个人分类 ...
- snip_进制转换代码段
10进制转成16进制. /* 程序:10进制转16进制的C语言实现 描述: 关键: 获得余 获得整 整为零 则退出 */ #include<stdio.h> #define N 10 #d ...
- linux块设备驱动(一)——块设备概念介绍
本文来源于: 1. http://blog.csdn.net/jianchi88/article/details/7212370 2. http://blog.chinaunix.net/uid-27 ...
- 继承LinearLayout实现根据屏幕宽度及内部子View个数自动排布GridView
public class VerticalSearchGridView extends LinearLayout implements View.OnClickListener { private i ...
- Drupal 7模板(主题钩子)的建议
这一块的内容很多其它的讲的是样例.所以这里请直接稳步官方站点查看吧.链接 https://drupal.org/node/1089656
- CH 5302 金字塔(区间DP)
CH 5302 金字塔 \(solution:\) 很神奇的一道题目,当时看到还以为是一道字符串求回文子串的题目.但是数据范围很小,而且只知道回文串也不好做.但是我们观察可得,如果是深度搜索便利,那么 ...
- POJ3268 Silver Cow Party —— 最短路
题目链接:http://poj.org/problem?id=3268 Silver Cow Party Time Limit: 2000MS Memory Limit: 65536K Total ...