安全漏洞让任何人“重写直布罗陀”的法律
使用SQL注入“重写英国海外领土直布罗陀的法律”
注意:在发布本文时,网站的易受攻击部分已被关闭,有效地解决了该漏洞。 特别 感谢The Register的 Gareth Corfield协调负责任的披露。
我需要回答:“英国居民需要签证才能访问直布罗陀吗?”这就是为什么我偶然发现直布罗陀边境与海岸警卫队网站。 作为英国的海外领土, 直布罗陀下降的排序英国的管辖之下,但拥有自己的政府和法律所以这是一个有点混乱。 我打算在晚上11点左右澄清一下-并保证有一个良好的晚安睡眠。 我几乎没有意识到这将变成漫长的探索之夜。
边境和海岸警卫队代理机构网站上有与《 直布罗陀移民法》的链接 , 看起来像: http://www.gibraltarlaws.gov.gi/edit_article_o.php?group_id=000000062
直布罗陀边境和海岸警卫队法律和政策页面
对于普通的互联网用户来说,这并不意味着什么,但是当HM直布罗陀政府法律和立法网站的首页显示如下时,技术人员就会感到可疑。 请注意底部的安全站点徽标,因为这将变得很有趣!
单击上面提到的出站链接时,可以预见到根据《 直布罗陀移民法》显示的法律和修正案的PDF文件是可预测的:
SQL注入和数据库转储
但是,过时的网站似乎可能是 脆弱的东西 。 在URL末尾仅添加一个简单字符—单引号: '
(当编码时变成%27
) 确实证实了我的怀疑。 该网站容易受到最简单的SQL注入:基于错误的攻击。 http://www.gibraltarlaws.gov.gi/edit_article_o.php?group_id=000000062%27
链接的输出加上单引号:
与前几页显示的法律和修正案PDF链接不同,除了链接末尾带有''的页面标题外,什么都没有出现,所以乍一看似乎没有。 由于“ URL错误”,即404(未找到)页面,这可能只是一个错误。 但是,在选择并突出显示整个页面后,黑色文本突然变得可见了!
Error in query: SELECT * FROM `article` WHERE group_id='000000062'' AND category='c'. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'c'' at line 1
这是一条正确的MySQL错误消息,说明了表名(即article
以及随后的字段),从而为攻击者提供了相应的机会,可以据此精心制作恶意输入。
用外行的术语来说,对于那些不熟悉的人来说, SQL Injection攻击是针对提供此类用户输入(例如,用户名或密码值)的攻击者,后者诱骗数据库引擎处理该值,将其视为对数据库的命令 ,例如与单纯的数据值相反。 因此,例如,通常的用户名 would be processed by a database engine normally, as a value. A crafted input provided in place of the username, like
michael'--
may instead cause a vulnerable system to let an attacker access the user's (Michael's) account without requiring a password.
至此,很明显,该网站遭受了基于错误的SQL注入-不是在一个地方,而是在许多地方。 另外,将group_id
参数更改为0
或无效值将转储所有PDF:
可以注意到这一有趣缺陷的另一个地方是“ 就业法庭判决”部分,根据该页面, “其中包含可追溯到1999年的直布罗陀就业法庭通过的判决,裁定和决定。”
仅在网页上搜索单引号( '
)或带有单引号的名称(例如Derick O'Brian),将导致一条相当冗长的SQL错误消息:
Error in query: SELECT * FROM industrial_tribunal_judgement WHERE itj_title LIKE '%'%' OR itj_case_number LIKE '%'%' OR itj_keywords LIKE '%\'%' AND itj_keywords LIKE '%%' AND itj_keywords LIKE '%%' AND itj_keywords LIKE '%%' AND itj_keywords LIKE '%%' AND (itj_tribunal = 'dummy' OR itj_tribunal = 't' OR itj_tribunal = 'a') AND (itj_type = 'dummy' OR itj_type = 'j' OR itj_type = 'd' OR itj_type = 'r') ORDER BY itj_date_passed DESC. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%' OR itj_case_number LIKE '%'%' OR itj_keywords LIKE '%\'%' AND itj_keywords LI' at line 1
使用像sqlmap这样的简单渗透测试和分析工具,可以更容易地窥视易受攻击的服务器的所有数据库中包含的内容。 使用./sqlmap.py -u <URL> --schema
类的命令进行的简单测试足以列出MySQL实例中包含的所有数据库和表。
其中,其他所有内容似乎都是包含常规信息的基线information_schema SQL表,或者是包含有关法律,修正案等面向公众的信息的直布罗陀法律网站自定义表。其中最有趣的表是user
。
使用sqlmap -t
命令进一步分析user
表后,该表显示: 工作人员姓名,用户名,密码摘要(哈希),帐户注册时使用的IP地址以及其他信息。 这是有关可能管理网站内容的工作人员的信息,这些工作人员具有足够的特权来编辑或删除网站上的任何文章,法律,修正案和所附文件,包括可追溯到1887年的立法法规,2020年。
密码分析和**
sqlmap
和其他工具具有内置选项,可以进一步分析表,并在脱机状态下对其中的某些密码摘要进行基于字典的快速“猜测”。 对摘要的快速分析显示,其中一个密码非常脆弱-仅有6位数字的日期组合(也许是出生日期或周年纪念日)。 尽管密码摘要存储在表中,而不是实际的纯文本密码,但密码在不到一秒钟的时间内就很容易显示出来。 毕竟, 即使是一台普通的计算机,每秒也能很好地猜测超过100,000次猜测 ,而**6位数的密码也是小菜一碟。
一旦攻击者获得了用户名和密码,他们就可以使用网站的CMS 修改或删除任何内容,包括法律。
每个页面上不太精细的Modify | Delete链接使这成为可能:
在修改或删除内容之前显示的示例登录屏幕:
am! 成功登录后,攻击者可以“重写任何法律”,删除或上传新的PDF并篡改其他数据。 是的,我不会尝试删除,但是我敢肯定它可以工作:
尽管可以说, 这是漏洞利用的第二步,即密码分析和**令人印象深刻,但SQL Injection漏洞本身的关键性质意味着没有必要。 攻击者仅凭精心制作的查询等恶意输入即可修改,删除或篡改任何表和数据库信息。 使用更复杂的SQL Injection有效负载,甚至可以潜在地实现反向Shell访问 。
因此,下次您选择在底部放置“ 安全站点”徽标时,请确保已覆盖最常见的严重漏洞。 ;)
给直布罗陀HM政府工作人员的道具。 不仅在报告的一周内解决了该漏洞-在漫长的假期后, 同一天就启动了一个新的网站来替代以前的网站 。 看起来不漂亮吗?
直布罗陀法律网站于2020年1月6日启动:
© 2020。Akshay'Ax'Sharma ( Twitter )。 版权所有。
From: https://hackernoon.com/a-security-vulnerability-let-anyone-rewrite-the-laws-of-gibraltar-x35636e7