BUUCTF-Web Comment

dirsearch扫出/.git/目录

遂用航神写的Githacker脚本   https://github.com/wangyihang/githacker

出来的源码并不完整,使用git log --reflog查看下记录

 选择第一条修改的记录的commit执行git reset --hard bfbdf218902476c5c6164beedd8d2fcf593ea23b

这是恢复后的源码

 1 <?php
 2 include "mysql.php";
 3 session_start();
 4 if($_SESSION['login'] != 'yes'){
 5     header("Location: ./login.php");
 6     die();
 7 }
 8 if(isset($_GET['do'])){
 9 switch ($_GET['do'])
10 {
11 case 'write':
12     $category = addslashes($_POST['category']);
13     $title = addslashes($_POST['title']);
14     $content = addslashes($_POST['content']);
15     $sql = "insert into board
16             set category = '$category',
17                 title = '$title',
18                 content = '$content'";
19     $result = mysql_query($sql);
20     header("Location: ./index.php");
21     break;
22 case 'comment':
23     $bo_id = addslashes($_POST['bo_id']);
24     $sql = "select category from board where id='$bo_id'";
25     $result = mysql_query($sql);
26     $num = mysql_num_rows($result);
27     if($num>0){
28     $category = mysql_fetch_array($result)['category'];
29     $content = addslashes($_POST['content']);
30     $sql = "insert into comment
31             set category = '$category',
32                 content = '$content',
33                 bo_id = '$bo_id'";
34     $result = mysql_query($sql);
35     }
36     header("Location: ./comment.php?id=$bo_id");
37     break;
38 default:
39     header("Location: ./index.php");
40 }
41 }
42 else{
43     header("Location: ./index.php");
44 }
45 ?>

回到题目的登录界面,根据提示对密码后三位进行爆破,最后得到密码:zhangwei666

进入留言板,审计源码可以发现存在二次注入。三个参数存入board表的时候进行了转义,但之后查询的时候没有转义,造成二次注入。

 sql语句有多行所以使用/**/过滤

在category

构造payload

 在留言区提交*/#闭合就能显示结果了

 

 利用load_file()读linux文件

www用户对bash进行了操作,查看.bash_history

 发现.DS_Store文件

文件显示不全利用hex()读文件

发现flag文件

查看该文件,解码后得flag

原文地址:https://www.cnblogs.com/remon535/p/12821405.html