前言
关键字:[留言|评论|发帖]
这题真的难。
题解
发帖要登录,
爆破一下,密码是zhangwei666。
1.git泄漏
扫目录扫出/.git,用githack下载一下源码,发现是不全的。
git log
一下,是空的。
git log --reflog
有不少东西
在题目F12 CONSOLE处也能看到提示。
git log --reflog
查看所有分支的所有操作记录(包括已经被删除的commit记录和reset的操作)
git reset --hard commit记录
,还原一下源码
2.SQL注入
addslashes()
一下就联想到昨天做的一道题,利用加的\
来注释后面一个单引号。不过这题似乎没机会
在此测试下
可知
数据库会自动清除反斜杠
所以,如果addslashes()
处理的值往数据库里走一圈,相当于没处理。
category
从数据库中取值,漏洞点就在这
梳理下二次注入逻辑
注意看这句话,这样换行写sql语句,那写入的sql语句也是有换行符存在的,所以用#
来注释后面的内容就不好使了。
第一次,在catagory里输入
1',content=user(),/*
然后在评论content里输入*/#
就会形成入下图所示代码:
第二行的/*
与第三行的*/
遥相呼应,将中间的给注释了,而第三行的#
,将后面的单引号
和逗号
给注释了。
第四行还有一句不能忽略,所以那个逗号也需要加。
于是,注入成立。
这里给了个root权限,也是一个提示
说明flag不在数据库而在本地文件里,需要读取。在数据库中无需root权限。
读取/etc/passwd
1',content=(select load_file('/etc/passwd')),/*
一般设置web的都是www用户,所以找www。
找到www用户目录/home/www/
读下历史命令记录
1',content=(select load_file('/home/www/.bash_history')),/*
.bash_history保存了当前用户使用过的历史命令
删除了/var/www/html/.DS_Store
但是没删/tmp/html/.DS_Store
.DS_Store是Mac OS保存文件夹的自定义属性的隐藏文件,如文件的图标位置或背景色,相当于Windows的desktop.ini。经常会有一些不可见的字符
所以读取下
1',content=(select load_file('/tmp/html/.DS_Store')),/*
用hex()
转换下
1',content=(select hex(load_file('/tmp/html/.DS_Store'))),/*
一大堆16进制,解个码
最后读取下
1',content=(select hex(load_file('/var/www/html/flag_8946e1ff1ee3e40f.php'))),/*
如果不加hex()
,那还得查看源码
游戏结束。