热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

从小白到web渗透工程师——零基础指南(2)sql注入漏洞

hello,各位小伙伴,在看过上一篇文章之后,想必大家伙对于web渗透工程师有了一定的了解,那么,作为一名渗透

hello,各位小伙伴,在看过上一篇文章之后,想必大家伙对于web渗透工程师有了一定的了解,那么,作为一名渗透工程师,挖洞,就是我们的日常工作中必不可少的一部分了。在安全圈中,如果你挖的洞危险系数够高,那说明你越厉害。各种src平台提交的漏洞数量也彰显了一名web渗透工程师的水平。(当然,本人未在src平台上提交过漏洞,属实丢人)。

我原来也有想过,给大家讲解一下html,php,mysql的相关知识,但我发现这种的教学视频网络上一搜一大把,大家可以自信观看,如果我们想达到一名渗透工程师的标准,最差也要会他们的基础。(基础的意思是会编写基本的html网页,会写基础php代码,会创建数据库,并且进行增删改查。联合起来就是会在html网页中嵌入php代码并且连接数据库。)

嫌麻烦的小伙伴也可以找我来要,我这里有现成的资源。

                              

                                                         各位小伙伴想要的话添加我vx

                                                                  

话不多说,进入我们今天的主题,sql注入

他的拓步图如下:

sql注入作为常年位居owasp首位的漏洞,其重要性不言而喻。(注:swasp 开放式web应用安全项目),对于sql注入,也可以这么说,当用户可以和数据库交互的那一刻起,sql注入漏洞就已经存在了。(不明白的小伙伴可以恶补前边的php和mysql基础,意思就是咱们用户的数据会放在数据库中)

sql注入的原理:应用程序把用户输入的数据构造成动态的sql语句来访问数据库时,由于数据库未对参数进行过滤或者说过滤的不完全,就造成了sql注入。恶意用户发现这一漏洞后,就会把精心构造好的恶意sql语句放到web登录界面或者url中,通过骗过服务器来执行恶意的sql命令。

简而言之一句话就是:用户输入的恶意sql语句被sql解释器执行。

sql注入的危害:恶意用户会看到数据库所储存的信息,包括用户名密码,甚至上传木马,来控制整个服务器。

sql的分类:包括数字型,字符型。根据类型不同,还分为盲注,延时注入,显错注入,和延时注入。

当然,知道了sql注入的危害,我们如何防范呢


  1. 使用指定的规则库,对用户输入的数据进行安全验证,验证不通过的直接拒绝。
  2. 在应用与数据库的交汇处使用参数化查询,禁止将用户输入的语句直接与sql查询语句拼接
  3. 严格控制数据库的长度
  4. 对敏感字符如 <* %等进行编码或者转义处理
  5. 对数据的类型应使用int型
  6. 严格限制网站用户的数据库权限
  7. 禁止在网站上显示sql的错误信息

说了这么多,给大家举一个例子,相信大家还不是特别明白,我给大家举个例子,大家就明白了。

攻击思路:首先在得到一个网址的时候,要先看他存不存在变量,存在的话在考虑为字符型还是数字型,如果不存在,在考虑是否为post注入。


注入过程:

1 打开网址发现是一个猫舍的页面

2 点击查看新闻,我们发现出现了猫舍的介绍,并且在上方url处出现id=1,我们怀疑此处有注入点

 3 使用and 1=1 发现页面返回正常

4 把1=1 换成 1=2 页面报错,说明存在sql注入

5 使用order by 函数判断有几列,order by 1 正常回显

6 接着使用order by 2,页面回显正常。

7 接下来我们在用order by 3,发现页面错误,说明此处存在2列。

8 然后我们知道了有两列,就可以使用selcet函数来判断注入点。我们使用联合注入

9 发现在2处存在注入点,接着我们爆库名,发现库名为猫舍。

10 构造函数 id=1 and 1=2 union select 1,table_name from information_schema.tables where table_schema=database() limit 0,1

11 发现表名为admin,查询另一个表名为dirs,由此猜测我们的信息大概率在admin里

12 继续爆列名,构造语句 id=1 and 1=2 union select 1,column_name from information_schema.columns where table_schema=database() and table_name=’admin’ limit 0,1

爆出列名为id

13 继续使用limit。爆出其他列名

我们接连爆出来username和password

14 接下来,我们用group_concat 函数直接把用户名全爆出来

构造函数 id=1 and 1=2 union select 1,group_concat(username) from admin

以上步骤,就是数字型sql注入的方法,相对比较简单,这也是腾讯课堂一个学院的靶场,感觉不错,就拿过来用了。如有侵权请联系我,我会删除。

我感觉我们在实际渗透过程中,用做到手工注入和工具注入相结合。但手工注入的方法一定要理解。

由于本人水平有限,所写文章难免有纰漏之处,所讲不明白之处还请多多包涵。

有什么不明白的地方也可以加我vx,在上文也已经发过了,我在发一遍

                                                                      

本人定尽全力帮你解决问题。好了,下篇文章再见。


推荐阅读
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • Oracle Database 10g许可授予信息及高级功能详解
    本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • Python SQLAlchemy库的使用方法详解
    本文详细介绍了Python中使用SQLAlchemy库的方法。首先对SQLAlchemy进行了简介,包括其定义、适用的数据库类型等。然后讨论了SQLAlchemy提供的两种主要使用模式,即SQL表达式语言和ORM。针对不同的需求,给出了选择哪种模式的建议。最后,介绍了连接数据库的方法,包括创建SQLAlchemy引擎和执行SQL语句的接口。 ... [详细]
  • MySQL中的MVVC多版本并发控制机制的应用及实现
    本文介绍了MySQL中MVCC的应用及实现机制。MVCC是一种提高并发性能的技术,通过对事务内读取的内存进行处理,避免写操作堵塞读操作的并发问题。与其他数据库系统的MVCC实现机制不尽相同,MySQL的MVCC是在undolog中实现的。通过undolog可以找回数据的历史版本,提供给用户读取或在回滚时覆盖数据页上的数据。MySQL的大多数事务型存储引擎都实现了MVCC,但各自的实现机制有所不同。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • PHP设置MySQL字符集的方法及使用mysqli_set_charset函数
    本文介绍了PHP设置MySQL字符集的方法,详细介绍了使用mysqli_set_charset函数来规定与数据库服务器进行数据传送时要使用的字符集。通过示例代码演示了如何设置默认客户端字符集。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • 解决VS写C#项目导入MySQL数据源报错“You have a usable connection already”问题的正确方法
    本文介绍了在VS写C#项目导入MySQL数据源时出现报错“You have a usable connection already”的问题,并给出了正确的解决方法。详细描述了问题的出现情况和报错信息,并提供了解决该问题的步骤和注意事项。 ... [详细]
  • 如何在php中将mysql查询结果赋值给变量
    本文介绍了在php中将mysql查询结果赋值给变量的方法,包括从mysql表中查询count(学号)并赋值给一个变量,以及如何将sql中查询单条结果赋值给php页面的一个变量。同时还讨论了php调用mysql查询结果到变量的方法,并提供了示例代码。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
author-avatar
鄙人fisher_779
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有