核心内容摘要
国产无线,点亮数字生活新篇章
Sql注入简介Sql 注入攻击是通过将恶意的 Sql 查询或添加语句插入到应用的输入参数中再在后台 Sql 服务器上解析执行进行的攻击它目前黑客对数据库进行攻击的最常用手段之一。
Web 程序三层架构三层架构(3-tier architecture) 通常意义上就是将整个业务应用划分为界面层User Interface layer业务逻辑层Business Logic Layer数据访问层Data access layer。
区分层次的目的即为了“高内聚低耦合”的思想。
在软件体系架构设计中分层式结构是最常见也是最重要的一种结构被应用于众多类型的软件开发。
由数据库驱动的Web应用程序依从三层架构的思想也分为了三层表示层。
业务逻辑层又称领域层数据访问层又称存储层拓扑结构如下图所示在上图中用户访问实验楼主页进行了如下过程在 Web 浏览器中输入www.shiyanlou.com连接到实验楼服务器。
业务逻辑层的 Web 服务器从本地存储中加载index.php脚本并解析。
脚本连接位于数据访问层的DBMS数据库管理系统并执行Sql语句。
数据访问层的数据库管理系统返回Sql语句执行结果给 Web 服务器。
业务逻辑层的 Web 服务器将 Web 页面封装成 HTML 格式发送给表示层的 Web 浏览器。
表示层的 Web 浏览器解析 HTML 文件将内容展示给用户。
在三层架构中所有通信都必须要经过中间层简单地说三层架构是一种线性关系。
Sql 注入漏洞详解
1 Sql 注入产生原因及威胁刚刚讲过当我们访问动态网页时, Web 服务器会向数据访问层发起 Sql 查询请求如果权限验证通过就会执行 Sql 语句。
这种网站内部直接发送的Sql请求一般不会有危险但实际情况是很多时候需要结合用户的输入数据动态构造 Sql 语句如果用户输入的数据被构造成恶意 Sql 代码Web 应用又未对动态构造的 Sql 语句使用的参数进行审查则会带来意想不到的危险。
Sql 注入带来的威胁主要有如下几点猜解后台数据库这是利用最多的方式盗取网站的敏感信息。
绕过认证列如绕过验证登录网站后台。
注入可以借助数据库的存储过程进行提权等操作
2 Sql 注入示例
猜解数据库接下来我们通过一个实例让你更加清楚的理解Sql 注入猜解数据库是如何发生的。
使用DVWA渗透测试平台作为攻击测试的目标先输入 1 查看回显 (URL中ID1说明php页面通过get方法传递参数)那实际上后台执行了什么样的Sql语句呢点击view source查看源代码 其中的SQL查询代码为可以看到实际执行的Sql语句是SELECT first_name, last_name FROM users WHERE user_id 1;我们是通过控制参数Id的值来返回我们需要的信息。
如果我们不按常理出牌比如在输入框中输入1 order by 1#实际执行的Sql语句就会变成:SELECT first_name, last_name FROM users WHERE user_id 1 order by 1#;(按照Mysql语法#后面会被注释掉使用这种方法屏蔽掉后面的单引号避免语法错误)这条语句的意思是查询users表中user_id为1的数据并按第一字段排行。
输入1 order by 1#和1 order by 2#时都返回正常由此可知users表中只有两个字段数据为两列。
接下来我们使用union select联合查询继续获取信息。
union 运算符可以将两个或两个以上 select 语句的查询结果集合合并成一个结果集合显示即执行联合查询。
需要注意在使用 union 查询的时候需要和主查询的列数相同而我们之前已经知道了主查询列数为 2接下来就好办了。
输入1 union select database(),user()#进行查询 database()将会返回当前网站所使用的数据库名字.user()将会返回执行当前查询的用户名.实际执行的Sql语句是 :SELECT first_name, last_name FROM users WHERE user_id 1 union select database(),user()#;通过上图返回信息我们成功获取到当前网站使用数据库为 dvwa .当前执行查询用户名为 rootlocalhost .同理我们再输入1 union select version(),version_compile_os#进行查询version() 获取当前数据库版本.version_compile_os 获取当前操作系统。
实际执行的Sql语句是:SELECT first_name, last_name FROM users WHERE user_id 1 union select version(),version_compile_os#;通过上图返回信息我们又成功获取到当前数据库版本为 :
5.
6.
ubuntu
0.
15.
10.
当前操作系统为 : debian-linux-gnu接下来我们尝试获取 dvwa 数据库中的表名。
information_schema是 mysql 自带的一张表这张数据表保存了 Mysql 服务器所有数据库的信息,如数据库名数据库的表表栏的数据类型与访问权限等。
该数据库拥有一个名为 tables 的数据表该表包含两个字段 table_name 和 table_schema分别记录 DBMS 中的存储的表名和表名所在的数据库。
我们输入1 union select table_name,table_schema from information_schema.tables where table_schema dvwa#进行查询实际执行的Sql语句是SELECT first_name, last_name FROM users WHERE user_id 1 union select table_name,table_schema from information_schema.tables where table_schema dvwa#;通过上图返回信息我们再获取到dvwa 数据库有两个数据表分别是 guestbook 和 users .有些同学肯定还不满足目前获取到的信息那么我们接下来尝试获取重量级的用户名、密码。
由经验我们可以大胆猜测users表的字段为 user 和 password 所以输入1 union select user,password from users#进行查询实际执行的 Sql 语句是SELECT first_name, last_name FROM users WHERE user_id 1 union select user,password from users#;可以看到成功爆出用户名、密码密码采用 md5 进行加密可以到www.cmd
com进行解密。
直此同学们应该已经对 Sql 注入有了一个大概得了解也清楚了 Sql 注入的强大。
3 Sql 注入实例
验证绕过接下来我们再试试另一个利用Sql 漏洞绕过登录验证的实例。
使用事先编写好的页面这是一个普通的登录页面只要输入正确的用户名和密码就能登录成功。
我们先尝试随意输入用户名 123 和密码 123 登录从错误页面中我们无法获取到任何信息。
看看后台代码如何做验证的s实际执行的操作时select * from users where username123 and password123当查询到数据表中存在同时满足 username 和 password 字段时会返回登录成功。
按照第一个实例的思路我们尝试在用户名中输入123 or 11 #, 密码同样输入123 or 11 #为什么能够成功登陆呢因为实际执行的语句是select * from users where username123 or 11 # and password123 or 11 #按照 Mysql 语法# 后面的内容会被忽略所以以上语句等同于实际上密码框里不输入任何东西也一样select * from users where username123 or 11由于判断语句 or 11 恒成立所以结果当然返回真成功登录。
我们再尝试不使用 # 屏蔽单引号采用手动闭合的方式我们尝试在用户名中输入123 or 11, 密码同样输入123 or 11不能少了单引号否则会有语法错误实际执行的 Sql 语句是select * from users where username123 or 11 and password123 or 11看到了吗两个 or 语句使 and 前后两个判断永远恒等于真所以能够成功登录。
还有很多其他 Mysql 语句可以巧妙的绕过验证同学们可以发散自己的思维进行尝试。
判断 Sql 注入点通常情况下可能存在 Sql 注入漏洞的 Url 是类似这种形式 http://xxx.xxx.xxx/abcd.php?idXX对 Sql 注入的判断主要有两个方面判断该带参数的 Url 是否存在 Sql 注入如果存在 Sql 注入那么属于哪种 Sql 注入可能存在 Sql 注入攻击的 ASP/PHP/JSP 动态网页中一个动态网页中可能只有一个参数有时可能有多个参数。
有时是整型参数有时是字符串型参数不能一概而论。
总之只要是带有参数的 动态网页且此网页访问了数据库那么就有可能存在 Sql 注入。
如果程序员没有足够的安全意识没有进行必要的字符过滤存在SQL注入的可能性就非常大。
1 判断是否存在 Sql 注入漏洞最为经典的单引号判断法在参数后面加上单引号,比如:http://xxx/abc.php?id1如果页面返回错误则存在 Sql 注入。
原因是无论字符型还是整型都会因为单引号个数不匹配而报错。
如果未报错不代表不存在 Sql 注入因为有可能页面对单引号做了过滤这时可以使用判断语句进行注入因为此为入门基础课程就不做深入讲解了
2 判断 Sql 注入漏洞的类型通常 Sql 注入漏洞分为 2 种类型数字型字符型其实所有的类型都是根据数据库本身表的类型所产生的在我们创建表的时候会发现其后总有个数据类型的限制而不同的数据库又有不同的数据类型但是无论怎么分常用的查询数据类型总是以数字与字符来区分的所以就会产生注入点为何种类型。
4.
1 数字型判断当输入的参 x 为整型时通常 abc.php 中 Sql 语句类型大致如下select * from 表名 where id x这种类型可以使用经典的and 11和and 12来判断Url 地址中输入http://xxx/abc.php?id x and 11页面依旧运行正常继续进行下一步。
Url 地址中继续输入http://xxx/abc.php?id x and 12页面运行错误则说明此 Sql 注入为数字型注入。
原因如下当输入and 11时后台执行 Sql 语句select * from 表名 where id x and 11没有语法错误且逻辑判断为正确所以返回正常。
当输入and 12时后台执行 Sql 语句select * from 表名 where id x and 12没有语法错误但是逻辑判断为假所以返回错误。
我们再使用假设法如果这是字符型注入的话我们输入以上语句之后应该出现如下情况select * from 表名 where id x and 11 select * from 表名 where id x and 12查询语句将 and 语句全部转换为了字符串并没有进行 and 的逻辑判断所以不会出现以上结果故假设是不成立的。
4.
2 字符型判断当输入的参 x 为字符型时通常 abc.php 中 SQL 语句类型大致如下select * from 表名 where id x这种类型我们同样可以使用and 11和and 12来判断Url 地址中输入http://xxx/abc.php?id x and 11页面运行正常继续进行下一步。
Url 地址中继续输入http://xxx/abc.php?id x and 12页面运行错误则说明此 Sql 注入为字符型注入。
原因如下当输入and 11时后台执行 Sql 语句select * from 表名 where id x and 11语法正确逻辑判断正确所以返回正确。
当输入and 12时后台执行 Sql 语句select * from 表名 where id x and 12语法正确但逻辑判断错误所以返回正确。
同学们同样可以使用假设法来验证。
网络安全的知识多而杂怎么科学合理安排下面给大家
总结了一套适用于网安零基础的学习路线应届生和转行人员都适用学完保底6k就算你底子差如果能趁着网安良好的发展势头不断学习日后跳槽大厂、拿到百万年薪也不是不可能初级网工
网络安全理论知识2天①了解行业相关背景前景确定发展方向。
②学习网络安全相关法律法规。
③网络安全运营的概念。
④等保简介、等保规定、流程和规范。
非常重要
渗透测试基础一周①渗透测试的流程、分类、标准②信息收集技术主动/被动信息搜集、Nmap工具、Google Hacking③漏洞扫描、漏洞利用、原理利用方法、工具MSF、绕过IDS和反病毒侦察④主机攻防演练MS17-
MS08-
MS10-
MS
等
操作系统基础一周①Windows系统常见功能和命令②Kali Linux系统常见功能和命令③操作系统安全系统入侵排查/系统加固基础
计算机网络基础一周①计算机网络基础、协议和架构②网络通信原理、OSI模型、数据转发流程③常见协议解析HTTP、TCP/IP、ARP等④网络攻击技术与网络安全防御技术⑤Web漏洞原理与防御主动/被动攻击、DDOS攻击、CVE漏洞复现
数据库基础操作2天①数据库基础②SQL语言基础③数据库安全加固
Web渗透1周①HTML、CSS和JavaScript简介②OWASP Top10③Web漏洞扫描工具④Web渗透工具Nmap、BurpSuite、SQLMap、其他菜刀、漏扫等恭喜你如果学到这里你基本可以从事一份网络安全相关的工作比如渗透测试、Web 渗透、安全服务、安全分析等岗位如果等保模块学的好还可以从事等保工程师。
薪资区间6k-15k到此为止大概1个月的时间。
你已经成为了一名“脚本小子”。
那么你还想往下探索吗【“脚本小子”成长进阶资源领取】
脚本编程初级/中级/高级在网络安全领域。
是否具备编程能力是“脚本小子”和真正黑客的本质区别。
在实际的渗透测试过程中面对复杂多变的网络环境当常用工具不能满足实际需求的时候往往需要对现有工具进行扩展或者编写符合我们要求的工具、自动化脚本这个时候就需要具备一定的编程能力。
在分秒必争的CTF竞赛中想要高效地使用自制的脚本工具来实现各种目的更是需要拥有编程能力.零基础入门建议选择脚本语言Python/PHP/Go/Java中的一种对常用库进行编程学习 搭建开发环境和选择IDE,PHP环境推荐Wamp和XAMPP IDE强烈推荐Sublime ·Python编程学习学习内容包含语法、正则、文件、 网络、多线程等常用库推荐《Python核心编程》不要看完 ·用Python编写漏洞的exp,然后写一个简单的网络爬虫 ·PHP基本语法学习并书写一个简单的博客系统 熟悉MVC架构并试着学习一个PHP框架或者Python框架 (可选) ·了解Bootstrap的布局或者CSS。
超级网工这部分内容对零基础的同学来说还比较遥远就不展开细说了贴一个大概的路线。
感兴趣的童鞋可以研究一下不懂得地方可以【点这里】加我耗油跟我学习交流一下。
网络安全工程师企业级学习路线如图片过大被平台压缩导致看不清的话可以【点这里】加我耗油发给你大家也可以一起学习交流一下。
一些我自己买的、其他平台白嫖不到的视频教程需要的话可以扫描下方卡片加我耗油发给你都是无偿分享的大家也可以一起学习交流一下。
结语网络安全产业就像一个江湖各色人等聚集。
相对于欧美国家基础扎实懂加密、会防护、能挖洞、擅工程的众多名门正派我国的人才更多的属于旁门左道很多白帽子可能会不服气因此在未来的人才培养和建设上需要调整结构鼓励更多的人去做“正向”的、结合“业务”与“数据”、“自动化”的“体系、建设”才能解人才之渴真正的为社会全面互联网化提供安全保障。
特别声明此教程为纯技术分享本书的目的决不是为那些怀有不良动机的人提供及技术支持也不承担因为技术被滥用所产生的连带责任本书的目的在于最大限度地唤醒大家对网络安全的重视并采取相应的安全措施从而减少由网络安全而带来的经济损失