网鼎杯-2018-Comment
[网鼎杯 2018]Comment
学习了不少知识…………
进入题目是一个留言板,留言需要登录,先不管……发现存在git泄露,上githack:
write_do:
1 |
|
关键这玩意没啥用啊……学习一波git恢复
gitExtract工具似乎会自动恢复泄露文件……回去试试……
git恢复
https://www.cnblogs.com/iamstudy/articles/wangding_4th_game_web_writeup.html
提交一个文件的时候是分为
git add
、git commit
两步的
当git add
的时候,是把文件临时放在临时区stage中
当git commit
的时候,是把临时区stage的所有内容提交到当前分支
当然这两个在objects目录都会生成一个对象文件,来存储数据。我们使用 git add 命令将内容写入暂存区。 git commit 命令会将暂存区内容添加到本地仓库中
这里要结合GitHacker使用,githacker似乎在获取泄露文件上能够获取到更详尽的信息。
个人体验:GitHacker要在linux上用,需要python的requests……
这里我们通过:git log查看commit history:
git reset回滚未commit版本前已经commit的网页源代码:
1 |
|
类似刚做过的CyberPunk,对输入做了转义,然而$category = mysql_fetch_array($result)['category'];
却直接抓取了结果,也就是说,存在二次注入。
二次注入
1 | $sql = "insert into comment |
这里即是关键的注入点,content会取出未转义的单引号进行闭合
关键是如何构造,这是十分关键的
注意:这里的content是commend的content,不是帖子的content
这里的sql语句是多行的,注释需要用多行注释:
令category=’,content=database(),/,在留言中输入\/#:
1 | $sql = "insert into comment |
这样构造,/**/
注释掉跨行'
,#注释掉后面的单引号,content就会成功被我们劫持,我们在留言后语句就会成功执行完成注入。
但是注库名时发现没有回显,一番尝试……放弃……
load_file读取passwd:
最下面有一个www用户,目录为/home/www,默认shell为bin/bash,由此可以查一下该用户的shell历史:
.bash_history
https://blog.csdn.net/u011479200/article/details/86501366
查下/home/www/下的命令使用历史:
1 | cd /tmp/ |
.DS_Store似乎是一种泄露,在网页上线前删掉了,但是/tmp/html中应该是存在的:
读取发现是乱码且显示不完整,用hex()读取:
1 | Bud1 |
发现flag_8946e1ff1ee3e40f.php,可以着手读flag了……
我寻思哪个目录下的flag文件应该都一样,结果不一样,必须读/var/www/html/下面的……
category=',content=hex(load_file("/var/www/html/flag_8946e1ff1ee3e40f.php")),/*
获得flag……
……tql