继续昨天的练习
Cross-Site Scripting
第一关,反射型xss(get)
震惊,应该出题时间还在出事前。
当然我不会xss,无论是ctf还是自己渗透的时候,遇到的很少很少,所以真就忘了
pikachu靶场第五关——XSS(跨站脚本)之反射型xss(get)(附代码审计)_pikachu 反射型xss-CSDN博客
每日学习新知识,首先此处XSS重要点不在源代码,而是在网页
<p class="xssr_title">Which NBA player do you like?</p>
<form method="get">
<input class="xssr_in" type="text" maxlength="20" name="message" />
<input class="xssr_submit" type="submit" name="submit" value="submit" />
</form>
关于html的知识,链接里很清楚了,这里附上菜鸟教程链接,让大家不懂的也可以去看看菜鸟:
此处<P>和表单<form 都不是最重要的。
表单的作用大家可以看一下,这里get和post的区别就不用多说,相信各位很熟练了。
关键代码:
<input class="xssr_in" type="text" maxlength="20" name="message" />
input详解在这里,class是对于JavaScript里的类名,type=text是表明传入内容格式,类似的还有我们常见的password等,maxlength这里限制传入长度,是为了防止我们传入xss,但是前端嘛,懂得都懂,name=“”就是这个文本框的名字。
那么和我们sql或者命令执行思想类似,我们此处可以利用的就是此处不严谨的过滤,使我们传入的xss命令可以执行。
这是一个简单的xss命令:<script>alert("xss")</script>
执行成功时他会弹出一个弹窗,内容是xss
如果我们传入这么一个命令并尝试像反序列化逃逸那样做,内容就会从原本的这样:
<input class="xssr_in" type="text" maxlength="20" name="message" />
变为:
<input class="xssr_in" type="text" maxlength="50" name=“kobe"><script>alert("xss")</script>” />
这里我用颜色区分后,大家就会发现这句话已经被我们分为了两个命令,且我们传入的内容得到了执行:
<input class="xssr_in" type="text" maxlength="20" name=“kobe">
<script>alert("xss")</script>
" />
这里要引用我看的这篇博客很帅的一句话,可恶被他装到了:
当然,这里补充,有人可能疑惑,传入<script>这么一个标签除了弹窗又有什么用呢
我想,已经不必我多说他的危害了。
第二关,反射性xss(post)
这里看到提示,登录看cookie:
这里有四个cookie:
点击查看发现我们的账号密码都泄露在了cookie里,直接传入xss代码发现可以直接利用,
此处应该科普意义比较大:
Pikachu第二弹:XSS_反射型xss post请求-CSDN博客
注意,反射型都是非持久型,也就是每次点击只触发一次
第三关,存储型xss
输入123,再输入命令,发现直接弹窗,后面每一次点击无论输入与否,都会弹窗,说明这段代码已经传入了服务器。
第四关,DOM型xss
直接输入命令肯定是不行的:
查看源码,发现提示:
按照提示复制进去,点击what do you see,成功弹窗
这里主要是dom的作用,我们的输入被dom捕获了,输入值赋予给了标签<a>中的herf:
这里可见构成了xss漏洞,而dom是前端解析,不会传入服务器 ,直接用他的两个payload就行了。
第五关,DOM型xss-x
随便输入abc后,发现出了两个链接
查看源码:
发现和刚才类似:
这里输入的abc还是到了herf里,但是变成了#
然后这里 点击随风后会直接访问当前目录下的herf文件
再次使用刚才的命令:
发现闭合已经产生了 ,a标签被闭合,onclick执行成功。
第六关,xss盲打
发现成功看到传入数据,而我们回到前端发现并没有,这证明这个界面只有管理员可以查看,
那么我们再试试传入xss命令,发现执行成功。
还是科普意义较大:
Pikachu靶场通关笔记--Cross-Site Scripting (XSS)_pikachu靶场xss后台-CSDN博客
第七关,xss之过滤
发现输入内容被加入'进行解释,但是好像和永恒之蓝犯的错误相似了。
再试试别的符号:<>,.<script>/?;:'"[{]}\|alert被过滤,,.<>/?;:'"[{]}\|,可以通过
试了一下,<script>被过滤掉了,考虑双写或者大小写混写,双写不行,大小写混写通过:
第八关,xss之htmlspecialchars
那就看嘛:PHP htmlspecialchars() 函数
这里我也有点云里雾里,但是明白了<>应该是不可以的,
输入123,发现是老样子:
我们输入原本的命令,发现并不能执行:
那么我们测试一下他的预设字符:&'><"
发现都被转换,只剩下了'
试一下别人wp里的命令:
XXX' onclick='alert(666)'
看源码:<a href="XXX" οnclick="alert(666)" '="">XXX' οnclick='alert(666)'</a>
发现传入后,XXX的' 闭合了herf的赋值,
我们输入'
<a href="" '="">'</a>
输入''
<a href="" ''="">''</a>
输入132'
<a href="123" '="">123'</a>
输入123' 123
<a href="123" 123'="">123' 123</a>
发现很奇妙的产生了闭合且'后的内容变成了一个类
123'132'
<a href="123" 132''="">123'132'</a>
最后验证出来:13'13='1'
<a href="13" 13="1" '="">13'13='1'</a>
就这样我们明白了大致的运行原理
第九关,xss之href输出
还是f12看一下:
<a href="127.0.0.1"> 阁下自己输入的url还请自己点一下吧</a>
<a>标签的 href 属性用于指定超链接目标的 URL。
我们输入<script>的命令
我们右键源码发现:括号什么都被注释过了,
这里我发现别人居然有注释:
那么我们就搜索一下JavaScript协议执行xss: javascript:alert(document.cookie)
第十关,xss之js输出
发现直接执行了 ,且插在了script里,这里我发现有两种做法,一个是直接注释这个句子:
皮卡丘xss之htmlspecialchars、xss之href输出、xss之js输出_htmlspecialchars js调用-CSDN博客
';alert(1);//
另一个也是注释,只不过还闭合了script
Pikachu靶场通关笔记--Cross-Site Scripting (XSS)_pikachu靶场xss后台-CSDN博客
x'</script><script>alert('xss')</script>
今天的XSS环节就到此结束了,我也没想到有十关,我的饭还送错位置了呜呜,送到寝室了,我在实验室啊= =
那么今天就到这里吧,
这里是很菜的WL,希望我的内容能帮到你
我们下一集再见!