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的页面
XSS game
然后写上admin页面,是个登录,登录上去就是admin,会添加flag到cookie
";
$t = $ans["text"];
$sql_delete = "DELETE FROM text where text='$t'";
$result = mysqli_query($db,$sql_delete);
}
die();
}
?>
这段代码可能比较垃圾,因为没有借鉴过比赛中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