zoukankan      html  css  js  c++  java
  • XSS BOT编写

    ctf中xss题目常常需要一个管理员小机器点击用户点击的url

    之前没有接触过,刚好最近又有这个需要,所以这次尝试写写小机器人的写法

    环境准备

    首先需要selenium这个python的库

    pip install selenium==2.48.0
    

    它的作用是用来webdriver接口的,简而言之是用来控制浏览器的

    而它支持chrome webdriver、firefox webdirver、PhantomJS等,但是呢前2个就需要有桌面,而我们的docker环境是没有桌面的,所以就只能选择PhantomJS了

    安装PhantomJS

    wget https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-linux-x86_64.tar.bz2 
    tar -xjvf phantomjs-2.1.1-linux-x86_64.tar.bz2 
    ln -s phantomjs-2.1.1-linux-x86_64/bin/phantomjs /usr/local/bin/phantomjs
    

    第一句是从官网下载压缩包,第二句是解压压缩包,第三句是创建link对象

    题目准备

    首先写个简单的环境

    提交xss的页面

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title>XSS game</title>
    </head>
    <body>
        <form method="POST" action="">
            <input name='content' type='text' /><br><br>
            <input type='submit' value="留言"/>
        </form>
        <br>
    <?php
    $db = mysqli_connect("localhost:3306","root","root","xss");
    if (!$db){
        die('Could not connect: ' . mysql_error());
    }
    
    if(isset($_POST['content'])){
        $content = $_POST['content'];
        $sql = "INSERT INTO text(text) VALUES ('".$content."')";
        mysqli_query($db,$sql);
    }
    ?>
    </body>
    </html>
    

    然后写上admin页面,是个登录,登录上去就是admin,会添加flag到cookie

    <?php
    $db = mysqli_connect("localhost:3306","root","root","xss");
    if(!$db){
        die("connect wrong");
    }
    if(isset($_POST['username']) && isset($_POST['password'])){
        $username = addslashes($_POST['username']);
        $password = addslashes($_POST['password']);
        $sql = "SELECT password FROM user WHERE username='$username'";
        $result = mysqli_query($db,$sql);
        $ans = mysqli_fetch_assoc($result);
        if($password === $ans['password']){
            setcookie("flag","NSCTF{1436d30d970974a13d9e2c07808c4931}");
        	header("Location: mi04dmin.php");
    	}
    }
    
    if($_COOKIE['flag'] === 'NSCTF{1436d30d970974a13d9e2c07808c4931}'){
        $sql = "SELECT * FROM text";
        $result = mysqli_query($db,$sql);
        while($ans = mysqli_fetch_assoc($result)){
            echo $ans["text"] . "<br>";
    	$t = $ans["text"];
        	$sql_delete = "DELETE FROM text where text='$t'";
        	$result = mysqli_query($db,$sql_delete);
        }
        die();
    }
    
    ?>
    
    <html>
    <head>
        <meta charset="utf-8">
    </head>
    <body>
        <form action="" method="POST">
            <input type="text" name="username" />
            <input type="password" name="password" />
            <input type="submit" name="submit" value="login" />
        </form>
    </body>
    </html>
    

    这段代码可能比较垃圾,因为没有借鉴过比赛中xss的脚本,凭着自己的感觉写的,隔离性不是太好

    逻辑大致是这样的,因为用户传的内容直接到数据库了,admin的页面功能就是先登录,登录后有个flag的cookie,然后会浏览数据库中的留言,看一条打印一条,然后马上删除

    咱数据库里面是这样的

    最后附上小机器人杂技脚本,这里使用的是py和sh配合,我在py里面直接写while循环如果nc -lvvp port监听端口后,机器人会挂掉(不是这样监听还是会抛出异常),所以我使用sh来循环执行py脚本

    bot.py

    from selenium import webdriver
    import time
    from selenium.webdriver.common.keys import Keys
    
    url = "http://127.0.0.1/mi04dmin.php"
    driver = webdriver.PhantomJS()
    def visit():
    	driver.get(url)
    	driver.find_element_by_name('username').send_keys("admin")
    	driver.find_element_by_name('password').send_keys("mi0sijidou")
    	data = driver.find_element_by_name('submit').click()
    
    	time.sleep(2)
    	driver.quit()
    if __name__ == '__main__':
    	visit()
    
    

    bot.sh

    while true
    do
    python bot.py
    done
    

    最后能够多次弹cookie,xss平台可以收到

    参考资料:

    https://www.cnblogs.com/hackxf/p/10429408.html

    http://f1sh.site/2017/10/12/114/

    https://cloud.tencent.com/developer/article/1043662

  • 相关阅读:
    升级.net core 3.x 后mvc项目调试状态编辑view代码不能实时预览
    C# 方法执行超时处理
    css 带换行的垂直居中
    Golang Web应用 创建docker镜像笔记(win 平台)
    vue element-ui tree 根节点固定子节点懒加载 首次加载根节点并展开
    记一则 Lambda内递归调用方法将集合对象转换成树形结构
    一个简单的异常/条件重试类(C#)
    查找由于页面宽度溢出导致网页出现莫名空白的查看方法
    锯齿下边框效果
    cdh5.7 做完HA后hive 查询出现异常: expected: hdfs://nameservice
  • 原文地址:https://www.cnblogs.com/sijidou/p/13121190.html
Copyright © 2011-2022 走看看