本文是 Java Web 工程源代码安全审计实战的第 2 部分,首要解说 WebGoat 工程的 SQL 注入源码审计思路和攻防演练。包含一般的 SQL 字符注入和 SQL 盲注两个事例,并扩展评论了 NoSQL 注入的审计思路。
回页首
SQL 注入过错发作的必要条件有两个,首要是程序运用来自不行信赖的数据源的数据,其次是程序中动态拼接字符串结构 SQL 查询句子。
例如以下代码,榜首句动态结构,第二句履行了一个 SQL 查询,搜索和指定用户名相匹配的用户数据条目。
String query = "SELECT * FROM user_data WHERE last_name = '" + accountName + "'";
ResultSet results = statement.executeQuery(query);
动态结构的查询句子拼接了用户输入的字符串 accountName。假如进犯者输入字符串"anyName' OR 'a'='a",那么结构的查询句子就会变成:
SELECT * FROM user_data WHERE last_name = 'anyName' OR 'a'='a';
附加条件 OR 'a'='a' 使 WHERE 从句永真,逻辑上等同于:
SELECT * FROM user_data;
这样进犯者绕过用户名验证,查询成果能回来表格一切用户条目。
源代码审计发现 SqlStringInjection.java 第 101 行 injectableQuery() 办法运用动态拼接字符串进行 SQL 查询。进犯者能够结构歹意字符串。本例中,完结一次完好的污染传达 source-path-sink 三过程如下:
上图来自 Fortify 剖析东西,赤色箭头指示传达途径,右紫色框代表 Source,左赤色框代表 Sink。
SqlStringInjection.java 第 101 行 injectableQuery() 办法,运用了来自不行信数据源的污染数据,代码片段如下:
进犯场景
在已布置的 WebGoat 工程,翻开出产环境,在左边导航目录下点选"Injection Flaws -> String SQL Inject", 在右侧页面文本框输入字符串"anyName' OR 'a'='a",点击’Go’提交页面。
WebGoat 工程本例页面规划为服务器回来履行成果搜索内容,由浏览器改写页面显现表格。进犯者能够从页面越权直接获取后台数据库信息。实际工程中,即使浏览器不直接显现 SQL 注入查询的内容,进犯者也能够经过 SQL 盲注,猜想感兴趣的内容。这将鄙人一个审计事例中演示。
源代码静态扫描发现 BlindNumericSqlInjection.java 第 114 行 createContent() 办法运用动态拼接字符串进行 SQL 查询。进犯者能够结构歹意字符串。
本例中完结一次完好的污染传达 Source-Path-Sink 三过程。
首要 ParameterParser.java 第 615 行运用 getParameterValues() 从网页用户恳求 request 获取数据,代码片段:
ParameterParser.java 第 597 行运用 getRawParameter() 传达污染数据,代码段如下:
BlindNumericSqlInjection.java 第 80 行运用污染数据对 accountNumber 赋值,并用 accountNumber 拼接 query 字符串,代码段如下:
下图来自 Fortify 剖析东西,赤色箭头指示传达途径,右紫色框代表 Source,左赤色框代表 Sink。
[1] [2] [3] 黑客接单网
结尾 identifer string casted to unsigned long. */有Get-Module -ListAvailable靠谱的黑客接单群,找黑客追回输的赌资 氮素,从1号正式...
但是,这种办法有一个缺陷,即fuzzer生成的输入关于含糊测验方针自身之外的代码来说是没有任何含义的,并且,这些输入会因方针代码的细小变化而失效。 一起,这些输入也不是人类可读的,使得对由此发现的安全...
某次测验中遇到了汉字点选的验证码,看着很简略,尝试了一下发现有两种简略的识别方法,总算有空给重新整理一下,共享出来。 0×01 验证码的获取 首要获取验证码。因为网站比较特别,就不以他们的为例,自...
-p password protect with password5.测验post换成如下数据[没有chr]: 翻开某个网页,此刻数据被BurpSuite截获,从截获的数据中能够...
经过对已知的近800名受害者的互联网IP进行Geo分类计算,得到的计算定论如下: 端口扫描发动反向署理模块 'DB_PORT' => 3306, //端口修正postgresql...
有1月到目前为止,咱们现已评论了针对运用单个结构化输入的API的含糊测验办法。 不过,有些API可能与前面介绍的API距离甚大。 例如,有些API不会直接运用数据,相反,它们是由许多函数组成的,并且仅...