黑客攻防技术宝典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 ...
随机推荐
- MongoDB:数据模型介绍
在MongoDB的数据有灵活的模式.不像SQL数据库,(SQL数据库)要求你必须在插入数据之前决定和声明一个表的模式.MongoDB的集合不强制文档的结构.这个灵活性有利于文档到实体或对象的映射. 每 ...
- Ubuntu 14.04安装搜狗拼音linux版应该注意的问题
Ubuntu 14.04最终在万千期盼中来了,我也像其他的linux爱好者一样,删除了旧的12.04.開始体验下一个到来的LTS版本号. 我不想安装Ubuntu 麒麟版,我仅仅想原汁原味的Ubuntu ...
- typedef和#define的差别——————【Badboy】
typedef 和#define 都经常使用来定义一个标识符及keyword的别名.但他们之间有关键的差别. typedef 是语言编译过程的一部分; #define是宏定义语句,它本身并不在编译过程 ...
- SIFT算法中DoG特征点的修正
SIFT算法中,在DoG空间找到极值点后,需要对极值点进行修正,本文主要详细的讲解一下为什么需要修正,以及如何对极值点进行修正. 下图演示了二维函数离散空间得到的极值点与连续空间的极值点之间的差别 利 ...
- FastDFS的配置、部署与API使用解读(2)以字节方式上传文件的客户端代码(转)
本文来自 诗商·柳惊鸿 Poechant CSDN博客,转载请注明源地址:FastDFS的配置.部署与API使用解读(2)上传文件到FastDFS分布式文件系统的客户端代码 在阅读本文之前,请您先通过 ...
- 当电视沦为“情怀”,5G能不能拯救它?(zz)
文|佘凯文 来源|智能相对论(aixdlun) 现阶段,智能家居行业极度期待5G的到来,甚至超过手机.行业对于颠覆性的升级的欲望极其强烈,纵观整个智能家居行业,除了像智能音箱外的偶尔单品能够“引爆”市 ...
- android-custom-tab-with-viewpager
https://github.com/eltld/android-custom-tab-with-viewpager
- npm WARN uninstall not installed in /Users/hrt0kmt/node_modules: "xxx"
You may meet this error on home directory. % npm uninstall appium npm WARN uninstall not installed i ...
- LeetCode(67)题解: Add Binary
https://leetcode.com/problems/add-binary/ 题目: Given two binary strings, return their sum (also a bin ...
- (Android 即时通讯) [悬赏],不管是谁发现一个漏洞奖励人民币1000元!
悬赏,不管是谁发现一个漏洞奖励人民币1000元! 3Q Android 手机版即时通讯系统正式推出,可与电脑版 地灵(http://im.yunxunmi.com) 即时通讯系统互通! 适用于:小米 ...