这是一个SQL注入打怪升级的案例,只打过第二关。 0X01 第一关 发现注入点 一个单引号 嗯,很明显的注入点。报错语句也出来了,这时候使用我祖传的轮子 admin'and+1='1 好家伙,果然没这么简单。出现WAF界面了,我也不知道是啥waf。放弃 是不可能的,尝试尝试 Admin'and 使用这个语句的含义是看看 是不是检测到 and就会被拦截 然后继续尝试 OR 、 &&(这个在burp中URL编码使用)、 ||、xor(这里的意思是将Admin'and中的and替换)
被拦截了 我套 放弃 再见了注入。但是发现xor可以过去waf 但是这里好像没有xor这个语法所以用不了 不用 连接符 尝试使用 Admin’like’1% 如果这个轮子可以用 我就继续尝试尝试 这个错误很明显,告诉我 这个数据库没有like这个语法 闲来无事尝试了一下 注释符 -- 这个玩意儿,就是这个短小精悍的玩意儿。这是这一关的解题关键 很巧妙的是 注释符可以用 现在已知 And、or、&&、||、like不能用,--可以用 如何构造POC? 这里我靠自己的直觉感觉这里是mssql,这里让我猜中了 使用POC :admin’-1/1-’ 这里解释下
--注释中间添加的语句也会被执行,最后添加’是因为我不加他说我没有闭合,第一个单引号闭合前面 在注释中添加1/1突然出现了类型转换报错。将admin的值转换为int时报错了。那么如果将前面改为123呢? 诶,换了。换成了前面的char数据转换出错了。现在我可以通过123将前面的数据带出来。那么如果我注释中的四则运算存在错误会不会带出我想要的数据。 POC:123'-user/1-' 成功带出了我想要的用户名的数据。但是注入嘛,有时候提交一个用户名不行,需要一些库名。可以判断是Mssql了那么用库名函数尝试尝试。 POC:123'-db_name()/1-' 很正常的拦截啊。那么我们把括号去了尝试尝试。 这就是说waf拦截的是db_name()并不拦截db_name。那么db_name/(星号注释符)/()能否带出数据呢 (编辑文档时这个与下面那个成对了) 可以看到带出数据库名。但是数据库名就打码隐藏了。这是第一次不使用and、or这种连接符也没有使用like的注入。 (tips: 这里的/**/ 也可以 使用 0a% 也就是回车 (%0a)这个有人尝试过貌似也能正常执行语句 ) 成功获取数据库名和用户名 提交SRC即可。 0X02 第二关 回显默认报错页面 这个是和上面那家单位是一样的,只是这个注入点给大家提供一个思路。 一个单引号 302跳转,尝试2个单引号 就不继续判断了,费图。 现在已知 And、or、&&、||、like不能用,--可以用,然后没有报错页面回显 如何绕过waf? 再我经过一下午的尝试后,突然看到了某位老师傅的葵花宝典。然后发现了有垃圾数据填充的方法让Waf失效。然后就进行了尝试,诶 好使,一步到胃。 然后看如下界面,这是为真的时候的截图。user第一位为d。字节数是45069,看看为假的字节数。 为假是这个字节 也成功获取到了数据库名和用户名。 (垃圾数据填充后使用sqlmap 垃圾数据* 去跑能否跑出数据我没有尝试,但是应该是可以的。) 0X03 第三关 在以上基础上再添加一个创宇云 别看了 第三关没绕过去,当时这个项目处于71重保阶段。另外这个注入点找的迟了2天,用第二关的POC发现出现了创宇云的界面。 终 0X04总结 1、世上无难事,只要肯放弃。 有一个好的思路也许放弃的更早。
最后各位大佬们,图一乐就好。祝各位大佬洞洞皆高危。
F3ngZ1 很秀
师傅太强了
师傅,图有点糊呀 :
dlddw
小老弟,写的不错呦