校赛 白给的shell复现
校赛 白给的shell复现
参考该文章进行学习:https://www.freebuf.com/articles/web/192052.html
考察的是如何进行disable functions的绕过
源码是这样的,但是拿到shell却无法执行任何命令
然后看一下phpinfo
属于是把能用的函数都给禁用了
所以需要我们进行disable_funtions的绕过
这道题主要使用LD_PRELOAD的方法进行绕过
LD_PRELOAD是linux下的一个环境变量,我们可以上传自己的恶意so文件,也就是动态链接库,让该变量指向它,然后再进行库的调用的时候优先调用我们上传的so文件,达到触发并利用的效果
大致的步骤如下
- 生成一个我们的恶意动态链接库文件
- 利用
putenv
设置LD_PRELOAD为我们的恶意动态链接库文件的路径 - 配合php的某个函数去触发我们的恶意动态链接库文件
可以利用gcc的__attribute__ ((constructor))
该函数会在main()函数执行前被执行,利用这个机制即可在执行正常的函数前先执行我们的命令
写一个恶意的c文件,并进行编译
1 |
|
使用该命令进行编译gcc -shared -fPIC t.c -o t.so
没有提供上传的功能,需要自己写一个上传表单进行上传
1 |
|
即可看到恶意的so文件已经上传成功了
然后写一个shell.php的马上传到该目录下
这个php提供三个参数:
- cmd 参数,待执行的系统命令(如 pwd)
- outpath 参数,保存命令执行输出结果的文件路径(如 /tmp/xx),便于在页面上显示,另外关于该参数,你应注意 web 是否有读写权限、web 是否可跨目录访问、文件将被覆盖和删除等几点
- sopath 参数,指定劫持系统函数的共享对象的绝对路径
以同样的方式上传后,即可进行任意命令执行
然后即可getflag
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Em4non's Blog!