sqli | 您所在的位置:网站首页 › 笑屎我了第23关 › sqli |
二次注入,可以概括为以下两步: 第一步:插入恶意数据 进行数据库插入数据时,对其中的特殊字符进行了转义处理,在写入数据库的时候又保留了原来的数据。 第二步:引用恶意数据 开发者默认存入数据库的数据都是安全的,在进行查询时,直接从数据库中取出恶意数据,没有进行进一步的检验的处理。 第二十四关(Less-24):1.在本关中,对数据库的长度进行了限制,故只进行密码的修改 2.首先使用正确的用户名admin,密码admin进行登录。显示用户名admin 3.重新创建用户名admin',并使用#进行注释。注册成功。再使用注册的账号进行登录 4.接下来修改admin'用户的密码,将密码123456更改为147258.显示密码重置成功 5.进行登录,用户名为admin,密码为147258.发现登陆成功并将原来的密码进行了修改 知识点: SQL注入WAF绕过:WAF绕过可大致分为三类:白盒绕过、黑盒绕过、fuzz测试 白盒绕过:通过源代码分析,来进行绕过 黑盒绕过:(1)架构层面绕过waf:寻找源网站绕过waf检测(主要针对的是云waf,找到源网站的真是地址,进行绕过,有点像CDN) 通过同网段绕过waf防护(在一个网段中,可能经过的数据不会经过云waf,从而实现绕过) (2)资源限制角度绕过waf:一般waf的执行需要优先考虑业务优先原则,所以对于构造较大、超大数据包可能不会进行检测,从而实现绕过waf (3)协议层面绕过waf:协议未覆盖绕过waf:比如由于业务需要,只对get型进行检测,post数据选择忽略 参数污染:index?id=1&id=2,waf可能只对id=1进行检测 (4)规则层面的绕过:sql注释符绕过、空白符绕过、函数分隔符号、浮点数法、利用error-based进行sql注入、mysql的特殊语法、大小写绕过(如果对关键 字and or union等进行了过滤,可以考虑使用大小写混合的方法)、关键字重复(OORr→or)、关键字替换 fuzz测试:可以使用burpsuite配合配合手工进行测试。后期测试成功后再用脚本进行处理 第二十五关(Less-25):1.输入id=1进行测试 2.再加上单引号进行测试,出现报错 3.再次加上注释符--+进行测试,进行闭合 4.使用order by查询列数。报错,我们发现我们输入的order是剩下der 5.查看源码,发现将or、and不区分大小写替换为空 6.使用双写进行测试。成功,所以我们用双写的方法进行绕过 7.使用union select查看回显位置 8.我们查看源代码得知,会对or进行过滤,所以使用双写进行注入 9.注意本关中对or和and的过滤,采用双写的方法。其余操作与之前的操作相同 Less-25a:1.输入id=1,执行 2.查看源码,我们发现id处没有进行包裹;还发现本关也对or、and进行了替换 3.使用双写的方式进行绕过。查询列数,有三列 4.使用联合查询语句,判断回显位置为2,3 5.接下来进行注入,得到库 6.其余得到表,字段,字段值操作均相同,参考之前关卡的操作即可。 Less-26:1.输入id=1,执行 2.加上单引号,出现报错,说明可能存在注入漏洞 3.将注释符换位;%00,执行,发现执行成功,说明可能是将注释符进行了转义 4.查看源码,我们发现它将一些字符都进行了替换 5.使用updatexml进行报错注入,得到了当前数据库。注意本关将空格也进行了替换 Less-26a:less26a的闭合方式为(‘’),同样他也是过滤了很多东西,空格,or,and,注释符,我们可以用sql直接爆出他的库?id=100')%0bunion%0bselect%0b1,database(),3%0b||('1')=('1 Less-27:less27在之前关卡的基础上过滤了union和select 我们可以使用重复写的方式,就是在union里边再写一个union,由于他的select过滤了两次,所以,我们需要重复写两次select? id=1'|| (seseselectlectlect%a0 updatexml(1,concat(0x7e,version()),1)) || ' Less-27a:使用""包裹 Less-28:闭合方式为('') Less-28a:闭合方式和28关一样
|
CopyRight 2018-2019 实验室设备网 版权所有 |