zoukankan      html  css  js  c++  java
  • 第二届强网杯wp

    web

    web签到

    利用了md5碰撞

    payload为

    param1 =%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%02%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%d5%5d%83%60%fb%5f%07%fe%a2&&

    $param2 = %4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%00%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%55%5d%83%60%fb%5f%07%fe%a2


     Three hit

    拿到地址看到你是一个登陆页面,就不注册先登录看看是什么,随便用一个账号测试一下,看看能不能登陆

    账号,密码:123 123,(第一次进就是有那么个123用户)发现登陆成功,页面回显4个部分,名字,年龄,相同年龄的用户名,和相同年龄,明显的涉及到SQL语句对数据库进行查询,并且一定是年龄有关系,因为是查询条件是根据年龄数来的,查询相同年龄的那个人。

    开始寻找注入点>>>>>>>找半天发现,查源码发现这个注册页面,就在旁边的大铅笔

    注册一个

    登录没有人和其年龄相同

    说明年龄就是SQL后面的where条件,那就简单了使用 union 达到二次注入,获取信息就可以了 还有名字可做为可显字段就免去盲注了,构造一个

    payload:1 and 1=2 union select (select 1),(select 2) # 来猜猜有多少个字段和可显字段在哪

    但是发现age存在限制,只可以是数字,而且名字做了限制 只允许数字和字母,剔除标点符号

    Age字段就是说只要是数字就OK,常用的套路,用小葵SQL转hex,让payload转化为满足数字类型的16进制就可以bypass了啊,

    现在最大问题就是找到union前面是几个字段因为union前后字段数要相同嘛,还要找到哪个字段可显,没办法 就是这么狗,一个一个试着来(什么单引号、双引号、全都考虑了)

    1 and 1=2 union select (select 1),(select 2),(select 3) #

    转化hex 注册 登录

    1 and 1=2 union select (select 1),(select 2),(select 3),(select 4) #

    转化hex 注册 登录

    发现成了,4个字段就可以了,而且第二个字段是可显的, 就在那个地方查到想要的flag

    Payload:

    查表:

    1 and 1=2 union select  1,(select group_concat(table_name) from information_schema.tables where table_schema=database()),3,4#

    查字段:

    1 and 1=2 union select  1,(select group_concat(column_name) from information_schema.columns where table_name=0x666C6167),3,4#

    查内容:

    1 and 1=2 union select  1,(select flag from flag),3,4#

     

    得到flag


    Share your mind

    这道题利用的是rpo 结合xss

    write界面写入xss语句,目的是让bot访问

    由于botreport页面,所以我们要利用rpobot转向overview

    下面的这个验证码一个脚本

     服务器接受提示

     

    使用js转换目录

    得到flag


    crypto

    streamgame1

    两个文件

    Key文件乱码,没怎么管

    看了下streamgame1.py

    程序思路

    看完之后写了下思路,想通过写个方向算法破解的,想了一下午算了

    直接爆破

    根据len(flag)=25

    flag.startswith(“flag{“) flag.endswith(“}”)

    判断flag应该有20

    在根据mask值,flag应该在 0b1000000000000000000~0b1111111111111111111之间

    然后根据streamgame1.py的算法生成key与原key中的值相匹配就能得出flag,思路是这样

    爆破脚本如下

    import binascii
    def lfsr(R,mask):
        output = (R << 1) & 0xffffff
        i=(R&mask)&0xffffff
        lastbit=0
        while i!=0:
            lastbit^=(i&1)
            i=i>>1
        output^=lastbit
        return (output,lastbit)
    
    for flag in range(0b1000000000000000000,0b1111111111111111111):
        flag=str(bin(flag)).replace('0b','')
        flag = "flag{"+flag+"}"
        R=int(flag[5:-1],2)
        mask=0b1010011000100011100
    
        f=open("key","wb")
        for i in range(12):
            tmp=0
            for j in range(8):
                (R,out)=lfsr(R,mask)
                tmp=(tmp << 1)^out
            f.write(chr(tmp))
        f.close()
    
        fh = open('key', 'rb')
        a = fh.read()
        hexstr = binascii.b2a_hex(a)
    
        print(hexstr)
        if(hexstr=='5538f742c10db2c7ede0243a'):
            print('get flag!')
            print(flag)
            break

    剩下的streamgame2,3,4都是这样一个思路爆破

  • 相关阅读:
    matlab软件-了解
    C# 自定义异常demo
    C#二进制对象copy
    asp.net 缓存依赖demo
    权限管理细粒度问题
    三层架构中的异常处理二
    如何解决复杂问题——结构化思维方式
    入职新公司如何熟悉项目
    专业工具使用与复杂大型项目设计管理
    十分钟学会 tmux
  • 原文地址:https://www.cnblogs.com/Tu9oh0st/p/8672254.html
Copyright © 2011-2022 走看看