代码执行的详细过程 (代码执行全过程)

私信我或关注微信号:狮范儿,回复:学习,获取免费学习资源包。

本地文件包含是渗透测试中最常用到的技术之一,在相应的权限下它可以读取一些敏感的配置文件,甚至有些人会使用它来包含精心的构造的文件,来达到留下webshell后门的目的,在一定程度上绕过WAF检测。下面介绍几个通过本地文件包含达到代码执行的方法。

代码整个执行流程,本地代码和可执行文件的区别

1、/proc/self/environ文件

/proc/self/environ文件记录着系统的一些变量,在有权限读取该文件的内容时可以结合本地文件包含达到代码执行的目的。在/proc/self/enviro文件中记录着HTTP_USER_AGENT、HTTP_ACCEPT等信息

代码整个执行流程,本地代码和可执行文件的区别

当访问时使用burpsuite抓包修改HTTP_USER_AGENT为一句话,此时/proc/self/environ会相应的记录下来,此时可以执行命令获得shell,修改HTTP_ACCEPT等几个变量效果相同。

代码整个执行流程,本地代码和可执行文件的区别

2、Apache和SSH等日志文件

Apache的默认日志保存在/var/log/apache2/目录下,当前用户有访问该文件的权限时才会成功getshell,其中有access.log和error.log,正常的访问记录都会在access.log中

代码整个执行流程,本地代码和可执行文件的区别

直接在url地址栏中输入php一句话时<、?等符号会被url编码,因此需要burpsuite来发送防止浏览器默认进行url编码

代码整个执行流程,本地代码和可执行文件的区别

此时shell写入access.log中,反弹shell效果比较明显。

代码整个执行流程,本地代码和可执行文件的区别

使用一句话作为用户名登陆ssh,登陆日志下会记录登陆情况

代码整个执行流程,本地代码和可执行文件的区别

类似的还有ftp登陆日志情况。

3、电子邮件

文件包含电子邮件的日志和以上几种方式getshell相差无几,每个用户在/var/mail目录下以用户名存放着各自的日志记录,这里使用telnet的方式访问靶机,一句话写在/var/mail文件夹下的文件中

代码整个执行流程,本地代码和可执行文件的区别

4、phpinfo+LFI(php5)

环境需要满足的条件为存在本地文件包含并且有phpinfo文件的存在,phpinfo会打印出上传缓存文件的路径,通过缓存的文件达到getshell的目的,每次缓存的文件名是不同的,所以需要通过phpinfo来获取

代码整个执行流程,本地代码和可执行文件的区别

缓存文件被phpinfo页面全部加载之后就会被删除,时间很短暂,phpinfo也会打印出包括请求头等数据,php默认的输出缓冲区大小为4096,可以理解为每次打印4096个字节,直到逐次4096个字节将phpinfo页面加载完毕,我们可以将脏数据写在请求头中,使得打印出缓存文件名时页面还没有加载完毕,这时就可以利用条件竞争来快速的访问到文件在tmp目录下生成shell,使用socket发送http请求可以完成攻击。

题目环境可从github获取https://github.com/vulhub/vulhub/tree/master/php/inclusion

5、LFI+php7崩溃

如果目标不存在phpinfo,也无法获取到缓存的文件名,这里如果能获取到文件名可以利用:

http://ip/index.php?file=php://filter/string.strip_tags=/etc/passwd这样的方式,使php执行过程中出现Segment Fault,这样如果在此同时上传文件,那么临时文件就会被保存在/tmp目录,文件名是随机的6位大小写字符和数字的组合,不会被删除:

index.php

代码整个执行流程,本地代码和可执行文件的区别

dir.php

代码整个执行流程,本地代码和可执行文件的区别

使用dir.php可以将tmp目录下的缓存文件名打印出来,从而包含文件达到获取shell的目的。

代码整个执行流程,本地代码和可执行文件的区别

来源网络,侵权联系删除

私信我或关注微信号:狮范儿,回复:学习,获取免费学习资源包。