include
直接给出了源码并显示了phpinfo,我们随便输一个flag.php
可以看到phpinfo不见了,在输入phpinfo.php,又再次显示了,那么说明包含是可以的,但是当前目录或者没有flag.php,好吧我就卡在这了,…/返回上级目录也看不了flag,才想起来php伪协议
先试试能不能读文件吧
php://filter/read=convert.base64-encode/resource=index.php
成功的读了文件,php伪协议还有一个input:php://input
,可以post写入东西
post一个ls命令,看到了dle345aae.php,cat一下就是flag。不过这里直接在网页上好像没有显示
————————————————————————————————————————————————
Zone
首先是个登录页面
不过输入什么登录都会显示网站正在建设中,burp抓包看到有一个login=0,把他改成1
还是返回网站建设,但是当我们把login.php去掉,就会进入
乱码没关系,点manage看看,得到了如下url
看来是把index和php拼接起来了,试着访问flag.php
构造如下url
可以看出该题过滤了../,我们可以用..././绕过,访问etc/passwd
是nginx,看看nginx配置,访问nginx/nginx.conf
可以看到有个sites-enabled/deafult,看看有啥
看到有
location /online-movies {
alias /movie/;
autoindex on;
}
nginx通过alias设置虚拟目录,而若是root设置则必须位真实目录
上面代码的意思是如果访问/online-movies,则会被当成/movie/,这就是alias的虚拟目录
autoindex on 意思是开启循环遍历目录
当我们访问/online-movies,就会循环遍历/movie/,若当我们访问/online-movies../,则会被当成/moive/../,再加上遍历目录就可以看任意文件了
../应该只在那一个参数中设置了过滤,所以这里仍然可以使用,访问var/www/html/flag.php,自动下载文件
————————————————————————————————————————————————
onethink
hint:用已知漏洞拿shell,百度一下onethink1.0漏洞,搜到一篇文章
点这里
是文件缓存漏洞,具体的做法是注册一个
%0a$a=$_POST[0];#
在注册一个
%0aecho `$a`;#
之后再访问用户页面,输入系统命令0=ls,即可完成getshell,那就来试试
先注册第一个用户,注意注册的时候要把%0a也就是换行符在burp中urldecode,如下图
然后再注册第二个用户,同上理,然后登陆随便哪个账户,同理decode,然后访问用户所在的url
/Runtime/Temp/2bb202459c30a1628513f40ab22fa01a.php
这里的目录一开始我以为是要访问用户名的MD5值,后来解密2bb202459c30a1628513f40ab22fa01a,发现是
应该是这个框架下指定的,访问该页面,post传0=ls
可以看到getshell了,之后就找flag就好了
flag在源代码里
我比较好奇的看了一下2bb202459c30a1628513f40ab22fa01a.php也就是用户组的内容
果然是所有用户的信息
Do you know upload
一进去就是一个上传页面
抓包把content-type改成image/jpeg,成功上传一句话,蚁剑连接
没有flag,看一下config.php
现在就可以根据上面的信息连接数据库了
填config中的信息
在找到flag的命令执行就好了
sqli
进去是登录页面,四处翻翻没东西,看来只能在登陆框注入了,当然admin’ or 1=1#注不了,当我随便尝试是不是宽字节注入时,也就是输入admin%df’ or 1=1#,出现了报错
观察到了sprintf,百度一下sprintf注入,发现在sprintf格式化字符串时如果没做字符类型检测,它就可以吃掉一个\
如果%后面有一个\,就会把\吃掉,就像sprintf("%d",1);一样,sprintf中%后的字符会被当作字符型类型而被吃掉,也就是被当作一个类型进行匹配后面的变量,就像%d匹配一个整数一样
不过这题用%1’ and 1=1#还是会报错,可以用%1$’ and 1=1#,代替,这样就不会报错了
这样就找到注入点了,这题需要盲注,直接sqlmap跑一跑试试,burp抓包
sqlmap -r 1.txt --level3 --dbs
在慢慢跑出flag
我爱sqlmap
phone number(二次注入)
一个登录注册页面,先注册一个
然后登陆
点击check
看来check会把phone放到数据库查询,是一道二次注入的题
但是这里的phone只能填数字并且最高位11位,
只要f12,改长度绕过长度限制,16进制编码绕过数字限制,注册登陆
先试试报错注入,但是这里报错了,尝试union注入
因为phone是数字,所以不需要单引号和#
返回
看来只有一个字段,查表名
再看列名,不过这里好像有字符限制了,那就直接不选择数据库试试
看来这个phone是我们想要的,union select phone from user