本次练习涵盖如图青蓝色标识的8道题目:
1.Ma Spaghet!
2.Jefff
3.Ugandan Knuckles
4.Ricardo Milos
5.Ah That’s Hawt
6.Ligma
7.Mafia
8.Ok,Boomer
1.Ma Spaghet!
该题用到了innerHTML,如果get参数somebody有值就传参,没有就使用默认的somebody
如图,默认显示somebody ,规则说明:网页要显示警告1337,无须用户操作就要跳出警告,在Chrome浏览器运行
尝试传参,发现somebody被aaaaa代替了
尝试用<script>标签执行alert()函数,发现并没有生效,F12查看发现确实传参进去了
查阅官方文档发现HTML5中<script>标签被认为可能是跨站脚本而被禁用,不过只禁用了<script>一个标签,比如图片底下的<img>仍然可以xss攻击
根据上方图片的<img src=‘x’ onerrer=‘alert(1)’>给somebody传参,成功显示警告1337
https://sandbox.pwnfunction.com/warmups/ma-spaghet.html?somebody=<img src=1 οnerrοr=‘alert(1337)’>
2.Jefff
第二题把jeff传参到eval执行函数中了
闭合字段逃逸出eval()函数并执行alert()函数
https://sandbox.pwnfunction.com/warmups/jefff.html?jeff=aa";alert(1337);"
另一种方法:
https://sandbox.pwnfunction.com/warmups/jefff.html?jeff=aa"-alert(1337);-"
3.Ugandan Knuckles
如图,代码过滤了"<“和”>"
发现页面多了一个框
于是在原本的<input>标签中加入onclick属性来执行alert()函数,发现能成功,但是需要用户手动点击
又考虑到有个onfocus可以按tab执行alert()函数,但仍需要用户操作,于是添加autofocus
最终成功告警
https://sandbox.pwnfunction.com/warmups/da-wey.html?wey=aaa" οnfοcus=alert(1337) autofocus="
4.Ricardo Milos
该代码会2秒后自动提交
默认提交
因为没有过滤,尝试写入xss代码,警告成功
https://sandbox.pwnfunction.com/warmups/ricardo.html?ricardo=javascript:alert(1337)
5.Ah That’s Hawt
改代码过滤了 “[” , “]” , “(” , “)”
既然()不能用,选择将其转换成URL编码来绕过过滤
结果无法执行,F12查看代码发现()并没有被URL解释
思考是不是%的问题,将%也进行URL编码
加入%25后发现出现了%28和%29,但是没有被URL解释
将οnerrοr=location后成功警告
https://sandbox.pwnfunction.com/warmups/thats-hawt.html?markassbrownlee=<img src=1 οnerrοr=location=“javascript:alert%25281337%2529”>
6.Ligma
如图,过滤了大小写和数字
可以去regex101.com网站测试正则过滤
jsfuck可以绕过这个正则,只是编码出来的字符串很长
还需要对其进行URL编码,才能被URL解释
最终成功警告
7.Mafia
如图过滤了"" , " ’ " , ’ " ', " + " , " - " , " ! " , " \ " , " [ " , " ] ",还有alert,但是()没有过滤,所以是可以使用函数的
因为开发者没有考虑到confirm()函数,可以投机取巧弹出警告
当然,也可以利用JavaScript的特性,构造函数后面加()可以直接执行,Function()(),
因为要绕过alert过滤,将其大写并转换回小写让JavaScript识别。
如图,成功告警
https://sandbox.pwnfunction.com/warmups/mafia.html?mafia=Function(/ALERT(1337)/.source.toLowerCase())()
通过查阅官方文档,发现了parseint和tostring两个函数可以进行进制转换
F12在控制台尝试转换进制,发现29进制只显示aler,而30进制显示alert,这是因为16进制是0-F,而30进制刚好对应到字母T
如图,成功告警
https://sandbox.pwnfunction.com/warmups/mafia.html?mafia=eval(8680439…toString(30))(1337)
location.hash可以输出#aaaa字符串如图,可以使用slice来将#去掉
外边再添加一个eval执行语句,成功告警
8.Ok,Boomer
DOMPurify这个过滤很厉害
尝试用<img>,发现有害字符串都被过滤了
尝试<a>,发现也被过滤了
选择不传参,默认页面下发现OK找不到,回到上头发现有一个定时函数提到了OK
如下图F12控制台,发现该函数下的字符串可以被输出
考虑到href可以调用函数,尝试加入JavaScript:alert(1337),发现仍被过滤
通过在github搜索DOMPurify,找到了其变态的过滤机制,发现有白名单
尝试其中一个cid来代替JavaScript,发现成功告警
替换成另一个白名单callto发现也能告警