前言
关键字:[留言|评论|发帖]

这题真的难。
题解
发帖要登录,

爆破一下,密码是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(),那还得查看源码

游戏结束。