简书markdown引用远程图片功能真挫。。。

原文链接:http://wyb0.com/posts/2018/recording-an-sqlserver-sql-injection-of-error-based/

0x00 验证码前端验证

需要测试一个网站,刚开始看到网站时感觉希望不大,因为验证码是需要拖动的,这也就意味着很大可能没办法爆破,另一方面是都用这种验证码了,安全做的能很差劲吗?果然,试了admin、123456之类的都不行

40

那就抓个包吧

70

emmmmmm。 32位,md5加密?这里看着没有验证码之类的信息,把这个包发了几次发现没有出现验证码信息,而且试了试,发现有两种状态(运气比较好,有admin这个用户,我也是试的这个用户,一下子就看出返回不同了),如下:

用户不存在时返回
{"iserror":true,"message":"用户名不存在!","data":null,"errorfieldlist":null}

用户名存在时返回
{"iserror":true,"message":"密码不正确!","data":null,"errorfieldlist":null}

可以的,验证码前端验证,我觉得可以burp抓包intruder一下

跑了top 500的用户名和top 1000的密码,除了直接试的用户名admin,其他的一个都没有跑出来 sad

0x01 存在注入

嗯看来爆破是基本没有希望了,测其他的吧,嗯,这里是登陆,那肯定要看注入的,无脑加单引号,boom!

image

11.png

80

可以的,and 1=1 有注入

哎??!!!那不对啊,咋的后台还解密md5后进行查询??

刚才看了数据包,用户名密码都是32位,猜想sql语句是:select password from user where username=name_md5_hash,然后判断用户存不存在之类的

看返回信息的话显然不是啊,哪有后台解密md5后查询的。。。。。。

试试post其他用户名和密码,然后看数据包

80

显然并不是md5。。。。 这个是前端加密后发送的。。。。。看一下js,结果发现了这个

80

80

emmmmm,想了想,应该可以注入的,看看啥系统

50

大概率SQL Server了(因为前几天在t00ls刚看到了一个ASP.NET+MySQL,比较任性),所以这里看一下,发现确实是SQL Server

image

看看数据库版本,嗯,看来还是报错注入

80

可以可以,看看有几列,然后进行union注入

22.png

80

一列,这里也能大致猜出来sql语句了,估计就是:select password from user where username='admin'

那就看看数据库吧,不知道SQL Server中的concat怎么用,一个个来吧。。。。

得到第一个数据库的名字:union select name from master.dbo.sysdatabases where dbid=1

image

得到第二个数据库的名字:union select name from master.dbo.sysdatabases where dbid=2

image

得到第5个数据库的名字:union select name from master.dbo.sysdatabases where dbid=5

80

好麻烦啊,拖一下验证码,然后得到一个数据库,而且后面还有表呢。。。。。

py一下了吧,前端有js进行加密,可以本地写文件生成加密后的payload,然后python拿到payload后进行注入

0x02 尝试写php得到加密后的payload

把加密的那个js文件SkyEnCode.js保存到本地,然后写php文件,php的话接收一个未加密的payload然后返回一个加密后的payload,大致代码:



    test
>>'+SkyEnCode.EscKeyCode(name) +'";
    ?>

文章来源于互联网,如有雷同请联系站长删除:记一次SQL Server报错注入

发表评论