virink的web题
wp作者:pcat
最简单的尝试,右键查看源码,师傅友好的指出了:
index.js底部的
也只是no_flag而已。
这里发现服务器是用OpenResty服务器,这里pcat科普下:OpenResty是一个基于Nginx与Lua的高性能Web平台,其内部集成了大量精良的Lua库、第三方模块以及大多数的依赖项。
最后回到最初:
这里存在一个uploads文件夹,访问下
里面左边preview的格式是/preview?f= 尝试文件包含漏洞
由于是使用OpenResty,尝试包含nginx的配置文件,默认是
/etc/nginx/conf.d/default.conf
发现../
被过滤,尝试下双写可以绕过
/preview?f=....//....//....//....//....//....//etc..//nginx..//conf.d..//default.conf
尝试读取preview.lua源码
代码语言:javascript复制/preview?f=....//preview.lua
这里要注意是lua的替换是正则替换。
尝试
/preview?f=....//....//....//....//....//....//....//f1ag_Is_h3re
未果,最后是
/preview?f=....//....//....//....//....//....//....//f1ag_Is_h3re..//flag
Ps:virink师傅开源了项目(代码有修改):
https://github.com/CTFTraining/virink_2019_web_files_share
郁离歌的web题
wp作者:pcat
代码很熟悉,用gopher协议读取数据库内容即可。这里直接提供virink师傅写的一个payload:
ttps://raw.githubusercontent.com/virink/ctflog/master/ctf473831530/yulige_exp.py
政博的windows驱动题
wp作者:天河
感谢这题带我走进了新世界的大门。
首先给了两个附件一个是驱动文件.sys,逻辑不是很复杂。
先看和驱动交互的程序,User为Processor,然后输入key。
打开驱动成功的情况下:
上面的操作是将数据发送给驱动,控制码是0x22a444,用于发送数据
上面的操作是用来接收返回的数据判断发送的key正确与否,控制码是0x226448
剩下的就是看驱动的部分:
以上是主要的处理程序
这部分明显是比较结果,我们追查一下dword_403264从哪来的
这个V5==0x22a444和用来和驱动交互的程序发送数据的部分对上了。
猜测v6是数据debug后,也确实如此。
之后的过程把数据经过
处理后存放的地址放在了dword_403264这个位置,进入函数观察处理过程,是一个base58的过程,对比较字符串进行解码
脚本如下:
代码语言:javascript复制# -*- coding:utf8 -*-
a='KkYWdwLPHPjzTfpEwLa4qQMxGC'
__b58chars = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
__b58base = len(__b58chars)
def b58encode(v):
""" encode v, which is a string of bytes, to base58.
"""
long_value = int(v.encode("hex_codec"), 16)
result = ''
while long_value >= __b58base:
div, mod = divmod(long_value, __b58base)
result = __b58chars[mod] result
long_value = div
result = __b58chars[long_value] result
# Bitcoin does a little leading-zero-compression:
# leading 0-bytes in the input become leading-1s
nPad = 0
for c in v:
if c == '