NCTF SQL注入1

地址:http://chinalover.sinaapp.com/index.php

NCTF SQL注入1_第1张图片

源码:



Secure Web Login


'.$sql;
$query = mysql_fetch_array(mysql_query($sql));
if($query[user]=="admin") {
echo "

Logged in! flag:********************

"; } if($query[user] != "admin") { echo("

You are not admin!

"); } } echo $query[user]; ?>
Source

关键:
在这里插入图片描述
以post方式提交user和pass
在这里插入图片描述

当user=admin&pass=pass时,SQL语句如下:select user from cft where (user='admin') and (pw='pass'),查询当user=admin和pw=pass时的user,user和pw在数据库中
【从下面的图回看,只知道user=admin,不知道pw的值时,where条件满足不了,这条SQL查询是查不到的,意味着下面的 q u e r y = . . . 为 空 , i f 无 法 满 足 】 补 充 : 关 于 query =...为空,if无法满足】 补充:关于 query=...ifquery : https://zhidao.baidu.com/question/983573447239383259.html
NCTF SQL注入1_第2张图片

当执行的SQL查询的user为admin时,显示flag,有个关键在SQL查询能不能执行,看回上面第二幅图

解题思路:通过post提交方式 user与pass,而且提交的user必须是admin.但是密码不知道。所以就得在 s q l = 这 句 想 办 法 绕 过 a n d ( p w = ′ " . sql=这句想办法绕过and (pw='". sql=and(pw=".pass."’) 这段 ,所以构造的语句就是这样语句:Username=admin ‘)#
实际执行的SQL语句:select user from cft where (user='admin ‘)#') and (pw='pass'),#后的都被注释掉了,两个if都满足了

总结:并不是通过闭合直接查找数据库中的用户名和密码,而是使显示flag的两个if语句执行。
要想拿到flag,要满足两个if,第一个if要求有user和pass的post输入,第二个if要求$query查询的user为admin

你可能感兴趣的:(nctf)