XSS challenges刷题记录(一)

    xiaoxiao2022-07-02  103

    概述:最近写一个web的工具,需要掌握一定的javascript,正好学一下一直想接触的xss。

    链接XSS Challenges

    目录: 0x00 XSS原理 0x01 刷题 #1-10

    在XMMAP环境下搭建一个简易的xss验证将源码放在\xampp\htdocs\XSS目录下 test.html,作为页面使用post方法,提交用户输入的输入。命名为name

    ----test.html----- <html> <head> <title> XSS测试</title> </head> <body> <form action="XSS.php" method="POST"> 请输入名字: <br> <input type="test" name="name" value=""></input> <input type="submit" value="提交"> </input> </body> </html>

    XSS.php作为后台,使用REQUEST接收名为name的表单。并且将内容打印。

    ----XSS.php---- <html> <head> <title>测试结果</title> </head> <body> <?php error_reporting(0); echo $_REQUEST[name]; ?> </body> </html>

    访问 http://127.0.0.1:8080/XSS/test.html

    输入测试数据Migraine,发现xss.php打印了数据,Migraine被存放在了之间。 当我们输入构造的语句的时候,浏览器会将这段语句解析为JavaScript输入

    <script>alert("XSS")</script>

    成功执行了js语句。 因为PHP代码使用REQUEST接收name,所以使用get方法直接构造URL也是可以成功传参的。直接构造URL,效果完全一样。构造如下

    http://127.0.0.1:8080/XSS/XSS.php?name=<script>alert(“XSS”)</script>

    0x01 刷题 XSS Challenges这个网站很有意思,需要你成功构造Xss,弹窗出指定内容,才能进入下一关卡。 Stage #1 第一题是热身题在Search中输入<script>alert(document.domain)</script>即可弹窗 源码分析 我们输入的数据,会被打印在No result for 之后,所以这串代码会被解析为JavaScript

    Stage #2 第二题是标签闭合问题。 输入<script>alert(document.domain);</script>之后并没有执行弹窗因为我们这次写入的代码,并没有被打印出来。 网页仅仅返回一个No Result for your Query

    所以我们查看一下源码,找寻方法

    我们找到了自己输入这个数据的地方,在这里寻找突破。发现我们的数据在value值里面所以我们只需要让这个input标签提前闭合,我们的代码就能被解析。 构造payload"/><script>alert(document.domain)</script>成功弹窗 查看HTML代码,发现此时js代码已经被解析

    Stage #3 第三题先构造脚本,发现没有被解析。本来想法还是我们构造符号让标签闭合,但是网站将我们构造的双引号过滤了。

    通过观察发现,传入参数并不只有search框内的数据p1,还有Choose a contry中的选项p2。所以通过brup抓包改包,传递我们的参数,发现p2并没有任何过滤。成功弹窗。 思考:一开始没想到能用改包来解决问题。因为当时想如果通过改包来进行xss,我们只是在xss自己,毕竟不能让受害者自己改包然后被攻击。如果是作为反射型XSS(这个练习网站的是反射型)改包方法并不能利用,但是作为存储型XSS,通过改包将数据写入网站数据库,还是有很大的可用性的。

    Stage 4# 外观和第三题一模一样,方法当然是不可能一样的。但是还是抓包看一下。发现还有一个隐藏参数,上面还加了hackme,显然需要构造p3来xss。 查看源码,找到p3,type改为text就可以在网页上看到p3了。 直接构造"><script>alert(document.domain)</script>闭合标签成功执行xss

    Stage #5

    这一题外观和第二题一模一样 没有回显,也没有对敏感字符做任何过滤 思路和第二题一样还是闭合input 但是不同点在于,文本框内限制输入长度,无法构造一个完整的JavaScript语句。 直接用brupsuit抓包改包即可

    Stage #6

    第六题也是和第二题一样的模板 唯一区别是增加了对<的过滤,我们构造的脚本会变成乱码。 所以输入script的方式走不通了,经过观察发现 ”没有被过滤。所以value属性可以被闭合。 所以我们需要另一个知识点,不创建新的标签的xss 我们只在input中增加一个属性onmouseover=alert(document.domain)#onmouseover即被鼠标移动到上面就执行脚本" οnmοuseοver=alert(“XSS”) name=“1 所以payload可以写为”onmouseover=alert(document.domain) name="1 当鼠标移动到输入框的时候成功弹窗。

    Stage #7 还是和上一题一模一样的模板,区别过滤了”,导致无法闭合。"onemouseover=alert("XSS") name="1

    但是实际上,还是可以闭合的,在”后面添加一个空格" onmouseover=alert("XSS") name="1居然成功弹窗了,观察源码发现”并没有起到闭合作用,而是onmouseover前面的空格起到了分隔作用。

    Payload>>" onmouseover=alert(document.domain)成功弹窗

    Stage #8 这道题会让我们输入一个URL,然后在下方生成一个链接。主要考察在URL执行脚本语句的格式(如下) javascript:alert(document.domain) 点击跳转,弹窗成功。

    Stage #9 第九题终于回归了之前的模板,但是貌似需要IE浏览器并且是utf-7编码。 直接跳过这一题。跳过方法很简单,直接在页面源码中嵌入我们脚本即可。如下图所示 弹窗,进入下一题。

    Stage #10 这道题没有过滤”,但是却直接把domain给过滤了。。。 查看源代码,可知这里只过滤了domain。#并且只过滤了一次 所以可以构造类似dodomainmain这样的结构,过滤一次生成的结果依旧时domain写入payload" onmouseover=alert(document.dodomainmain) name="1 成功弹窗

    目前就暂时刷到这里,光速入门了一下xss。 弄pwn弄久了之后,玩玩渗透也是非常好的调剂手段。

    最新回复(0)