网站建设范本,网页网站项目综合,连云港网站建设开发,扬中网站哪家做的好1.测试环境搭建 LNMP架构的话#xff0c;肯定就是linux、nginx、mysql、php四大组件。在后面的复现中我们还会用到https的一部分知识#xff0c;故这里的nginx就需要使用虚拟主机并且配置https证书#xff0c;且具有php解析功能。
1.1 基础nginx配置 #1.创建web目录 mkdir …1.测试环境搭建 LNMP架构的话肯定就是linux、nginx、mysql、php四大组件。在后面的复现中我们还会用到https的一部分知识故这里的nginx就需要使用虚拟主机并且配置https证书且具有php解析功能。
1.1 基础nginx配置 #1.创建web目录 mkdir -p /var/www/aaa/
#2.配置nginx配置文件 /usr/local/nginx/conf/nginx.conf
#3.文件内容添加server模块 server { listen 80; server_name www.aaa.com; root “/var/www/aaa/nginxhost/web”; index index.html index.php; location / {try_files $uri $uri/ /index.php;}location ~ \.php(.*)$ {fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;fastcgi_split_path_info ^((?U).\.php)(/?.)$;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;fastcgi_param PATH_INFO $fastcgi_path_info;fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;include fastcgi_params;}}1.2 代码部署数据库配置 #1.将代码部署到指定位置(源码在评论区给出) mv /home/batman/nginxhost . #2.测试页面 #3.给tmp文件赋权 [rootblackstone web]# chmod 777 /var/www/aaa/nginxhost/protected/tmp 1 2 再次测试 #4. 数据库对接 在对应目录下输入mysql -uroot -p密码 即可 [rootblackstone nginxhost]# cd /var/www/aaa/nginxhost
mysql create database security; Query OK, 1 row affected (0.00 sec) mysql use security; Database changed mysql source initialize.sql 在开始之前我们浅浅分析一下数据库的大致结构并插入flag #flags就是我们需要获取的数据两个字段构成 mysql show columns from flags; ±------±-----------------±-----±----±--------±--------------- | Field | Type | Null | Key | Default | Extra | ±------±-----------------±-----±----±--------±--------------- | id | int(10) unsigned | NO | PRI | NULL | auto_increment | | flag | varchar(256) | YES | | NULL | | ±------±-----------------±-----±----±--------±--------------- 2 rows in set (0.00 sec)
#这里是一个用户注册的数据表四个字段id、username、passsword、email mysql show columns from users; ±---------±-----------------±-----±----±--------±--------------- | Field | Type | Null | Key | Default | Extra | ±---------±-----------------±-----±----±--------±--------------- | id | int(10) unsigned | NO | PRI | NULL | auto_increment | | username | varchar(256) | NO | UNI | NULL | | | password | varchar(32) | NO | | NULL | | | email | varchar(256) | YES | | NULL | | ±---------±-----------------±-----±----±--------±--------------- 4 rows in set (0.00 sec)
#我们插入flag mysql insert into flags (flag) values (‘mygod,you are a hacker!’); Query OK, 1 row affected (0.01 sec)
mysql select * from flags; ±—±------------------------ | id | flag | ±—±------------------------ | 2 | mygod,you are a hacker! | ±—±------------------------ 1 row in set (0.00 sec) 测试登陆页面的功能
运气好的话会有一个报错Fatal error: Class ‘MySQLi’ not found in /var/www/aaa/nginxhost/protected/lib/core.php on line 280 这是因为当前的php内部没有mysqli这个模块需要扩展安装首先我们需要确定php的安装版本下载对应的源码包进行重新安装 php官网https://www.php.net/releases/ 1.3 https配置 随着越来越多的网站接入HTTPS因此Nginx中仅配置HTTP还不够往往还需要监听443端口的请求但在以前学习过HTTP/HTTPS的朋友知道HTTPS为了确保通信安全所以服务端需配置对应的数字证书当项目使用Nginx作为网关时那么证书在Nginx中也需要配置接下来简单聊一下关于SSL证书配置过程
1.先去CA机构或从云控制台中申请对应的SSL证书审核通过后下载Nginx版本的证书。
这里没有申请证书由于是测试环境我们就使用openssl生成一个自签名证书 2.下载数字证书后完整的文件总共有三个 .crt、.key、.pem
.crt数字证书文件.crt是.pem的拓展文件因此有些人下载后可能没有。 .key服务器的私钥文件及非对称加密的私钥用于解密公钥传输的数据。 .pemBase64-encoded编码格式的源证书文本文件可自行根需求修改拓展名。 3.在Nginx目录下新建certificate目录并将下载好的证书/私钥等文件上传至该目录。
#这里的配置在1.3.1 中已经自己生成了对应的配置
4.最后修改一下nginx.conf文件即可如下 测试访问效果 2.sql注入漏洞挖掘 这里由于暂时未系统的了解sql注入故对其进行一个简单的叙述即可重点我们放在host字段绕过上。
2.1 sql注入基本原理 这里用sqllab第一关来进行示例。第一关模拟了我们很常见的一个功能就是查询显示。我们从前端通过get传参将id传递到后端php代码后端的php代码接收到了参数。将参数不加任何过滤的拼接进入sql语句内部由此引发的安全漏洞会导致恶意的数据库语句执行小到窃取敏感数据大到恶意删库跑路。实际环境中会有严密的过滤函数处理数据而今天我们体会一下其原理即可 我们加入单引号产生了报错则说明此参数被代入sql语句了有安全风险。也可以说此处存在注入点 2.2 本例中的注入点 本着找注入点的目的我们查看这套源码的控件看里面有没有可以利用的sql语句。
我们找到controller里面的maincontroller.php可以看到此处有三个功能函数session验证、登陆验证、注册新用户。
我们只能后面两个函数首先是这里的actionlogin函数。
2.3 FILTER_VALIDATE_EMAIL绕过 RFC 3696规定邮箱地址分为local part和domain part两部分。local part中包含特殊字符需要如下处理
将特殊字符用\转义如Joe’Blowexample.com 或将local part包裹在双引号中如Joe’Blowexample.com local part长度不超过64个字符 虽然PHP没有完全按照RFC 3696进行检测但支持上述第2种写法。所以我们可以利用之绕过FILTER_VALIDATE_EMAIL的检测。
因为代码中邮箱是用户名、、Host三者拼接而成但用户名是经过了转义的所以单引号只能放在Host中。我们可以传入用户名为nameHost为is’“.aaa.com最后拼接出来的邮箱为nameis’”aaa.com。这个邮箱是合法的。 3.HOST绕过 我们看看上面修改该过host之后接收到的数据时什么样的 3.1 冒号号分割host字段 Nginx在处理Host的时候会将Host用冒号分割成hostname和portport部分被丢弃。所以我们可以设置Host为www.aaa.com:aaa.com即可绕过。
查看效果很明显产生了报错我们的注入点应当已经注入成功