# virink的web题

### virink的web题

wp作者：pcat

index.js底部的

/etc/nginx/conf.d/default.conf

/preview?f=....//....//....//....//....//....//etc..//nginx..//conf.d..//default.conf

/preview?f=....//preview.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

ttps://raw.githubusercontent.com/virink/ctflog/master/ctf473831530/yulige_exp.py

### 政博的windows驱动题

wp作者：天河

# -*- 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:
for c in v:
if c == '\0':
else:
break

return (__b58chars[0] * nPad) + result

def b58decode(v):
""" decode v into a string of len bytes
"""

long_value = 0L
for (i, c) in enumerate(v[::-1]):
long_value += __b58chars.find(c) * (__b58base ** i)

result = ''
while long_value >= 256:
div, mod = divmod(long_value, 256)
result = chr(mod) + result
long_value = div
result = chr(long_value) + result

for c in v:
if c == __b58chars[0]:
else:
break

result = chr(0) * nPad + result
return result

if __name__ == "__main__":
print  b58decode("KkYWdwLPHPjzTfpEwLa4qQMxGC")

### 天河的安卓题

wp作者：天河

Encode函数是base64编码修改的，换了个表

"lmnopqrABCDEdefghFGXYZabcijkstuvwxyz012STUVW3456789+/HIJKLMNOPQR"

#include<stdio.h>
#include<string.h>
#include <cstring>
void Reverse(char *s,int n){
for(int i=0,j=n-1;i<j;i++,j--){
char c=s[i];
s[i]=s[j];
s[j]=c;
}
}
static const char *ALPHA_BASE1 = "lmnopqrABCDEdefghFGXYZabcijkstuvwxyz012STUVW3456789+/HIJKLMNOPQR";
char *encode(const char *buf, const long size, char *base64Char) {
char ALPHA_BASE[] = "lmnopqrABCDEdefghFGXYZabcijkstuvwxyz012STUVW3456789+/HIJKLMNOPQR";
int a = 0;
int i = 0;
while (i < size) {
Reverse(ALPHA_BASE,64);
char b0 = buf[i++];
char b1 = (i < size) ? buf[i++] : 0;
char b2 = (i < size) ? buf[i++] : 0;

int int63 = 0x3F; //  00111111
int int255 = 0xFF; // 11111111
base64Char[a++] = ALPHA_BASE[(b0 >> 2) & int63];
base64Char[a++] = ALPHA_BASE[((b0 << 4) | ((b1 & int255) >> 4)) & int63];
base64Char[a++] = ALPHA_BASE[((b1 << 2) | ((b2 & int255) >> 6)) & int63];
base64Char[a++] = ALPHA_BASE[b2 & int63];
}
switch (size % 3) {
case 1:
base64Char[--a] = '=';
case 2:
base64Char[--a] = '=';
}
return base64Char;
}

char *decode(const char *base64Char, const long base64CharSize, char *originChar, long originCharSize) {
//char *ALPHA_BASE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
char ALPHA_BASE[] = "lmnopqrABCDEdefghFGXYZabcijkstuvwxyz012STUVW3456789+/HIJKLMNOPQR";
int toInt[128] = {-1};
/*for (int i = 0; i < 64; i++) {
toInt[ALPHA_BASE[i]] = i;
}*/
int int255 = 0xFF;
int index = 0;
for (int i = 0; i < base64CharSize; i += 4) {
Reverse(ALPHA_BASE,64);
for (int i = 0; i < 64; i++) {
toInt[ALPHA_BASE[i]] = i;
}
int c0 = toInt[base64Char[i]];
int c1 = toInt[base64Char[i + 1]];
originChar[index++] = (((c0 << 2) | (c1 >> 4)) & int255);
if (index >= originCharSize) {
return originChar;
}
int c2 = toInt[base64Char[i + 2]];
originChar[index++] = (((c1 << 4) | (c2 >> 2)) & int255);
if (index >= originCharSize) {
return originChar;
}
int c3 = toInt[base64Char[i + 3]];
originChar[index++] = (((c2 << 6) | c3) & int255);
}
return originChar;
}
int main()
{
char *base="2ifuiJ4F6VMwaY8ATEr7db/=";
char c[256];
decode(base,strlen(base),c,17);
printf("%s",c);
}

Question 5 将会在10月左右开放，敬请期待。

0 条评论

• ### 腾讯UnLua脚本插件正式开源

? UnLua是Unreal Engine 4下特性丰富且高度优化的Lua脚本插件。它遵循Unreal Engine 4的编程模式，简单易上手，UE4程序员更...

• ### 聊一聊字符串内部化

字符串作为一种不可变值类型，在多数的语言里，其底层基本都是个只读的字节数组：一旦被创建，则不可被改写。正是因为其只读特性，如果有大量相同的字符串需要处理，那么在...

• ### 25-ESP8266 SDK开发基础入门篇--控制WIFI连接路由器

https://www.cnblogs.com/yangfengwu/p/11324411.html

• ### lua脚本操作redis数据库

为什么要用lua脚本操作redis数据库? 1.减少开销–减少向redis服务器的请求次数 2.原子操作–redis将lua脚本作为一个原子执行 3.可复...

• ### Redis客户端常见异常分析

在Redis客户端的使用过程中，无论是客户端使用不当或者Redis服务端出现问题，客户端会反应出一些异常，下面分析一下Jedis使用过程中常见的异常情况：

• ### openresty+lua+kafka方案与Tomcat接口并发度对比分析

之前的项目基于nginx反向代理后转发到Tomcat的API接口进行业务处理，然后将json数据打入kafka中，但是随着业务的扩大，访问量越来越大，并发数...

• ### 如何保证最少消费一次redis的list队列数据

简使用pop，不能保证最少消费一次，比如pop超时可能中途丢失，或者消费者处理过程中异常而未能处理完。

• ### redis原子性读写操作之LUA脚本和watch机制

最近在开发电商平台的子系统——储值卡系统，系统核心业务涉及到金额消费以及库存控制，由于redis事务并不能保证操作的原子性，因此为了解决建立在内存上高并发情况下...

• ### 问题小记之 使用 nil 索引 Lua table

使用 Lua 已经不少时间了,遇到 “table index is nil” 的错误也很多次了,久而久之自己便形成了 Lua table 索引不能为 nil 的...

• ### xmake v2.2.8 发布, 新版vs工程生成插件

这个版本提供了全新的vs工程生成插件（非常感谢@OpportunityLiu的贡献），跟之前的生成vs的插件处理模式上有很大的不同，原先生成的vs工程是把所有源...