Week4 Writeup
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。
CRLF-Header:CRLF-Value
%0d%0aCRLF-Header:CRLF-Value