我正在尝试分离XSS-payloads以使用不同的方法分析它们的结构。 示例有效负载如下所示:
<picture><source srcset="x"><img onerror="***payload***"></picture>
现在我需要分开不同的部分以获得以下输出:
图片来源srcset x img onerror *** payload ***
我的问题是,有时负载包含文本内容,有时还包含另一个HTML元素(如示例中所示)作为内容。如果我只是追加“上层”HTML元素的内容,输出就会出错,因为我会再次遍历该元素。
我的代码看起来像这样:
for x in self.normalized_payloads:
tmp = []
soup = BeautifulSoup(x, 'html.parser')
elements = soup.find_all()
for y in elements:
tmp.append(y.name)
for u in y.attrs.keys():
tmp.append(u)
tmp.append(y.attrs[u])
seperated_payloads.append(tmp)
如何区分文本和另一个HTML元素作为HTML元素的内容?您是否有其他方法可以获得此输出,而无需迭代有效负载的每个HTML元素?
答案 0 :(得分:0)
所以,事实证明我提出了一个有效的解决方案:
if len(BeautifulSoup(y.decode_contents(formatter="html"),'html.parser').find_all()) == 0 and y.decode_contents(formatter="html") != "":
tmp.append(y.decode_contents(formatter="html"))
此代码检查子元素是否是可解析的HTML元素或仅是文本。