3.getshell总结 3.1.Getshell之session
条件:session文件路径已知,且session文件中内容部分可控。
获取session文件路径:
1、session文件的保存路径可以在phpinfo的session.save_path看到。
2、默认路径:
/var/lib/php/sess_PHPSESSID
/var/lib/php/sess_PHPSESSID
/tmp/sess_PHPSESSID
/tmp/sessions/sess_PHPSESSID
session的文件名格式为sess_[phpsessid]。而phpsessid在发送的请求的cookie字段中可以看到。
利用:
1.要包含并利用的话,需要能控制部分sesssion文件的内容。可以先包含进session文件,观察里面的内容,然后根据里面的字段来发现可控的变量,从而利用变量来写入payload,并之后再次包含从而执行php代码。
2.例如现在有一个session.php可控用户会话信息值:
3.可以看到这个session.php文件中的用户会话信息username的值是用户可控制的,那我们就可以传入恶意代码进行攻击利用。
4.将恶意代码传入以后,接下来就要利用文件包含漏洞去包含这个恶意代码。
5.从返回结果来看,我们的payload和恶意代码已经正常解析和执行。
3.2.Getshell之日志 3.2.1.访问日志条件:需要知道服务器日志的存储路径,且日志文件可读。
日志存储默认路径:
1.apache+Linux日志默认路径:/etc/httpd/logs/accesslog或/var/log/httpd/accesslog
2.apache+win2003日志默认路径:D:xamppapachelogsaccess.log、D:xamppapachelogserror.log
3.IIS6.0+win2003默认日志文件:C:WINDOWSsystem32Logfiles
4.IIS7.0+win2003 默认日志文件:%SystemDrive%inetpublogsLogFiles
5.nginx 日志文件:日志文件在用户安装目录logs目录下,假设安装路径为/usr/local/nginx,那日志目录就是在/usr/local/nginx/logs下面
利用:
1.多数情况,web服务器会将请求写入到日志文件中,比如说apache。在用户发起请求时,会将请求写入access.log,当发生错误时将错误写入error.log。默认情况下,日志保存路径在/etc/httpd/logs/下。
2.但如果是直接发起请求,会导致一些符号被编码使得包含无法正确解析。可以使用burp截包后修改。
3.正常的php代码已经写入了 /etc/httpd/logs/access.log。然后包含即可执行代码。
4.但有的时候,log的存放地址会被更改。这个时候可以通过读取相应的配置文件后,再进行包含。
中间件默认配置文件存放路径:
1.apache+linux 默认配置文件
/etc/httpd/conf/httpd.conf或/etc/init.d/httpd
2. IIS6.0+win2003 配置文件
C:/Windows/system32/inetsrv/metabase.xml
3. IIS7.0+WIN 配置文件
C:WindowsSystem32inetsrvconfigapplicationHost.config
3.2.2.SSH log条件:需要知道ssh-log的位置,且可读。
ssh日志默认路径:
1./var/log/auth.log
2./var/log/secure
利用:
1.用ssh连接:
ssh '<?php phpinfo(); ?>'@remotehost
之后会提示输入密码,随便输入就可以。
2.然后利用文件包含,包含日志文件:
3.3.Getshell之environ
条件:
php以cgi方式运行,这样environ才会保持UA头。
environ文件存储位置已知,且有权限访问environ文件。
environ文件默认位置:
proc/self/environ
利用:
1.proc/self/environ中会保存user-agent头。如果在user-agent中插入php代码,则php代码会被写入到environ中。之后再包含它,即可。
2.例如我们现在访问一个网站,使用burpsuite抓包,将恶意代码插入到user-agent中。
3.利用文件包含漏洞去包含proc/self/environ,成功执行php代码。