lesson11-lesson16
登陆框-post注入
登陆框
登陆框是web的常见身份验证方式, 大体操作流程是输账户密码->拼接查库->验证登陆。
这里和之前的get的sql注入不同了,他除了可以跑库,还有一个身份验证绕过功能。俗称万能密码。所谓万能,就是不依据真是验证,构造逻辑真,从而绕过验证。登陆也是一般ctf此类问题的主要目的。
lesson11
input:
if(isset($_POST['uname']) && isset($_POST['passwd']))
{
$uname=$_POST['uname'];
$passwd=$_POST['passwd'];
这里传参post方法。
sink
// connectivity
@$sql="SELECT username, password FROM users WHERE username='$uname' and password='$passwd' LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);
登陆框使用了单引号闭合。
查询逻辑是双查选定第一个。判定条件是根据$row,如果有则成功。
output:
if($row)
{
//echo '<font color= "#0000ff">';
echo "<br>";
echo '<font color= "#FFFF00" font size = 4>';
//echo " You Have successfully logged in " ;
echo '<font size="3" color="#0000ff">';
echo "<br>";
echo 'Your Login name:'. $row['username'];
echo "<br>";
echo 'Your Password:' .$row['password'];
echo "<br>";
echo "</font>";
echo "<br>";
echo "<br>";
echo '<img src="../images/flag.jpg" />';
echo "</font>";
}
else
{
echo '<font color= "#0000ff" font size="3">';
//echo "Try again looser";
print_r(mysql_error());
echo "</br>";
echo "</br>";
echo "</br>";
echo '<img src="../images/slap.jpg" />';
echo "</font>";
}
}
有错误信息,能报错,有数据库查询内容,可union(查到内容的情况下)。可逻辑。
这种登陆框一般是要求绕过身份验证而不是获取信息,所以这里的payload给的是如何登陆成功:
这里的关键还是说如何使得sql语句获得内容,以为此处的sql语句是一个双条件查询,即查询了username又查询了password,因此我们有两个输入点:
@$sql="SELECT username, password FROM users WHERE username='$uname' and password='$passwd' LIMIT 0,1";
我们可以选在username处截断,然后注入'||1=1#,就可以登陆表中第一个用户。当然需要登陆指定用户如admin
, 可使用'admin&&1=1# 无密码登陆,当然admin这个用户必须有,不然逻辑与操作自带控制流,半闭合不执行后边内容。在password处一个道理,需要用逻辑或,查第一个。当然也可以拼接联合注入。 既然外显,可查信息,如:' union select user(),2#,让本来的sql什么也查不到,自然union的就是第一条(也就是外显的)结果了。
lesson 12
sink:
$uname='"'.$uname.'"';
$passwd='"'.$passwd.'"';
双引号闭合
@$sql="SELECT username, password FROM users WHERE username=($uname) and password=($passwd) LIMIT 0,1";
加单括号闭合
output: 同lesson11一样, 可报错可回显。
payload:
指定查询: username:
admin") and 1=1#
第一条: username: ") or 1#
lesson 13
sink:
@$sql="SELECT username, password FROM users WHERE username=('$uname') and password=('$passwd') LIMIT 0,1";
单引号家括号闭合,也是双查寻验数量
output
if($row)
{
//echo '<font color= "#0000ff">';
echo "<br>";
echo '<font color= "#FFFF00" font size = 4>';
//echo " You Have successfully logged in " ;
echo '<font size="3" color="#0000ff">';
echo "<br>";
//echo 'Your Login name:'. $row['username'];
//echo "<br>";
//echo 'Your Password:' .$row['password'];
//echo "<br>";
echo "</font>";
echo "<br>";
echo "<br>";
echo '<img src="../images/flag.jpg" />';
echo "</font>";
}
else
{
echo '<font color= "#0000ff" font size="3">';
//echo "Try again looser";
print_r(mysql_error());
echo "</br>";
echo "</br>";
echo "</br>";
echo '<img src="../images/slap.jpg" />';
echo "</font>";
}
}
这里还可以报错,但是不能回显了,你是不是有些慌? 没关系。我们可以通过报错信息获悉闭合形式
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''#') and password=('') LIMIT 0,1' at line 1
我们还可以通过登陆成功和失败的两张照片来进行布尔型盲注。
lesson 14
sink:
$uname='"'.$uname.'"';
$passwd='"'.$passwd.'"';
@$sql="SELECT username, password FROM users WHERE username=$uname and password=$passwd LIMIT 0,1";
双引号闭合双查询,验证有无查询到内容与前相同。
if($row)
{
//echo '<font color= "#0000ff">';
echo "<br>";
echo '<font color= "#FFFF00" font size = 4>';
//echo " You Have successfully logged in " ;
echo '<font size="3" color="#0000ff">';
echo "<br>";
//echo 'Your Login name:'. $row['username'];
//echo "<br>";
//echo 'Your Password:' .$row['password'];
//echo "<br>";
echo "</font>";
echo "<br>";
echo "<br>";
echo '<img src="../images/flag.jpg" />';
echo "</font>";
}
else
{
echo '<font color= "#0000ff" font size="3">';
//echo "Try again looser";
print_r(mysql_error());
echo "</br>";
echo "</br>";
echo "</br>";
echo '<img src="../images/slap.jpg" />';
echo "</font>";
}
同lesson13
lesson15
sink
@$sql="SELECT username, password FROM users WHERE username='$uname' and password='$passwd' LIMIT 0,1";
output
if($row)
{
//echo '<font color= "#0000ff">';
echo "<br>";
echo '<font color= "#FFFF00" font size = 4>';
//echo " You Have successfully logged in\n\n " ;
echo '<font size="3" color="#0000ff">';
echo "<br>";
//echo 'Your Login name:'. $row['username'];
echo "<br>";
//echo 'Your Password:' .$row['password'];
echo "<br>";
echo "</font>";
echo "<br>";
echo "<br>";
echo '<img src="../images/flag.jpg" />';
echo "</font>";
}
else
{
echo '<font color= "#0000ff" font size="3">';
//echo "Try again looser";
//print_r(mysql_error());
echo "</br>";
echo "</br>";
echo "</br>";
echo '<img src="../images/slap.jpg" />';
echo "</font>";
}
这里没有显错帮助了,所以如何构造闭合?猜吧,盲注吧,之后再加上各种关键字过滤,哈哈哈哈哈,同lesson 14。
lesson 16
登陆框盲注之:
$uname='"'.$uname.'"';
passwd='"'.$passwd.'"';
@$sql="SELECT username, password FROM users WHERE username=($uname) and password=($passwd) LIMIT 0,1";
Last updated
Was this helpful?