黑客攻防技术宝典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 ...
随机推荐
- C#语言 循环语句
//Console.Write("请输入关卡数:"); //int a = int.Parse(Console.ReadLine()); //int s = 0; //if (a ...
- NYOJ 1067 Compress String(区间dp)
Compress String 时间限制:2000 ms | 内存限制:65535 KB 难度:3 描写叙述 One day,a beautiful girl ask LYH to help he ...
- BoW(SIFT/SURF/...)+SVM/KNN的OpenCV 实现
本文转载了文章(沈阳的博客),目的在于记录自己重复过程中遇到的问题,和更多的人分享讨论. 程序包:猛戳我 物体分类 物体分类是计算机视觉中一个很有意思的问题,有一些已经归类好的图片作为输入,对一些未知 ...
- 流媒体开发之开源项目live555---更改server端的帧率大小和码率大小
-----------------------------qq:1327706646 010101010101010110010101010101010101010author:midu 010101 ...
- Java,如何获取文件的MD5值
MessageDigest类封装得很不错,简单易用 不多说,直接上代码 import java.io.FileInputStream;import java.security.MessageDiges ...
- HDOJ 5045 Contest
状压DP.. . . Contest Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Other ...
- MRP 中的数据元素
20170227 MRP 元素是个什么东西? 系统显示的是MRP 元素缩写,程序用的是Code SimReq 简单需求AR 相关预订 OrdRes 订单需求BA 采购申请 PurRqs 采购申请BB ...
- IDHTTP用法详解 good
一.IDHTTP的基本用法 IDHttp和WebBrowser一样,都可以实现抓取远端网页的功能,但是http方式更快.更节约资源,缺点是需要手动维护cook,连接等 IDHttp的创建,需要引入ID ...
- react native 之页面跳转
第一章 跳转的实现 1.component 中添加这行代码 <View style={styles.loginmain}> <Text style={styles.loginte ...
- 关于苹果iPhone手机对页面margin属性无效的解决方法一(如有错误,请留言批评)
这个问题,是在给商城网站底部footer设置margin属性的时候发现的,先把出现问题的截图发出来看一下 安卓手机,打开正常 iphone6 p 打开出现的问题(无视margin-bottom:6 ...