码迷,mamicode.com
首页 > 数据库 > 详细

一种特殊的sql注入-个人理解

时间:2020-01-18 21:14:00      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:转换   前言   php   int   就会   数据   结果   变形   直接   

前言

工作中遇到某公司的web系统,其中的查询功能是存在注入的,但是却不能用sqlmap自动化的扫出;

post数据包参数格式:

  • &q%40test.testo%40lkt%40string=&q%40test.test_test%40let%40int=
  • &q%40test.testo%40eqt%40string=test&q%40test.test%40lkt%40string=&test=&page=1&rows=1
  • &%24Q_test_test=&%24Q_test_test=&xxx=&order=+ASC+&_query_code=0&pageMethod=
  • %24Q_test=&orderCol=&order=+ASC+&query_code=0&test=test&rowCount=10000&currentPage=21

该系统查询的参数类似上面的格式:

  • 这里面每个参数都是不存在注入的,虽然可控

但是系统是存在注入的,已经存在的参数是不能注入的,我们可以添加参数进行注入,例如:

  • .php?id=1 我们在测试的时候会进行变形 .php?id=1 and 1=1 或者.php?id=1 and 1=2 或者 .php?id=1 or 1=1
  • 现在重新理解一下这几个测试语句的意思,我们知道添加and 1=1和1=2如果页面输出不一样,就说明极大的可能存在注入,这时候我们通常会直接进行查询类的注入union
  • 换一个思路想,条件为真,页面不变,条件为假,页面无数据,如果我们进行这样的判断 .php?id=1 and [假设我们不知道这里的参数,但是a-e中的一个]=[a,b,c,d,e] ,结果必然是只有一次尝试页面是正常的,我们就可以判断出是哪个字母
  • 为什么这里可以用sqlmap扫出来,而我遇到的不行,我们遇到的大部分查询都是类似这样的,select * from xxx where xxx=xxx and xxx=xxx , 其中的参数的and是不会自动添加的,sqlmap就会对参数进行一一的尝试,类似=1 and 1=1 , 的过程,但是上面的数据包格式中貌似是会自动添加参数的,而且还有一定的格式
  • 我使用第一个举例子:
  • 转换为sql语句: select * from xxx where test.test=test(字符串类型) and test.test_test=1(整数型)
  • 如果添加payload为:test=1 and 1=1 一定会报错(我的理解就是系统会找&和=符号进行分割,遇到&添加and,遇到=认为前面为参数,后面参数值)
  • 所以要添加,%40int=&q%40let%401=1 %40int=&q%40let%401=2
  • 变形后就是test=1 and 1=1 test=1 and 1=2 到这里就可以是用盲注了;
  • 至于添加or怎么添加:%40int=&q%40let%401%3d1%20or%201=1 -》 test=1 and 1=1 or 1=1

一种特殊的sql注入-个人理解

标签:转换   前言   php   int   就会   数据   结果   变形   直接   

原文地址:https://www.cnblogs.com/p0laris/p/12210054.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!