基础实践第一周
PHPstudy的搭建及使用
下载
PHPstudy官网链接:传送门
直接下载windows版的小皮v8.1
安装打开省略,结果如图
搭建
点击启动
然后点击左侧网站,新建网站,自定义域名为localhost,端口为88。
此处我自定义两个网站localhost,localhost1,端口88,89。分别用HTML和PHP写Hello World。
注意两个网站的根目录不要放到一起,以区分。
点击右侧的管理,打开网站
显示如上即成功。
关闭,然后点击右侧的管理,打开根目录
可以删除的内容,如图只剩下这两个文件。
PHP写
空白处右击-新建-文本文档,修改文件名为a.php,保存
右击用vscode打开,写入如下代码
<!DOCTYPE html>
<html>
<body>
<h1>实验室第一个任务</h1>
<?php echo "Hello World";
?>
</body>
</html>
保存:Ctrl + s,并退出,关闭文件夹
然后再次打开网站,即为
若任然显示
HTML写
空白处右击-新建-文本文档,修改文件名为b.html,保存
右击用vscode打开,写入如下代码
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>实验室第一次任务</title>
</head>
<body>
<h1>任务内容</h1>
<p>输出“Hello World!”</p>
<p>输出为:Hello World!</p>
</body>
</html>
此段代码可以优化
保存:Ctrl + s,并退出,关闭文件夹
然后再次打开网站,即为
注意事项
若编写代码打开后仍然为
则点击地址栏再按回车即可显示自己手写的内容。
Burpsuite的安装、抓包、改包
安装
此处使用burp_suite_pro_v2022.8.4.jar作为演示,前提得有Java环境,而burp_suite_pro_v2022.8.4.jar对java环境没有过硬的要求,理论java8最好,我此处是配置的Java18环境,Java环境配置:传送门
主要工具包如下传送门
burp_suite_pro_v2022.8.4下载地址:传送门
下载完成后将这四个放到一个文件夹中,路径不要有中文
右击复制BurpLoaderKeygen.jar的文件路径,空白处右击终端打开
输入
java -jar "目标路径"
然后就运行注册机了
license text随便改,然后把上面俩都打勾,点击"run"
接着就打开burpsuite了,到输入license的时候,复制注册机的license,粘贴到burpsuite中,点击next
再点击如下
下一步点击 copy request,将右边的都复制到左边的框里
接着把左边的response复制到右边,然后我们就可以使用了。
快捷启动
第一种vbs启动
在刚刚的文件夹中右击-新建文本文档两个,分别命名为:
中文启动.vbs
英文启动.vbs
右击用vscode打开
英文启动输入如下:
set ws=createobject("wscript.shell")
ws.run("cmd /c java -noverify -javaagent:BurpSuiteLoader.jar -jar -Xmx2048M burpsuite_pro_v2022.8.4.jar"),vbhide
中文启动输入如下:
set ws=createobject("wscript.shell")
ws.run("cmd /c java -Dfile.encoding=utf-8 -javaagent:BurpSuiteChs.jar -noverify -javaagent:BurpSuiteLoader.jar -jar -Xmx2048M burpsuite_pro_v2022.8.4.jar"),vbhide
此后就可以直接点击相应的vbs程序来启动burpsuite了
第二种bat启动
同样在刚刚的文件夹中右击-新建文本文档两个,分别命名为:
中文启动.vbs
英文启动.vbs
英文启动如下
java -noverify -javaagent:BurpSuiteLoader.jar -jar -Xmx2048M burpsuite_pro_v2022.8.4.jar
中文启动
java -Dfile.encoding=utf-8 -javaagent:BurpSuiteChs.jar -noverify -javaagent:BurpSuiteLoader.jar -jar -Xmx2048M burpsuite_pro_v2022.8.4.jar
第三种exe启动(推荐)
首先在之前的目录里新建一个1.cs的文件,打开写入以下代码
using System;
using System.Diagnostics;
using System.IO;
namespace burpsuite_pro_v2022
{
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
// 这里要根据自己的burpsuite文件来更改
string startbp_seconde = "java -noverify -javaagent:BurpSuiteLoader.jar -jar -Xmx2048M burpsuite_pro_v2022.8.4.jar";
if (File.Exists("config.cfg"))
{
Exec(startbp_seconde);
}
else
{
string first = "java -jar BurpSuiteLoader.jar";
Exec(first);
}
}
static void Exec(string cmd)
{
Process p = new Process();
//设置要启动的应用程序
p.StartInfo.FileName = "cmd.exe";
//是否使用操作系统shell启动
p.StartInfo.UseShellExecute = false;
// 接受来自调用程序的输入信息
p.StartInfo.RedirectStandardInput = true;
//输出信息
p.StartInfo.RedirectStandardOutput = true;
// 输出错误
p.StartInfo.RedirectStandardError = true;
//不显示程序窗口
p.StartInfo.CreateNoWindow = true;
//启动程序
p.Start();
//向cmd窗口发送输入信息
p.StandardInput.WriteLine(cmd+ "&exit");
p.StandardInput.AutoFlush = true;
//获取输出信息
string strOuput = p.StandardOutput.ReadToEnd();
//等待程序执行完退出进程
//p.WaitForExit();
p.Close();
}
}
}
///上面代码需要更改的地方就一处,注释里也写了:burpsuite的文件名。
再找一个burpsuite的ico图标,放入该文件夹,命名为bp.ico
然后使用Microsoft.NET包的csc编译该文件
在该文件的空白处右击打开终端输入以下命令
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /target:winexe /out:D:\burpsuitece\bp10.exe /win32icon:D:\burpsuitece\bp.ico D:\burpsuitece\1.cs
即可生成一个.exe文件,接着发送到桌面即可以双击打开
配置代理
以火狐浏览器测试
如图打开扩展
在搜索框输入“FoxyProxy Standard”后搜索
点击然后添加到火狐
点击添加
然后关闭网页,回到主页点击如图所示
点击FoxyProxy Standard–选项
代理ip地址和端口处分别输入“127.0.0.1”、“8080”后点击【保存】
最后结果如图,即为成功
配置CA证书
点击自己写的vbs程序,打开burpsuite,一直默认下一步,进入主页
Proxy–Options
如图提示操作
然后把证书保存到一个自己能找到的一个位置
打开火狐浏览器–设置,搜索“证书”
点击【查看证书】
点击【导入】把刚刚的证书导入即可
抓包
进入火狐浏览器点击FoxyProxy Standard,把代理改为127.0.0.1:8080
在火狐浏览器搜索框里输入【坤哥】
然后进入burpsuite的如下界面,点击【intercpet is off】然后它就会打开
返回到火狐浏览器,点击搜索,就会返回如下结果,点击【Forward】
然后点击【Action】–【Send to Repeater】
然后点击【Repeater】,再点击【Send】
在右边的response的render中即可查看“坤哥”
改包
改包这里为了让效果更佳,将采用百度搜索一个内容,返回另一个内容来演示
火狐搜索框输入:实验室隐藏的帅哥是谁
然后回到burpsuite,点击【intercpet is off】,回到火狐浏览器,搜索
蔡徐坤"的UTF-8编码表示为:%E8%94%A1%E5%BE%90%E5%9D%A4
将GET /baidu?ie=utf-8&wd= %E5%AE%9E%E9%AA%8C%E5%AE%A4%E9%9A%90%E8%97%8F%E7%9A%84%E5%B8%85%E5%93%A5%E6%98%AF%E8%B0%81 HTTP/1.1
中标记的部分用坤哥的utf-8编码替换了
然后点击一直点击【Forward】
即可出现如下
改包成功
Typora的破解
文件下载传送门
无脑下载文件,安装打开,点击试用15天后,把补丁文件解压,然后将补丁文件与Typora安装文件中的winmm.dll丢入安装文件夹根目录即可,效果如图
HTTP
1.什么是HTTP协议
HTTP(Hypertext Transfer Protocol)是一种用于在网络上传输超文本数据的协议。它是万维网的基础,用于在客户端和服务器之间传递信息,允许浏览器从Web服务器请求网页,并将网页内容传送给浏览器以供显示。HTTP是一个无状态协议,这意味着每个HTTP请求都是相互独立的,服务器不会保留关于之前请求的信息。
HTTP使用客户端-服务器模型,其中客户端(通常是浏览器)发送HTTP请求,而服务器响应请求并提供所需的数据。HTTP请求通常包括请求方法(如GET、POST、PUT、DELETE等)、请求的URL(Uniform Resource Locator)、请求头部和请求正文(可选)。服务器响应包括响应状态码、响应头部和响应正文。
HTTP是一个无连接协议,这意味着每个请求/响应对都是独立的,服务器不会保持与客户端之间的持续连接。这有助于保持协议的简单性和可伸缩性。
HTTP协议的版本有多个,最常见的是HTTP/1.1和HTTP/2。HTTP/1.1是广泛使用的协议版本,而HTTP/2引入了一些性能改进,如多路复用、头部压缩和服务器推送。
总之,HTTP协议是互联网上用于传输超文本数据的基本协议,它使我们能够在浏览器和服务器之间传递网页内容,是Web的基础之一。
一句话就是:HTTP(Hypertext Transfer Protocol)是一种用于在互联网上传输超文本数据的通信协议,它允许客户端(通常是浏览器)向服务器请求网页并获取响应,从而构建和显示网页内容。
1.什么是HTTP请求
HTTP(Hypertext Transfer Protocol)请求是用于在客户端和服务器之间传输数据的协议。HTTP是互联网上用于获取和传输网页、图像、视频、音频和其他资源的主要协议之一。当你在Web浏览器中输入网址、单击链接或执行其他与网络资源相关的操作时,浏览器会发送HTTP请求到远程服务器,请求特定的资源或执行特定的操作。服务器然后会响应这些请求,提供请求的数据或执行相应的操作。
2.请求方法
常见的请求方法有如下几种
请求方法 | 描述 | 幂等性 |
---|---|---|
GET | GET请求用于请求特定资源的表示形式 | 是 |
POST | 提交数据给服务器,用于创建新资源或执行某些操作 | 否 |
PUT | 更新服务器上的资源 | 是 |
DELETE | 请求删除服务器上的资源 | 是 |
PATCH | 用于部分更新服务器上的资源 | 否 |
HEAD | 类似于GET,但只返回响应头信息而不返回实际数据 | 是 |
OPTIONS | 获取服务器支持的请求方法和其他信息 | 是 |
幂等性是指相同的请求,无论执行多少次,都应该产生相同的结果,而不会对服务器状态产生额外的影响。这是为了确保在网络通信中,重试请求或请求可能重复发送时不会引发问题。
3.关于GET和POST传参
此为w3school 标准答案
GET 和 POST 只是 HTTP 协议中两种请求方式,而 HTTP 协议是基于 TCP/IP 的应用层协议,无论 GET 还是 POST,用的都是同一个传输层协议,所以在传输上,本质没有区别。
- GET请求:
用于从服务器获取数据,通常不用于对服务器状态进行更改。
参数通过URL的查询字符串传递,附加在URL的末尾,例如:http://example.com/resource?param1=value1¶m2=value2
参数通常有长度限制,因为它们附加在URL上,对于敏感信息不安全。
GET请求是幂等的,多次相同的GET请求应该产生相同的结果。
常用于向服务器请求资源,如网页、图片、文档等。
- POST请求:
用于向服务器提交数据,通常用于创建、更新或删除服务器上的资源,对服务器状态进行更改。
参数通常包含在请求的消息体中,对用户来说不可见。
POST请求通常不受参数长度限制,适合传递大量数据,如表单数据、文件上传等。
POST请求通常不是幂等的,多次相同的POST请求可能会产生不同的结果。
常用于提交表单数据、进行用户身份验证等操作。
两者的区别
两者的区别就是请求的方法写的不一样,POST不会在地址栏显示,安全性比get请求高,倘若让GET请求带一个请求体,只是浏览器带不了请求体,请求体会被直接接忽略掉,这样抓包拿到的数据只有请求头,没有请求体,而在nodejs中,nodejs服务端可提从这个GET的请求中获取到请求体的。
浏览器会忽略掉get或者是head请求中的请求体
在浏览器中可以看到这两个请求方法的差别有这么几点
-
GET一般用来获取服务器的信息的,post一般是用来更新信息
-
GET通过url 传递参数,POST可以通过url和request body 传递参数;
-
GET请求可以缓存,POST请求不能缓存(cache-control 经测试无法缓存) ;
-
GET只能进行url编码, POST 传输的编码方式很多
-
GET 请求参数会保存在浏览器历史中,POST不会
-
GET传递的参数上限是2k(IE浏览器), POST没有限制
-
GET只接受ASCII 字符,POST 没有限制