• 线上靶机prompt.ml


    使用的靶场网址:http://prompt.ml/0

    0x0

    在这里插入图片描述
    这关没有任何的过滤,就直接闭合输出就行,但是后面多余的引号和尖括号需要注释掉。

    a">

    在这里插入图片描述

    0x1

    在这里插入图片描述
    这一关过滤掉了以尖括号包裹着的所有字符,所以script这种标签就用不了了。所以可以尝试使用img标签。

    在这里插入图片描述

    0x2

    在这里插入图片描述
    这一关将这**“[”“(”**两个符号进行了过滤,所以就没有办法使用,可以使用反引号来代替括号。

    在这里插入图片描述

    0x3

    在这里插入图片描述
    这一关是将注释符号给过滤成了下划线,同样也是一个小技巧,也可以使用“–!>”来进行注释。

    –!>

    在这里插入图片描述

    0x4

    在这里插入图片描述
    这一关必须以**http://prompt.ml/**为开头才可以进行输入,可以使用@符号来连接外部文档来进行绕过。注意的是,可能在写的过程中,/可能不会被识别,换成编码的形式就可以了。

    http://prompt.ml%2f@localhost/test.js

    在这里插入图片描述
    test.js文件里面就写一个prompt(1)就可以了。

    0x5

    在这里插入图片描述
    这一关也是将>和以on开头,=结尾的字符给换成了=号,所以利用换行就可以了。

    1"type="image"src=1 onerror
    =“prompt(1)”

    在这里插入图片描述

    0x6

    在这里插入图片描述
    这个例子说了,要输入一个形状向** http://httpbin.org/post#{“name”:“Matt”}的语句,并且这个#号将这一串分成了一个数组。然后这个fromURL取这个数组的第0位,然后formdata取数组的第一位;也就是说,如果输入的是 http://httpbin.org/post#{“name”:“Matt”}那么数组0就是: http://httpbin.org/post**,数组1就是:{“name”:“Matt”}。然后创建了from元素,并且将URL给了fronaction,模式写为post;然后对fromData做了循环,然后创建了一个i,并且让input.name=i,这个i就是fromdata对象里的key值,也就是name,然后给value赋值为fromData的值,也就是Matt。以上这些步骤就相当于创建了一个from表单。然后就是查看你一个表单,并且使用action,也就是如果你这个表单里不包含script或者data的话,就输出,如果有的话,就返回下面那一句话。
    但是正产情况下使用javascript:prompt(1)的时候,他是可以输出的,但是在这里,他没有办法绕过那个判断;可以使用action来盖住刚刚那个action,也就是如果action的值相同的时候,后一个会把前一个给覆盖掉。所以这一关就是使用后一个action将前一个action的特性给覆盖掉。

    javascript:prompt(1)#{“action”:“aaaaa”}

    在这里插入图片描述

    0x7

    在这里插入图片描述
    这一个也给你举例了一个输出的格式形如dog#cat#bird#mouse…,并且这个对每一个p标签都进行了一个字符限制,不可以超过12个字符,这样就可以使用注释的方式,将多余的内容给注释掉,剩下的就可以拼凑成想要的样子。

    "><\script>/#/prompt(/#/1)/#/

    在这里插入图片描述
    这里就相当于第一个注释符注释的是

    “>


    第二个注释的内容是:

    ”>


    第三个注释的内容是:

    ">


    最后拼成的就是:">

    0x8

    在这里插入图片描述
    这里的\r\n的意思是换到下一行的时候从开头开始输入。
    然后这一关,将这个给过滤掉为空了。并且把
    <,/ 和‘"’ 给过滤掉了。这就用到了js的一个只是点:直接输入u2028和u2029

    javascript字符串允许直接输入字符,以及字符的转义形式。但是javascript中有5个字符规定了不能在字符串中直接使用,只能使用他们的转义形式

    1. u005c:反斜杠
    2. u000D:回车
    3. u0028:行分隔符
    4. u0029:段分隔符
    5. u000A:换行符

    所以这个输入就是这样式的:
    在这里插入图片描述
    将下面的复制,粘贴到答案上就可以了。
    在这里插入图片描述

    0x9

    在这里插入图片描述
    这一关是将以<开头并且后面接字母的都变成了<后面接一个下划线,并且字母全部变为大写。那就不让<后面接字母,可以使用ſ转换为s。如果出不来,换个浏览器试试。

    <ſcript src=“http://127.0.0.1/test.js”>

    在这里插入图片描述

    0xA

    在这里插入图片描述
    这一关将prompt过滤成了alert,并配还把单引号给注释掉了,这就给我们使用了一个方便,也就是我们可以使用单引号将prompt给分开,反正单引号也会被省略。

    pro’mpt(1)
    在这里插入图片描述

    0xB

    在这里插入图片描述
    这一关使用了一个小技巧,

    "(prompt(1))in"使用这个可以进行弹窗。

    在这里插入图片描述

    0xC

    在这里插入图片描述
    这一关也是将单引号忽略了,然后将prompt转为了alert,但是不同的是,这是先过滤,在替换;这样就不可以了。
    这里就可以使用一种函数,就是相当于将英文转换为十进制树数

    eval(630038579…toString(30))(1)

    在这里插入图片描述

    parselnt:解析一个字符串并返回指定基数的十进制整数,并且进制数的范围是2-26.

    但是我们在转换prompt的时候,在26之前是没有数的,显示的都是NAN,但是在26之后就有值了;这是因为他转换是由0-9+a-z组成的,而p是字母的第16位,然后加上前面的10个字符,就等于26,所以才从第26位开始,
    这里可能不好理解,就好比十六进制,他的最大的字母F,f拍在第6位,加上前面那个就是16进制
    为什么这里要写30进制,因为prompt最后一个字母是t,排在字母表的第20位置,加上前面的10个数就是30;如果使用小于30的数,就不包括了t,这样就不完整了。

    0xF

    在这里插入图片描述
    这一关同样是给了输出格式,并且限制了p标签里的字符输入最大不超过15.并且他过滤掉了上一个使用的注释符号,但是可以使用注释方式,但是我使用和第7个处理方式一样的方法的时候,他没有成功,各中尝试之后,还是不成功,:

    ">

    但是加一个就可以了,因为在html中有三个命名空间,分别是html、svg和MathML,这三个空间可以进行转换,因为这句话在执行刚刚那个语句的时候,他是只有第一个注释符起了作用,其余的写在script标签里面的注释符是没有生效的,切换到svg空间是因为svg的语法规范是遵循XML语句的,而XML中是支持