XSS BOT编写

Mi0发布

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,然后会浏览数据库中的留言,看一条打印一条,然后马上删除

咱数据库里面是这样的

1564754569332

1564754582293

最后附上小机器人杂技脚本,这里使用的是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平台可以收到

1564754932733

参考资料:

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

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

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

分类: CTF练习web安全

0 条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注