[GXYCTF2019]BabySQli

发布时间 2024-01-13 21:30:29作者: 跳河离去的鱼

[GXYCTF2019]BabySQli

5ig63kJ1HKmHIau3ZbFMRZwNPrgXtC1cPFuPszPFNMM

打开是一个登录页面

8tSJZgSV0y39e8cooii7UthQ9RGTwVpGE6aC4G3xX7Y

任意输入账号密码提示wrong user

H5e0_Iw39wZ75DyrUvif58K659H6s04lJqT_PruoEWg

输入admin提示wrong pass,说明有admin的账号

bBnYSWA8weg8C7Th9FGPegYXkW6rJHUzgiDCXBPCVRU

并且在页面源代码中发现一串经过编码后的字符串

iJaZZVkKi2ClQHNrGiCr2y-4J2D8OjMrbe_y_ArULSI

经过base32和base64解码后得到SQL语句

U8jxT2z0rOnWYnXuPlT1gWbpF2UO6Gh7yJyTkMTiLrI

使用万能密码进行尝试,得到do not hack me!的结果

dtGWr_avxQX7uxUD1Zw0uyUYjKZe3DavR1yUIfjyCW4

根据源码提示,我们使用union select进行联合注入

j4EwxtNkcbxp3dpUfJulSUjzXGWPzWBX4U-aGL4UfrA

2列显示列数不对,猜测为3列

fLYIMu_zFXPB-BtK_rGioaxanPYQJ8isB_5GnWypaIs

第一列改为admin时结果不变,说明位置选错了,改为第二列进行尝试

Lt4-aGQkO6_UbkVFhd-H2VjMTXxO6KCLq8Dl4DDpiHw

SGkwjrTp-72GxdjpcrQpLZJ51H04yd-6R1CUlfsvJPE

后续的步骤参考了师傅们的WP才解开,这里是猜测登录逻辑里使用了md5函数对密码进行处理,源码中显示确实使用了md5函数

if($arr[1] == "admin"){
			if(md5($password) == $arr[2]){
				echo $flag;
			}
			else{
				die("wrong pass!");
			}
		}

然后可以用联合查询语句用来生成虚拟的表数据。

在联合查询并不存在的数据时,联合查询就会构造一个虚拟的数据。

YssXRz8au83k_mB187r5uwAFXwk_zy0qGY138D5CejQ

我们通过union select查询就可以构造一行虚拟的数据

mHEpFv7j-qL2R7j9_HMr0vFlb9skqtABcAunIYchuFw

因此可以利用联合查询来创建一行admin账户的虚拟数据,混淆admin用户的密码,将我们自定义的admin用户的密码(123)加进去,就可以登录admin用户了

RIdI6KLOxtG8VlKFC7RLw3mV2wLPGqK997hvaWqZOFk