前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >wwwxml400com请拨18608765024bee-box之XSS攻击

wwwxml400com请拨18608765024bee-box之XSS攻击

原创
作者头像
用户7106032
修改2020-03-30 10:34:51
6210
修改2020-03-30 10:34:51
举报

一个月前刷了XSSchalleng以为自己已经算是入门了XSS了,但是在我挖洞碰到有可能存在XSS漏洞网页的时候,发现我只能记起来<script>alert('xss')</script>

等等最基本的,绕过方式忘得一干二净,果然一句话说得好!对于我这种没有天赋的人,重复就是记忆它妈!!!

再就是上次刷题的我居然没有总结,那可是我第一篇博客啊!!!现在把它补回来!!!

一共十六个题目,先来分析这个系列的绕过方式:

总结(附xss-challenge)

1.无过滤

2.无弹框无提示说明代码并没有执行,闭合value属性下>即可

3-4.插入点的判断以及参数的观察分析,抓包改参即可

5.前端长度限制,修改前端允许最大长度即可

6.输入内容被HTML实体编码,添加属性点击弹窗

7.过滤双引号(那我就不用双引号!!) onmouseover就可以了

8.制作一个伪链接就可以

9、12、13.IE浏览器特性绕过(编码、反引号)

10.双写绕过

11、14.黑名单正则表达式匹配,利用特殊符号进行绕过(制表符,回车符,换行符、注释符)

15、16编码绕过

通过这些绕过方式再来总结一下攻击方面:

1.属性以及属性名插入恶意代码;(闭合标签)

2.表单和url(POST和GET)

3.抓包修改(隐含)参数

html标签注入

js代码注入

防御思路:

1.可以对用户的输入进行过滤,对输出进行html编码,使危险信息不能运行;

2.根据XSS攻击的目的是获取cookie,即让攻击的地方不能获得cookie,也就是说设置cookie的http only属性;

对于上次遗漏的总结就补充到这里,接下来要练习bee-box的xss系列了,希望自个儿又可以进步进步进步!

XSS - Reflected (GET)

low:

首先随便输入,我这里分别输入haha和xixi,页面返回如图:

其实这题和之前 做的差不多,管他的呢先做吧,总会有收获,然后再搞一个总结

直接输入

就会弹框:

medium因为这里我使用的虚拟机不知道在哪看源代码,不过看不到源代码也挺好,输入上面的语句照样可以弹框,为了实验还是换成弹别的吧(偷看网上的了的)

<script>alert('hello')</script>

说明输入的代码是无效的但是执行了,现在看不到源代码但是可以一个字符一个字符试;

分别输入< / > ( ’ 和alert script,果然

发现最后只有引号被转义,绕过转义只需要讲引号换成/(所以js里是不是 / 和 ’ 的作用是不是相似)

high:

这里应该是被HTML编码了

还有这是GET型的我当成POST的题目做了,不过差不多啦

http://192.168.11.133/bWAPP/xss_get.php?firstname=%3Cscript%3Ealert%28document.cookie%29%3C%2Fscript%3E&lastname=111&form=submit

可以直接在url传参,但是既然给了表格就偷个懒,get型我也就不多说啦

XSS - Reflected (JSON)JSON

与 JS 对象的关系:

(度娘说)很多人搞不清楚 JSON 和 JS 对象的关系,甚至连谁是谁都不清楚。其实,可以这么理解:JSON 是 JS 对象的字符串表示法,它使用文本表示一个 JS 对象的信息,本质是一个字符串。如var obj = {a: ‘Hello’, b: ‘World’}; //这是一个对象,注意键名也是可以使用引号包裹的var json = ‘{“a”: “Hello”, “b”: “World”}’; //这是一个 JSON 字符串,本质是一个字符串这种类型基本就是上述总结的通过闭合标签来进行攻击的:low:我们根据提示搜索movie找到关键的代码

<script>

var JSONResponseString =

'{"movies":[{"response":"111??? Sorry, we don&#039;t have that movie :("}]}';

// var JSONResponse = eval ("(" + JSONResponseString + ")");

var JSONResponse = JSON.parse(JSONResponseString);

document.getElementById("result").innerHTML=JSONResponse.movies[0].response;

</script>

闭合标签输入

"}]}';alert(1);</script>

虽然这样确实是会弹窗,但是如果仅仅这样的话,还是会报错,要想到后面的代码如何运行呢所以还有把标签加上

`"}]}';alert(1);</script><script>

Medium&High:

好像都会HTML实体编码,所以相对安全的;

XSS - Reflected (AJAX/JSON)

copy了度娘的:

Ajax 即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),是指一种创建交互式、快速动态网页应用的网页开发技术,无需重新加载整个网页的情况下,能够更新部分网页的技术。

通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

其中呢,Ajax不需要任何浏览器插件,但需要用户允许JavaScript在浏览器上执行。XMLHttpRequest 用于在后台与服务器交换数据。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

low&medium

我们先随便输入点东西,页面直接执行了因为没有在数据库找到对应内容又回显到页面中,在源代码搜索输入的地方

接下来就是实验了,我们先输入一个图像标签让他可以换行我们看的清楚一点,我准备试着闭合

标签的,但是输入/之后发现什么都没有了,可能被过滤了,所以这里js代码注入不好整,但是可以html标签注入:

<img src=x onerror=alert('hello')>

弹窗成功,会一直异步更新所以一直会弹框刷新页面就可以了

high

JSON.parse() 方法用于将一个 JSON 字符串转换为对象。懂我意思吧····

XSS - Reflected (AJAX/XML)

发现直接输入payload并没有什么作用,要注意的是每次注入都要刷新一下页面,需要实体转码一波

&lt;img src=0 onerror=&quot;alert(1)&quot;&gt;

可以在网站在线编码将代码实体化;

high:

此时呢他又编码了一次,那我们直接输入

<img src=x onerror=alert(1)>

不就完事儿了

XSS - Reflected (Back Button)

low

没有表单,url也传递不了参数,只能抓包看看有什么线索

其实这里提示的很明显了,让我们返回上一次的页面,也就是需要在Referer做手脚,抓包:

构造代码时一定要闭合符号

'"><img src=a.png οnerrοr=alert('hello')>

然后改包就会弹框成功;

中高等级别单引号双引号进行了过滤,hello这里的引号倒是可以用/进行绕过,外面的我拿它没办法了;

XSS - Reflected (Custom Header)

和上一关攻击思路一样,略过

搞了这么多我突然觉得自己又可以了!!

说实话这个上面基本上找到注入点就算是成功了一大步,所以下面我都只记一下思路不截图展示了

XSS - Reflected (Eval)

low级别get类型传参就能实现弹框;

中等级别构造payload时需要用到eval函数

高等级别htmlspecialchars()函数来进行过滤

XSS - Reflected (HREF)

一看到题目就知道应该是闭合标签插入js代码

XSS - Reflected (Login Form)

这里结合了sql注入的思想,但万变不离其宗,在注入成功时可以插入payload使其被执行

ps:剩下几道XSS - Reflected我做了感觉收获不大,基本都是前面的思想,还有六道存储型的XSS:

XSS - Stored (Blog)

第一关没什么过滤,直接上代码就可以;

XSS - Stored (Change Secret)

也是比较简单的注入,注入payload,用户再次登陆的时候就会触发xss

XSS - Stored(Cookies)

据说好像只是对cookies进行篡改的一个关卡

XSS - Stored(SQLiteManager)

低等级和中等级都可以直接构造代码保存即弹框

XSS - Stored (User-Agent)

思路也是一样,抓包修改参数

到这里XSS系列完成了,原谅我后面没截图当我发现这里套路基本是一样的时候我就没有那点新鲜感了。

总结

首先针对这系列的xss题目,低等级别攻击方式只要找到插入点基本可以完成攻击;

1.script、/过滤可以用<img>或者其他标签

2.HTML实体编码

3.找到插入点 >闭合标签>抓包改参

这里中级别高级别防御方式基本上都是利用下面两个函数转义和编码

addslashes()函数 >>>>>>>>>>>>转义

htmlspecialchars()函数>>>>>>>>>>>编码

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档