首页 > 数据库 >【BUUCTF】BabySQli

【BUUCTF】BabySQli

时间:2024-08-06 17:29:21浏览次数:13  
标签:BabySQli arr BUUCTF name admin 用户名 pw md5

【BUUCTF】BabySQli

题目来源

收录于:BUUCTF  GXYCTF2019

题目描述

纯粹的SQL注入题

img

随意传入

name=abc&pw=a

返回 wrong user

img

尝试传入

name=1%27&pw=a

发现闭合方式为',同时给出了一个可疑字符串

img

把这段字符串丢进ChatGPT,告诉我们可能是Base32编码的,对其进行Base32解码得到字符串

c2VsZWN0ICogZnJvbSB1c2VyIHdoZXJlIHVzZXJuYW1lID0gJyRuYW1lJw==

这显然是Base64编码的,再对其解码,得到明文

select * from user where username = '$name'

显然这道题的注入点就是name

题解

在尝试的过程中发现以下字符串被过滤

or  =   (   )  

但是由于对大小写不敏感,or可以使用大小写方式进行绕过

传参:

name=1' Or 1#&pw=a

返回 wrong pass

img

说明name已经注入成功了,但是却要校验pw参数。

由于当name的值为1'时,会返回错误的语句,正常的思路是使用报错注入,得到数据库的信息,但是过滤了(),因此也无法进行数据库的查询。

题目给了源代码,点入search.php的源代码,关键代码如下:

img

其登录逻辑是,根据name到数据库中查找,将查找到的用户名对应的md5加密的密码与传入的pw的md5值进行比较(即存储在数据库中的是密码的md5值),若相等,则登录成功。这与CTF比赛中常见的直接对用户名参数进行注入不同。

当我们传入name=1' Or 1#&pw=a时,查询的结果是用户admin的用户名和密码,即$arr[1]的值是admin$arr[2]的值是admin用户的密码。当pw的md5值与$arr[2]的值相等时,就返回flag。而admin用户的密码是我们无法得到的。

因此我们需要控制$arr[2]的值,将其赋值为pw参数的md5值。当传参如下时:

name=1' union select 1,"admin",3#&pw=a

返回也是 wrong pass,说明用户名存储在表中的第二列,猜测密码存储在第三列,传参:

name=1' union select 1,"admin","0cc175b9c0f1b6a831c399e269772661"#&pw=a

其中0cc175b9c0f1b6a831c399e269772661a的md5值,这样传参,$arr[1]的值为admin$arr[2]的值为0cc175b9c0f1b6a831c399e269772661

总结

本题的登录逻辑与一般的题目不同,源码中的查询语句并非是

select * from user where username = '$name' && password = '$pw'

而是

select * from user where username = '$name'

先选择与用户名匹配的记录,记录中存储的是用户名和密码的md5值,再将查询到的密码的md5值与传入参数的md5值进行比较。

标签:BabySQli,arr,BUUCTF,name,admin,用户名,pw,md5
From: https://www.cnblogs.com/MrSoap/p/18345630

相关文章

  • BUUCTF [SCTF2019]babyre
    记录一下脱花指令的过程扔进ida中观察,发现有红字报错。像这种肯定是花指令用来干扰程序的,将loc_98Fnop掉即可,大概有四处这样的花指令在最后发现一段smc,因为没有解密函数,因此推测直接解密即可按d全部转化为数据,然后再按c转化为代码又出现一个花指令这个nop明显是干扰程序......
  • BUUCTF [RoarCTF2019]polyre
    第一次遇到反控制流平坦化的题目,记录一下。扔进ida,发现main函数中全是while循环,后来上网查阅才发现是控制流平坦化。反控制流平坦化的教程可以参考这个blog:https://www.cnblogs.com/kelec0ka/p/17909008.html使用deflat生成recovered文件:pythondeflat.py-ftest--addr0x4......
  • 【BUUCTF】AreUSerialz
    【BUUCTF】AreUSerialz(反序列化)题目来源收录于:BUUCTF网鼎杯2020青龙组题目描述根据PHP代码进行反序列化<?phpinclude("flag.php");highlight_file(__FILE__);classFileHandler{protected$op;protected$filename;protected$content;......
  • BUUCTF [GXYCTF2019]simple CPP
    buu上的一道z3题,记录一下z3奇怪的用法。首先扔进ida,打开主函数,非常混乱的算法,大概发现两个关键点:这里应该是对flag进行异或得到v6而这里的比较应该就是求解flag的关键,可以看出来有四个未知数,求解也是非常简单,z3直接求解即可:fromz3import*x,y,z,w=BitVecs("xyz......
  • BUUCTF GWCTF2019 re3
    挺有意思的一题,记录一下主要思路为smc解密+AES算法扔进ida后找到主函数:发现函数地址异或,推测为smc,先按d转化为数据,然后直接使用python脚本解密:fromida_bytesimport*ea=0x402219foriinrange(0,224):patch_bytes(ea+i,bytes(ea+i)^0x99)选中按p生成......
  • [GXYCTF2019]BabySQli
    [GXYCTF2019]BabySQli非常神奇的一道题,漏洞利用点在于联合查询时如果数据不存在,则会创建一个临时虚拟用户于是当前尝试username=admin,返回wrongpass则该用户名存在所以username:1'unionselect1,'admin','202cb962ac59075b964b07152d234b70'#(202cb962ac59075b964b07152......
  • BUUCTF-Exec(Web)
    1.相关知识Ping命令ping命令通常用来作为网络可用性的检查。ping命令可以对一个网络地址发送测试数据包,看该网络地址是否有响应并统计响应时间,以此来测试网络的连通情况和测试网络速度。ping命令执行后会显示一系列Replyfrom或者Requesttimeout这样的结果。前者表示与对方......
  • BUUCTF-Include(Web)
    一、Include11.相关知识PHP://filterphp://filter是php中独有的一种协议,它是一种过滤器,可以作为一个中间流来过滤其他的数据流。通常使用该协议来读取或者写入部分数据,且在读取和写入之前对数据进行一些过滤,例如base64编码处理,rot13处理等。具体详见:https://blog.csdn.net......
  • BUUCTF 6.[第五空间2019 决赛]PWN5 1
    拿到题目,先运行一下很明显地出现了一个重复我们的输入,以及一个判断的过程,那么我们可以猜测可能会有栈溢出漏洞,让我们继续保护是开了一个canary以及nx,大概率就不是栈溢出漏洞了,因为canary的存在会使栈溢出非常麻烦。我们看一下IDA存在栈溢出漏洞,但是由于长度不够,我们无法......
  • BUUCTF 5.level0
    很简单的一道栈溢出的题(不知道为啥解题人数却比前几个少)直接开干:看不出啥来保护只开了NX,我们看一下IDA很明了的一道题,直接秒exp:flag:......