20189224《网络攻防实践》第五周学习总结
教材学习内容总结(教材十一,十二章)
Web应用程序安全攻防
web应用体系结构及其安全威胁
web应用体系结构
“瘦”客户端:浏览器,完成数据显示与展示内容的渲染功能;
“胖”服务器:web服务器软件、web应用程序、后端数据库。
通过经典三层架构:表示层、业务逻辑层和数据层来组织和构建。
传输协议HTTP/HTTPS:
1)超文本传输协议HTTP无状态、ASCII码明文传输、运行于众所周知的TCP80端口。特点:简单、流行、易受攻击。
2)加密传输的HTTPS协议,使用ssl/tls隧道技术,采用多种认证协议实现对用户身份的人认证与控制。
web应用安全威胁
1)针对浏览器和终端用户的web浏览安全威胁:以浏览器渗透攻击为核心的网页木马、网站钓鱼。
2)针对传输网络的网络协议安全威胁:针对HTTP明文传输的敏感信息监听、假冒身份攻击、拒绝服务攻击等。
3)系统层安全威胁:远程渗透攻击和本地渗透攻击温威胁。
4)web服务器软件安全威胁:利用漏洞实施渗透攻击、获取敏感信息。
5)web数据安全威胁:窃取、篡改、输入不良信息。
Web应用程序安全攻防技术概述
1)信息收集内容包括:
服务器域名
ip地址和虚拟ip地址
web服务器端口与其他开放服务
web站点类型和版本
web应用程序类型和版本
web服务器和web应用程序中存在的安全漏洞信息
2)方式包括:
手工审查web应用程序结构与源代码
自动下载与镜像web站点页面:lynx、wget、teleportpro、offline explorer等web站点镜像软件。
使用google hacking技术审查与探测web应用程序
web应用程序安全评估与漏洞探测:浏览器插件、免费工具集、商业web应用安全评估系统和漏洞扫描器。
Web服务器平台安全漏洞:
1)数据驱动的远程代码执行安全漏洞
2)服务器功能拓展模块漏洞
3)样本文件安全漏洞
4)源代码泄露
5)资源解析攻击
Web应用程序安全威胁从攻击者技术角度分为如下六类:
1)针对认证机制攻击
2)授权机制攻击
3)客户端攻击
4)命令执行攻击
5)信息暴露
6)逻辑攻击
最流行的的两类Web应用程序安全漏洞及攻击技术:SQL注入和XSS跨站脚本。
攻击Web数据内容:安全敏感数据泄露、网站内容遭到篡改以及不良信息内容上传威胁。
Web应用安全防范措施:
1)web站点网络传输安全防范措施
使用HTTPS
使用加密连接通道、对关键Web服务器设置静态绑定MAC-IP映射。
2)Web站点操作系统及服务安全设防措施
及时的补丁更新
进行远程安全漏洞扫描
关闭不使用的服务
设置强口令字
部署防火墙
数据备份
3)Web应用程序安全设防措施
使用静态HTML
使用具有良好安全声誉及稳定技术支持力量的Web应用软件包
除非必要才使用自主或者外包Web应用程序
使用Web服务器软件提供的日志功能。
4)Web站点数据安全设防措施
提高维护人员数据安全意识
对维护网站数据安全实施日常监测和防护
SQL注入
利用web应用程序的输入验证不完善漏洞,使得web应用程序执行由攻击者所注入的恶意指令和代码,造成敏感信息泄露、权限提升或对系统的未授权访问等危害后果。
SQL注入攻击步骤:
1)发现SQL注入点
2)判断后台数据库类型
3)后台数据库中管理员用户口令字猜解
4)上传ASP后门,得到默认账户权限
5)本地权限提升
6)利用数据库扩展存储过程执行Shell命令
SQL注入攻击工具:
1)Wposion 能在动态web文档中找出SQL注入漏洞
2)wieliekoek.pl 以网站镜像工具生成的输入为输出,对表单页面注入字符串修改
3)SPIKE Proxy 对待注入的字符串进行定制
4)SPI Toolkit工具包
SQL注入攻击防范:
1)使用类型安全的参数编码机制
2)完备检查来自外部的用户输入
3)将动态SQL语句替换为存储过程、预编译SQL或ADO命令对象
4)加强SQL数据库服务器的配置与连接
XSS跨站脚本攻击
与代码注入攻击不同的是,XSS跨站脚本攻击的最终目标不是提供服务的web应用程序,而是使用web应用程序的用户。
XSS攻击技术原理是Web应用程序对用户数输入内容的安全验证与过滤不完善。
攻击方式:绕过客户端安全策略访问敏感信息,窃取或修改会话Cookie、进行客户端渗透攻击获取访问权。
XSS攻击类型
持久性XSS漏洞和非持久性XSS漏洞,利用这两类漏洞的攻击也称为持久性XSS攻击和非持久性XSS攻击。
攻击实例:测试XSS漏洞、显示用户的会话cookie、窃取用户的会话cookie、利用cookie信息假冒其他用户发表与修改帖子、编写实现XSS蠕虫。
XSS攻击防范措施
服务器端:输入验证、输出净化、消除危险的输入点
客户端:提升浏览器的安全设置,如关闭cookie或者设置cookie只读等,也可以采用非主流的安全浏览器。
Web浏览器安全攻防
web浏览器安全威胁
Web浏览器软件安全困境三要素:复杂性、可扩展性、连通性。
Web安全威胁位置
1)传输网络的网络协议安全威胁
2)Web浏览端系统平台的安全威胁
3)Web浏览器软件及插件程序的渗透攻击威胁
4)互联网用户社会工程学攻击威胁
Web浏览端渗透攻击威胁——网页木马
本质核心:利用脚本语言实现对web浏览端软件安全漏洞的渗透攻击,从而向客户端主机中植入恶意程序。
防范:提升操作系统与浏览端平台软件的安全性。
网络钓鱼(phishing)
网络钓鱼是社会工程学在互联网中广泛实施的一种典型攻击方式。
原理:通过大量发送声称来自于银行或其他知名机构的欺骗性垃圾邮件,意图引诱收信人给出个人敏感信息。
普遍技术流程:
1)攻击者扫描网段,寻找存有漏洞的服务器;
2)服务器被攻陷,并被安装一个rootkit或口令保护的后门工具;
3)攻击者从加密的后门工具获得对服务器的访问权,并下载已经构建完毕的钓鱼网站内容,进行一些网站搭建配置与测试工作,使得钓鱼网站上线运行;
4)攻击者下载群发电子邮件工具,并大规模散发垃圾邮件;
5)网页浏览的流量开始到达钓鱼网站,受害者访问并给出个人敏感信息,攻击者通过后台脚本收集这些信息。
视频学习中的问题和解决过程(视频16-20)
数据库评估
- bbqsql
BBQSQL是一个Python编写的盲注工具(blind SQL injection framework),当你检测可疑的注入漏洞时会很有用。同时BBQSQL是一个半自动工具,允许客户自定义参数。BBQSQL最重要的是它不关心数据或数据库,而大多数SQL注入工具是要具体的数据库或语言建立的。
BBQSQL特征:
1)利用SQL盲注漏洞
2)半自动
3)与数据库无关
4)多功能
5)利用两种搜索技术(二元搜索和按频次搜索)
6)并发的HTTP请求
7)配置导入/导出
8)自定义的Hooks
9)高速 - DBPwAudit(数据库用户名密码枚举工具)
功能:通过挂载字典对目标数据库进行密码暴力猜解,目
前支持的数据库包括SQLServer、MySQL、Oracle、DB2
程序位置:/pentest/database/dbpwaudit/
驱动位置:/pentest/database/dbpwaudit/jdbc/
- 破解SQLServer数据库命令实例
./dbpwaudit.sh -s IP -d master -D mssql -U username -P password
- 破解MySQL数据库命令实例
./dbpwaudit.sh -s IP -d mysql -D mysql -U username -P password
- HexorBase
有图形界面工具,它支持MySQL、Oracle、PostgreSQL、SQLite和SQL Server五大主流数据库。它允许安全人员指定用户字典和密码字典,然后实施字典攻击。同时,它还提供对应的图形界面客户端,允许安全人员使用破解出的用户名和密码,对数据库进行远程管理。
- jSQL Injection
jSQL injection是一款由JAVA开法的SQL自动化注入工具,它提供了数据库查询、后台爆破、文件读取、Web shell、SQL Shell、文件上传、暴力枚举、编码、批量注入测试等强大的功能,是一款非常不错的工具,也是渗透测试人员的强大助手。它支持GETPOST注入,同时也可以进行HTTP头注入(这个需要用户自动构建)。对于JSQL,用户可以通过在终端中直接输入jsql,之后会直接调用,jsql对于哪些网站搭建在Nginx上目标站点来说是一款非常不错的测试工具,当然有时候所测试出的结果也不一定正确,建议对于一些SQL注入点还是可以先手工判断,之后通过SQLmap、jsql进行测试,不同工具结果存在差异。将存在注入漏洞的URL贴进来即可进行响应的漏洞利用。
- MDBTools
包括MDB-Export(Export data in an MDB database table to CVS format),以及MDB-Dump,mdb-prasecvs,mdb-sql,mdb-table等子工具,具体环境具体使用。
- oscanner
使用Java语言编写。它可以采用字典方式,枚举Oracle服务的Sid、密码、版本号、账户角色、账户权限、账户哈希值、安全审计信息、密码策略、数据库链等内容。虽然该工具提供了一些最常用的字典值,但在实际使用中,用户还是需要自己额外添加字典值,以提高枚举的成功率。通过枚举获取信息后,就可以根据进行下一步的渗透测试。
- SIDGusser
针对Oracle的SID进行暴力枚举的工具。SID为Oracle连接字符串,通过实例名+用户+密码连接
- sqldict
是一个WIndows程序,运行时会自动调用Kali Linux内置的Wine组件。渗透测试人员只要指定目标IP地址、账户名和密码字典,就可以实施密码爆破。 - tnscmd10g
Oracle服务器通常都配置TNS,用来管理和配置客户端和数据库的连接。每个Oracle服务器都会运行一个TNS监听器进程tnslsnr用来处理客户端和服务器的数据传输。该接口默认工作在TCP 1521端口。由于该监听器在验证请求的身份之前,可以对部分命令进行响应,所以造成一定程度的漏洞。Kali Linux提供的tnscmd10g工具可以利用该漏洞。使用该工具,用户可以获取数据库的版本信息、服务信息、配置信息,甚至可以关闭TNS服务,导致客户端无法连接服务器。
- sqlsus
sqlsus是一个开放源代码的MySQL注入和接管工具,sqlsus使用perl编写,基于命令行界面。sqlsus可以获取数据库结构,注入你自己的SQL语句,从服务器下载文件,爬行web站点可写目录,上传和控制后门,克隆数据库等等。最好用的两点就是注射获取数据速度非常快,另一个最大的特点就是自动搜索可写目录。
1)生成配置文件
2)编辑配置文件
3)修改 our $url_start = "":写入地址
4)启动并且测试sqlsus test.conf
5)获取数据库数据
6)查看全部数据库名字
7)sqlsus > get database - sqlninja
一个专门针对Microsoft SQL Server的sql注入工具
可找到远程SQL服务器的标志和特征(版本、用户执行的查询、用户特权、xp_cmdshell的可用性、身份验证模式等)
“sa”口令的强力攻击
如果找到口令后,就将特权提升到“sa”
如果原始的xp_cmdshell被禁用后,就创建一个定制的xp_cmdshell。
使用纯粹的ASCII GET/POST请求来上载netcat.exe程序(以及其它任何可执行的程序),因此并不需要FTP连接。
为了找到目标网络的防火墙所允许的端口,可以实施针对目标SQL 服务器的TCP/UDP端口扫描。
逃避技术,这是为了使注入式代码“模糊”不清,并且混淆/绕过基于签名的IPS和应用层防火墙。
采用“盲目执行”攻击模式,在其它模式失效时,可以用于发布命令并执行诊断。
在sqlninja生成的SQL代码上,执行的是自动化的URL编码,这使得用户可以更精细地控制漏洞利用的字符串。
如果得到权限为sa,可以结合msf进一步对目标主机进行渗透。
sqlninja的一些常用命令.
./sqlninja
-m <mode> : Required. Available modes are: //加载modle
t/test - test whether the injection is working //测试注入点是否可用
f/fingerprint - fingerprint user, xp_cmdshell and more
b/bruteforce - bruteforce sa account //爆破sa口令用的。。可以-w指定字典,也可以不使用字典,这样sqlninja就会自己穷举
e/escalation - add user to sysadmin server role
x/resurrectxp - try to recreate xp_cmdshell //尝试创建
u/upload - upload a .scr file //上传
s/dirshell - start a direct shell //获得一个目标主机的shell
k/backscan - look for an open outbound port //查找目标主机允许哪些端口外连
r/revshell - start a reverse shell //反弹shell
d/dnstunnel - attempt a dns tunneled shell
c/sqlcmd - issue a 'blind' OS command //执行系统命令,如果为sa的话直接可以net user
m/metasploit - wrapper to Metasploit stagers //配合msf使用
-f <file> : configuration file (default: sqlninja.conf) //配置sqlninja.conf文件
-p <password> : sa password
-w <wordlist> : wordlist to use in bruteforce mode (dictionary methodonly) //字典文件的路径。。爆破sa密码用的
-v : verbose output
-d <mode> : activate debug //调试模式
1 - print each injected command
2 - print each raw HTTP request
3 - print each raw HTTP response
all - all of the above
在-f下面又有以下参数
0 - Database version (2000/2005) //检测当前数据库版本
1 - Database user //当前数据库用户
2 - Database user rights //当前数据库用户权限
3 - Whether xp_cmdshell is working //检查xp_cmdshell是否可以用
4 - Whether mixed or Windows-only authentication is used //是否windows本地系统权限
a - All of the above //以上所有选项
h - Print this menu //显示当前帮助菜单
q - exit //退出
注入连接写到配置文件中
# GET EXAMPLE:
--httprequest_start--
GET http://www.xxx.com/informationdetail.aspx?id=11&titleid=%e3h;__SQL2INJECT__ HTTP/1.1
Host: www.xxxx.com
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)
Accept:*/*
Accept-Language: en-us,en;q=0.7,it;q=0.3
Accept-Charset: ISO-8859-15,utf-8;q=0.7,*;q=0.7
Connection: Keep-alive
--httprequest_end--
#
# POST EXAMPLE: (The Content-Length Header is automatically added by sqlninja!)
# --httprequest_start--
# POST https://www.victim.com/page.asp HTTP/1.0
# Host: www.victim.com
# User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.13) Gecko/20060418 Firefox/1.0.8
# Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*
# Accept-Language: en-us,en;q=0.7,it;q=0.3
# Accept-Charset: ISO-8859-15,utf-8;q=0.7,*;q=0.7
# Content-Type: application/x-www-form-urlencoded
# Cookie: ASPSESSIONID=xxxxxxxxxxxxxxxxxxxx
# Authorization: Basic yyyyyyyyyyyyyyyyyyyyy
# Connection: close
#
# vulnerableparam=aaa';__SQL2INJECT__&otherparam=blah
# --httprequest_end--
#
# HEADER-BASED EXAMPLE:
# --httprequest_start--
# GET http://www.victim.com/page.asp HTTP/1.0
# Host: www.victim.com
# User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.13) Gecko/20060418 Firefox/1.0.8
# Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*
# Accept-Language: en-us,en;q=0.7,it;q=0.3
# Accept-Charset: ISO-8859-15,utf-8;q=0.7,*;q=0.7
# Content-Type: application/x-www-form-urlencoded
# Cookie: VulnCookie=xxx'%3B__SQL2INJECT__
# Connection: close
# --httprequest_end--
#
- sqlmap
sqlmap是一个开源的渗透测试工具,它主要用于自动化地侦测和实施SQL注入攻击以及渗透数据库服务器。Sqlmap配有强大的侦测引擎,适用于高级渗透测试用户,不仅可以获得不同数据库的指纹信息,哈可以从数据库中提取数据,此外还能够处理潜在的文件系统以及通过带外数据连接执行系统命令等。
Usage: python sqlmap [options]
Options:
-h, --help Show basic help message and exit
-hh Show advanced help message and exit
--version Show program's version number and exit
-v VERBOSE Verbosity level: 0-6 (default 1)
Target:
At least one of these options has to be provided to define the
target(s)
-u URL, --url=URL Target URL (e.g. "http://www.site.com/vuln.php?id=1")
-g GOOGLEDORK Process Google dork results as target URLs
Request:
These options can be used to specify how to connect to the target URL
--data=DATA Data string to be sent through POST
--cookie=COOKIE HTTP Cookie header value
--random-agent Use randomly selected HTTP User-Agent header value
--proxy=PROXY Use a proxy to connect to the target URL
--tor Use Tor anonymity network
--check-tor Check to see if Tor is used properly
Injection:
These options can be used to specify which parameters to test for,
provide custom injection payloads and optional tampering scripts
-p TESTPARAMETER Testable parameter(s)
--dbms=DBMS Force back-end DBMS to this value
Detection:
These options can be used to customize the detection phase
--level=LEVEL Level of tests to perform (1-5, default 1)
--risk=RISK Risk of tests to perform (1-3, default 1)
Techniques:
These options can be used to tweak testing of specific SQL injection
techniques
--technique=TECH SQL injection techniques to use (default "BEUSTQ")
Enumeration:
These options can be used to enumerate the back-end database
management system information, structure and data contained in the
tables. Moreover you can run your own SQL statements
-a, --all Retrieve everything
-b, --banner Retrieve DBMS banner
--current-user Retrieve DBMS current user
--current-db Retrieve DBMS current database
--passwords Enumerate DBMS users password hashes
--tables Enumerate DBMS database tables
--columns Enumerate DBMS database table columns
--schema Enumerate DBMS schema
--dump Dump DBMS database table entries
--dump-all Dump all DBMS databases tables entries
-D DB DBMS database to enumerate
-T TBL DBMS database table(s) to enumerate
-C COL DBMS database table column(s) to enumerate
Operating system access:
These options can be used to access the back-end database management
system underlying operating system
--os-shell Prompt for an interactive operating system shell
--os-pwn Prompt for an OOB shell, Meterpreter or VNC
General:
These options can be used to set some general working parameters
--batch Never ask for user input, use the default behaviour
--flush-session Flush session files for current target
Miscellaneous:
--sqlmap-shell Prompt for an interactive sqlmap shell
--wizard Simple wizard interface for beginner users
[!] to see full list of options run with '-hh'
Web应用代理
Web应用程序代理是YARN的一部分。默认情况下,它将作为资源管理器(RM)的一部分运行,但可以配置为以独立模式运行。使用代理的原因是减少对YARN的基于Web的攻击的可能性。