bAD

打开后提示Do you know vim,遂猜想和VIM有关,于是尝试vim的自动备份文件index.php~,发现不存在该文件,继续猜想是不是swp文件,尝试.index.php.swp,在PHP注释中得到flag。

White

根据题目描述是个留言板,先随便注册一个账号。登陆后发现留言处以及名字处存在XSS,但是仔细分析该程序,发现这个留言并不会给管理员看,而且也没有找到后台,所以暂时不能确定是xss盲打后台,用户名处也可以xss,有可能会被管理员看到,造成盲打。尝试构造xss,发现并没有得到管理员的cookie,遂确定此题并非xss。

在留言的地方尝试输入'测试SQL注入,发现返回了wrong,有可能存在SQL注入,根据前几周的数据库构造,猜测flag应该在flag表中。分析这个程序,留言的时候肯定有insert,而显示自己留言的时候存在select语句,考虑二次注入,在insert的时候把flag插入到留言内容的位置,然后在显示留言执行select的时候将flagselect出来,于是构造payload如下:

1',(select flag from flag limit 0,1))#

测试发现这个payload会返回wrong,1的位置是留言标题,(select flag from flag limit 0,1)的位置是留言内容,还少了用户,于是猜测后面还有个用户,而且标题不能重复,表的构造可能是(title, content, username)
于是继续构造payload(我注册的用户名是111):

2',(select flag from flag limit 0,1),111)#

发现内容是0,也就是flag表的第一条记录的内容是0,继续找第二条内容。

3',(select flag from flag limit 1,1),111)#

留言之后在自己的留言板看到flag

懒得起名字了

打开是个登陆界面,输入啥都会返回wrong,测试了几个SQL注入也都返回wrong,猜测可能没有SQL注入。经过一番查找,在HTTP头中找到提示tips: why not try .bak?,访问index.php.bak,得到源码。

分析源码发现,ps和id都进行了real_escape_string处理,所以不会存在SQL注入漏洞,注释中发现ps的正确值,# $ps should is abc!10O0o,而且$ps经过了md5的处理,所以入手点应该在id处。但是这里有个很矛盾的逻辑,只有id=lightless的时候select才能成功,但是如果id=lightless的时候,却又不能得到flag,只会得到you account is blocked

此时有两个解法,一是进行fuzz,看看有没有特殊的字符可以做到这种事情,二是通过改变大小写来绕过这部分。

绕过之后就可以得到flag。