LAMP=Linux+Apache+MySQL+PHP
参考博客1
参考博客2
Firewalld命令集
Apache官方文档
参数解析
DocumentRoot : 网站根目录
默认路径:/var/www/html
将DocumentRoot和DirectoryIndex都改为/home/wwwroot
参照上面的博客把SELinux禁用掉
在这强调一下
生产环境中一定要把网站的物理路径改掉,不要使用默认的
因为如果攻击者知道你的物理路径就可以通过sql注入拿到os-shell
然后在此目录下新建index.html
内容随便写
重启httpd服务
systemctl restart httpd
然后去浏览器输入127.0.0.1/index.html试一下
成功
附:Document和DirectoryIndex的区别
因为我前期的主要目的是先搭一个sql注入的渗透环境,所以接下来的部分会讲php和mysql的交互,而不侧重于其他Apache配置如虚拟主机等,有空后期会更
现在我想把我的网站分成不同的部分
比如
127.0.0.1/sqlinjection/
127.0.0.1/weakpassword/
这时候就要用到别名Alias了,它可以为url定义一个路径映射的关系
Apache Alias
因为我只是为了搭建一个渗透环境,所以我的PHP博客重点在交互的部分
Web基础:世界上最好的语言
如果是开发人员建议去
菜鸟教程
进行系统学习
PHP的官方文档布局真的是一坨shit
原博客
新建first.html
<!DOCTYPE html>
<html>
<meta charset="gbk">
<head>
<title>test</title>
</head>
<body>
<form style="text-align:center" action="test.php" method="post">
//action指定向服务器上的test.php发送数据
用户: <input type="text" name="user" value=""><br>
密码: <input type="password" name="mima" value=""><br>
<input type="submit" value="确定">
//点击确定后submit键值对
</form>
<p style="text-align:center">点击"确定"按钮,表单数据将被发送到服务器上的“test.php”。</p>
</body>
</html>
同目录下新建test.php
<html>
<body>
Welcome echo $_POST["user"]; ?><br>
//从以POST方式提交到服务器的数据中提取user的值并回显
Your password is: echo $_POST["mima"]; ?>
//同理
</body>
</html>
在first.html中输入用户名为123,密码456,点击确定
可以看到以POST方式提交了两个键值对
页面自动跳转到test.php
原博客
建库建表
终端登录MySQL
mysql -u root -p
创建数据库phptest
create database phptest
在phptest中建表userpass
use phptest
create table `userpass`(
`username` VARCHAR(100) NOT NULL PRIMARY KEY,
`password` VARCHAR(100) NOT NULL
);
注意:建表时表名和列名两侧的符号是ESC下面的键`而不是单引号’
写代码
建议新手不要直接复制粘贴
自己动手敲一遍可以理解一下思路...
因为原博客是图片并没有给代码,所以我是手敲的
在敲的过程中有很多地方就想明白了
下面public.php用于连接phptest数据库
$servername = "localhost";
$username = "username";
$password = "pswd";
$dbname="phptest";
$conn = new mysqli($servername, $username, $password,$dbname);
// 创建连接
//一定注意把数据库名传进去,不然下面调用mysqli_query()时始终返回False
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
echo "连接成功";
?>
下面regist.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Regist Page</title>
</head>
<body>
<form action="regist.php" method="post">
<label for="username">用户名:</label><input type="text" id="username" name="yonghuming">
//向服务器提交的是name:value键值对
<label for="pass">密码:</label><input type="text" id="pass" name="mima">
<input type="submit" id="btn" value="注册">
//在页面上显示的文字是“注册”
</form>
</body>
</html>
向服务器上regist.php提交的键值对
regist.php
include "public.php";
//引用此文件连接phptest
$name=$_POST['yonghuming'];
$pass=$_POST['mima'];
//用REQUEST时两种方式提交的键值对都可以进行接收,也可用与上文对应的POST
$sql="INSERT INTO userpass(username,password) VALUES ('$name','$pass')";
//向userpass表中的列username和password插入数据,其值为接收到的$name和$pass
//注意$name和$pass外都要有单引号
if($conn->query($sql)===True){
echo "";
}
else{
echo "";
}
?>
login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Login</title>
</head>
<body>
<form action="login.php" method="post">
<label for="username">用户名:</label><input type="text" id="username" name="yonghuming">
<lable for="pass">密码:</label><input type="text" id="pass" name="mima">
//POST提交键值对
<input type="submit" id="btn" value="登录">
</form>
</body>
</html>
login.php
include "public.php";
//连接数据库
$uname=$_REQUEST["yonghuming"];
$pass=$_REQUEST["mima"];
//提取从login.html中POST的键值对
$sql="SELECT username,password FROM userpass WHERE username='$uname'";
//在userpass表中查找符合条件的一行username password
$re=mysqli_query($conn,$sql);
$n=mysqli_num_rows($re);
//返回的行数
if(!$n){
echo "";
}
else{
while($data=mysqli_fetch_assoc($re)){
if($data['username']==$uname&&$data['password']==$pass){
//如果查询出的data的['username']的值与传入的uname的值相等且...相等
echo "";}
else{
//密码的值与数据库中值不匹配
echo "";
}
}
}
?>
以上代码全部测试通过