CTF之实验吧--后台登陆

本来以为不用看writeup的,因为一看网业的源代码,哇,这个能看懂。然后就去网页上找函数的作用。主要是下面这三个函数。

mysqli_query(connection,query,resultmode)函数:

connection: 必需。规定要使用的 MySQL 连接。
query: 必需,规定查询字符串。
resultmode: 可选。一个常量。可以是下列值中的任意一个:

  • MYSQLI_USE_RESULT(如果需要检索大量数据,请使用这个)
  • MYSQLI_STORE_RESULT(默认)

mysqli_num_rows(result)函数:

result: 必需。规定由 mysqli_query()、mysqli_store_result() 或 mysqli_use_result() 返回的结果集标识符。

md5(string)函数:

string:必需。把string用md5方式加密。

http://www.runoob.com/这个网站都可以查到

接下来就是看代码的逻辑关系了。

<!-- $password=$_POST['password'];
	$sql = "SELECT * FROM admin WHERE username = 'admin' and password = '".md5($password,true)."'";
	$result=mysqli_query($link,$sql);
		if(mysqli_num_rows($result)>0){
			echo 'flag is :'.$flag;
		}
		else{
			echo '密码错误!';
		} -->

我们从下往上看,可以知道 $flag 这个变量就是我们要的flag了。

怎么得到呢?

if(mysqli_num_rows($result)>0)

要这个语句成立才行,也就是说这个 $result 变量要使得这个函数的返回值大于零。

那 $result 怎么来的呢?

$result=mysqli_query($link,$sql);

这个语句意思是要在数据库中查到$sql这个数据,然后函数返回一个地址保存在result这个变量里。前面的参数是用来连接数据库的。

那这个 $sql 怎么来的呢?

$sql = "SELECT * FROM admin WHERE username = 'admin' and password = '".md5($password,true)."'";

终于讲到这个了,emmmmmm,这里其实要用到注入语句。
不知道的小萌新可以看看我的另一篇文章’or 1=1# 初入SQL注入的万能语句

也就是说我们需要用md5这个函数构造一个注入语句,使得这个代码成立。
而成立的字符串是 ‘ or ’
这个字符串是经过md5计算后的字符串,那我们计算前的字符串,也就是我们要输入的字符串是什么呢?

其实网址已经告诉你了

ffifdyop

输进去就能拿到flag啦。

猜你喜欢

转载自blog.csdn.net/weixin_41607190/article/details/82935262
今日推荐