Loading... # Sqli-labs学习(七) ## Less-21 基于错误的复杂的字符型Cookie注入 这道题属于cookie注入型,不必管账号密码,会回显在结果页面具体信息和base64加密后的cookie 所以我们需要构造好payload还要额外base64加密下再输入cookie ![image-20220629200434091.png](http://xherlock.top/usr/uploads/2022/06/2547918277.png) 先尝试admin'可以看到报错中有括号,说明为单引号+括号型注入 接着就可以像**less-1**里的一样一点点找,从order by开始尝试确定select对象数目,再确定database(),再确定数据库下所有表名(group_concat),再确定数据表下的所有字段名,最后根据字段找所有值 也可以**报错注入**,实战updatexml,可以看到爆出数据库名,payload: ~~~sql -admin') and updatexml(1,concat('~',database(),'~'),1)# ~~~ ![image-20220629202407540.png](http://xherlock.top/usr/uploads/2022/06/3878872874.png) ## Less-22 基于错误的双引号字符型Cookie注入 同Less-21,需要将单引号改为双引号同时去掉括号 但是发现一个有趣的问题,使用base64加密后的字符串有的可能会出现+这个字符 ![image-20220629203551680.png](http://xherlock.top/usr/uploads/2022/06/1233903354.png) 会导致注入cookie后乱码: ![image-20220629203634989.png](http://xherlock.top/usr/uploads/2022/06/1516804311.png) 发现稍加修改使加密后的base64字符串中去掉+就可以了 ![image-20220629203815112.png](http://xherlock.top/usr/uploads/2022/06/1502749714.png) ![image-20220629203917381.png](http://xherlock.top/usr/uploads/2022/06/3868089572.png) 刚才想了下发现其实可以将+这个字符url化一下成%2b就好了(ASCII中+对应43,十六进制就是2b),试验结果正确 ## Less-23 基于错误的过滤注释的GET型 ![image-20220629235214775.png](http://xherlock.top/usr/uploads/2022/06/1915412744.png) 看php代码可以发现来了个过滤注释符的代码,但是还是可以使用单引号闭合 ![image-20220629235402195.png](http://xherlock.top/usr/uploads/2022/06/242796659.png) 使用and语句和1='1'来闭合 ![image-20220629235747653.png](http://xherlock.top/usr/uploads/2022/06/1340282737.png) 爆出数据库下的表名,接下来同Less-1 ## Less-24 二次排序注入(存储型注入) 查看登录login.php和创建新用户login_create.php中代码,都对输入的username、password等进行了转义,来防止sql注入,但是存入数据库会自动去掉用来转义的右斜杠,可以利用注册后取出用户名包含注入来爆库 ![image-20220630203818981.png](http://xherlock.top/usr/uploads/2022/06/1872336769.png) 查看修改密码的php可以看到查询username时并没有转义,存在注入风险,可以利用 ![image-20220630213702421.png](http://xherlock.top/usr/uploads/2022/06/519460385.png) 首先假设我们不知道账号密码,先注册一个http://127.0.0.1/Less-24/logged-in.php,账号为<u>admin'#</u>,密码随意记住 数据库中数据如下: ![image-20220630214907014.png](http://xherlock.top/usr/uploads/2022/06/594793225.png) 接着登录后修改密码为123456 ![image-20220630214823064.png](http://xherlock.top/usr/uploads/2022/06/2132972996.png) 修改后数据库数据如下: ![image-20220630215028311.png](http://xherlock.top/usr/uploads/2022/06/632033512.png) 原理是原来的 ~~~sql UPDATE users SET PASSWORD='$pass' where username='$username' and password='$curr_pass' ~~~ 变为了 ~~~sql UPDATE users SET PASSWORD='$pass' where username='$username'# and password='$curr_pass' ~~~ 密码部分全被注释掉了,修改密码实际上修改了admin的而不是admin'#的,因此我们这时候就可以随意登录admin这个管理员的账号操作了,注入成功 ## Less-25 过滤or和and 这道题目相当于防止你or和and拼接注入,过滤掉所有含有and、or的词语,eg:想要获取查询的列数使用order by,结果or被过滤掉了 ![image-20220630220819836.png](http://xherlock.top/usr/uploads/2022/06/1471308698.png) 绕过方法:oorr,这样去掉中间的or仍然有一个or,报错成功如下 ![image-20220630220936704.png](http://xherlock.top/usr/uploads/2022/06/3551131769.png) 后面以此类推,同Less-1的联合注入,只不过双写or或and ![image-20220630221133576.png](http://xherlock.top/usr/uploads/2022/06/953832955.png) ![image-20220630221338368.png](http://xherlock.top/usr/uploads/2022/06/2250796648.png) 同理还可以使用报错注入联合or【oorr】、and【aandnd】 ## Less-25a 过滤了or和and的盲注 因为是盲注,无法使用报错注入,所以采取联合注入就好了(注意是数字型) 最后修改:2022 年 06 月 30 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 0 如果觉得我的文章对你有用,请随意赞赏