前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >QWB WriteUp

QWB WriteUp

作者头像
ChaMd5安全团队
发布2019-06-02 21:37:26
1.2K0
发布2019-06-02 21:37:26
举报
文章被收录于专栏:ChaMd5安全团队ChaMd5安全团队

Web

upload

tp框架版本编写的Web应用

该版本的不存在明显的漏洞

对注册的各个字段进行测试

tp框架注入也被过滤了??因该不存在注入漏洞

cookie存在反序列化

修改反序列化为其他图片路径,尝试进行文件读取,失败

http://119.3.203.228:32655/upload/

目录遍历

重新扫描发现备份文件www.tar.gz,查看源代码审计,直接寻找反序列化利用链

register的析构函数, 调用profile的__call函数,进而调用profile的upload_img函数

,对已经上传的图片进行copy

代码语言:javascript
复制

高明的黑客

提取所有输入变量,强行赋值。

包含文件,,如果有输出,则执行成功,即是正确的 shell.

php test.php

then , found 'src/xk0SzyKwfzw.php' in orz.log


随便注

return preg_match("/select|update|delete|drop|insert|where|\./i", $inject);

You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''1''' at line 1

Misc

鲲or鳗orGame

进入游戏界面查看元素发现gb文件

利用bgb调试器调试

使用cheat searcher

找到正确的位置并使用FF冻结

运行调试

得到flag

flag{PS03R49UE576R421RE8}

Crypto

copperstudy

解题思路

代码语言:javascript
复制
#! /usr/bin/env python# -*- coding: utf-8 -*-
from pwn import *
from pwnlib.util.iters import bruteforce
from parse import *
import string
from hashlib import sha256
import time
import random
import os
context.log_level="debug"

def s1(p,t):
    p.recvuntil('[+]Generating challenge 1\n')
    for i in range(200):
        t=t+random.randint(-2,2)
        random.seed(t)
        f=0
        for _ in range(i+1):
            f=random.randint(0,2**64)
        p.sendline(str(f))
        fff=p.recvline()
        print(i+1,fff)
        if '[+]failed' not in fff:
            return
def s2(p):
    p.recvuntil('[+]Generating challenge 2\n')
    for _ in range(200):
        p.recvuntil('[-]')
        n1=int(p.recvline()[:-1])
        p.recvuntil('[-]')
        n2=int(p.recvline()[:-1])
        print(n1,n2)
        r=os.popen('java -jar aa.jar {i} {j}'.format(i=n1,j=n2)).read()
        print(r)
        p.sendline(r.replace('\n',''))
        fff=p.recvline()
        if '[+]failed' not in fff:
            return
def s3(p):
    from randcrack import RandCrack
    rc = RandCrack()
    p.recvuntil('[+]Generating challenge 3\n')
    p.recvuntil('[-]')
    for _ in range(624):
        p.sendline('1')
        print(p.recvuntil('[+]failed:',timeout=1))
        n1=int(p.recvline('[-]',timeout=0.5)[:-1])
        print(_,n1)
        rc.submit(n1)
    p.sendline(str(rc.predict_randrange(0, 4294967295)))
    fff=p.recvline()
    if '[+]failed' not in fff:
        return

if len(sys.argv)==1:
    conn=process(pwn_file)
    pid=conn.pid
else:
    conn=remote("119.3.245.36",23456)
    sss=''
    for i in range(0xff):
        sss+=chr(i)
    def brute_force(c,s):
        return bruteforce(lambda x:sha256(c+x).hexdigest()==s,sss,length=3)
    conn.recvline()
    #data=conn.recvline(keepends=False)
    data=conn.recvline()
    s=parse("[+]hashlib.sha256(skr).hexdigest()={}\n",data)[0]
    data=conn.recvline()
    c=parse("[+]skr[0:5].encode('hex')={}\n",data)[0].decode('hex')
    print(c,s)
    # s=data[7:11]
    conn.sendline((c+brute_force(c,s)).encode('hex'))
    conn.recvuntil('[+]teamtoken:')
    conn.sendline('cb5c28f9d64b8be2e3d80195')
    ggg=int(time.time())
    print(ggg)
    s1(conn,ggg)
    s2(conn)
    s3(conn)
    conn.interactiv
代码语言:javascript
复制
package com.company;
import java.util.Random;

public class Main {
    // implemented after https://docs.oracle.com/javase/7/docs/api/java/util/Random.html
    public static int next(long seed) {
        int bits=32;
        long seed2 = (seed * 0x5DEECE66DL + 0xBL) & ((1L << 48) - 1);
        return (int)(seed2 >>> (48 - bits));
    }

    public static void main(String[] args) {
        long i1 =  Long.parseLong(args[0]);
        long i2 =  Long.parseLong(args[1]);
        long seed =0;
        for (int i = 0; i < 65536; i++) {
            seed = i1 *65536 + i;
            if (next(seed) == i2) {
                break;
            }
        }
        Random random = new Random((seed ^ 0x5DEECE66DL) & ((1L << 48) - 1));
        int o1 = random.nextInt();
        int o2 = random.nextInt();
        System.out.println(o2);
    }
}

randomstudy

解题思路

第一层:常规coppersmith

第二层:Factoring with High Bits Known

第三层:部分私钥暴露攻击https://code.felinae98.cn/ctf/crypto/rsa%E5%A4%A7%E7%A4%BC%E5%8C%85%EF%BC%88%E4%BA%8C%EF%BC%89coppersmith-%E7%9B%B8%E5%85%B3/

第四层:广播攻击

第五层:Related Message Attack

第六层:Boneh and Durfee attack

代码语言:javascript
复制
#! /usr/bin/env python
# -*- coding: utf-8 -*-

from pwn import *
from pwnlib.util.iters import bruteforce
from parse import *
from hashlib import sha256
# context.log_level="debug"

ggg=[]
ggg.append('072ee8ffcc3dcf5fdd473fdd592358a9e736b68d3d800976b3030e0a04cc4a33ef05b16e0baea27adfe032cb34f08fe96344a27dc755ee7ccae9d52cdea801db')
ggg.append('474fd237a45154d5c83a41c1ffb7304352ddfd59ee29abeceb76c3d7ee45d80c9ccd33d5fa8bed2c70ebfc8d83e032715dc333daf0d87782f680bc86f3502c7f')
ggg.append('3116bc82757de96d6d85af8b63b297e37d630babf2841ab9fec235e3915268a6d7aca5d9302058f1f00873f17c39894454c8c46e318ed45a13c91b0c2b798546')
ggg.append('159f938209f793ca728fbfe0f4adc0fbbf7ed325c6dd8e21338e9f917aa3549dfdda0f5b0531a9197b0d4b656c649da2dbc8dc6e89cb71c0e2555ffbf04fd2ef')
ggg.append('2a3373b8117231ca9254fd828256ca891ce497370c1e8c48e9362accdb1ffed4e1037096bc2cd58ac33f4c0c47270e3b9f4469025647f1ed92e90b38d02579ae')
ggg.append('6b3bb0cdc72a7f2ce89902e19db0fb2c0514c76874b2ca4113b86e6dc128d44cc859283db4ca8b0b5d9ee35032aec8cc8bb96e8c11547915fc9ef05aa2d72b28')


conn=remote("119.3.245.36",12345)
sss=''
for i in range(0xff):
    sss+=chr(i)
def brute_force(c,s):
    return bruteforce(lambda x:sha256(c+x).hexdigest()==s,sss,length=3)
conn.recvline()
#data=conn.recvline(keepends=False)
data=conn.recvline()
s=parse("[+]hashlib.sha256(skr).hexdigest()={}\n",data)[0]
data=conn.recvline()
c=parse("[+]skr[0:5].encode('hex')={}\n",data)[0].decode('hex')
print(c,s)
# s=data[7:11]
conn.sendline((c+brute_force(c,s)).encode('hex'))
conn.recvuntil('[+]teamtoken:')
conn.sendline('cb5c28f9d64b8be2e3d80195')
for i in range(len(ggg)):
    conn.recvuntil('[+]Generating challenge '+str(i+1))
    conn.sendline(ggg[i])
conn.interacti

Reverse

解题思路

校验分为两部分。

第一部分校验10字节,校验手段是代码数据正确解码。直接枚举一个字节即可。代码如下:

0x10 0x13242298

part1:1324229810

第二部分校验16字节,校验手段是3des加密,ede模式。直接动态,修改下代码反解。

校验据:507CA9E68709CEFA20D50DCF90BB976C9090F6B07BA6A4E8

密钥:AFSAFCEDYCXCXACNDFKDCQXC

解得的输入:0dcc509a6f75849b

最终flag:13242298100dcc509a6f75849b


webassembly

解题思路

将wasm转成c再编译。

主要校验代码如下:

xtea加密

输入38字节。前32字节经xxtea加密。38字节与硬编码数据校验。

38字节校验数据(hex):959668e7b75517c9ad031ecf6fc5614b0290fd2d22ed0a93307ec9ec8c96b1e065363862627d

前32字节直接xtea解密即可。

代码语言:javascript
复制
  t = '959668e7b75517c9ad031ecf6fc5614b0290fd2d22ed0a93307ec9ec8c96b1e0'
  flag = ''
  for i in range(4):
    ci = xtea.new('\x00'*16)
    m = ci.decrypt(t[16*i:16*(i+1)-8].decode('hex')[::-1]+t[16*(i+1)-8:16*(i+1)].decode('hex')[::-1])
    flag += m[:4][::-1]+m[4:][::-1]
  flag += '65363862627d'.decode('hex')
  print flag

最终flag:flag{1c15908d00762edf4a0dd7ebbabe68bb}


设备固件

解题思路

用户名直接硬编码校验,得到:2cbca

密码校验通过vm进行。

vm指令如下:

直接反解:

得到密码:134bb097e43b292f4431b6cd8db194db

最终flag:flag:flag{2cbca134bb097e43b292f4431b6cd8db194db}


小哥哥谈恋爱吗

两百斤的那种哦

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 ChaMd5安全团队 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Web
  • Misc
  • Crypto
  • Reverse
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档