- 博客(42)
- 收藏
- 关注
原创 20231911 2023-2024-2 《网络攻防实践》实践十一报告
实践内容(1)web浏览器渗透攻击任务:使用攻击机和Windows靶机进行浏览器渗透攻击实验,体验网页木马构造及实施浏览器攻击的实际过程。(2)取证分析实践—网页木马攻击场景分析实践过程:①首先你应该访问start.html,在这个文件中给出了new09.htm的地址,②在进入 htm 后,每解密出一个文件地址,请对其作 32 位 MD5 散列,以散列值为文件名到哈希值下去下载对应的文件(注意:文件名中的英文字母为小写,且没有扩展名),即为解密出的地址对应的文件。
2024-05-30 18:00:35
957
原创 20231911 2023-2024-2 《网络攻防实践》实践十报告
经过上述的分析,可以看出,由于在后台使用了一行完整的sql指令进行数据库处理,我们可以借助sql命令格式的特点,使用“#”符号对本该拥有的筛选条件进行“截断”,这样就可以实现未经许可的侵入攻击,达到非法访问和篡改信息的目的。该表存储了每个员工的个人信息(例如,eid,密码,薪水,ssn等)。通过本次实验,我学习到了Web应用程序安全的基本原理和方法,SQL注入攻击和XSS攻击的相关知识,对数据库有了更深入的认识,对Web应用程序安全有了进一步的认识,也增加了我的网络安全相关知识储备。
2024-05-23 01:18:56
798
原创 20231911 2023-2024-2 《网络攻防实践》实践九报告
oo函数执行完成之后,main函数下一条指令的地址为80484ba,而main函数调用函数foo会在堆栈上压入返回地址:80484ba,接下来要做的就是通过foo函数的Bof漏洞输入一段设计好的字符串覆盖掉80484ba,使得80484 ba的值为080484 7d,这样就会执行getshell函数。通过本次实验,我理解了缓冲区的一些基本情况,而且上课期间,老师也对缓冲区和堆栈问题对同学们进行了提问,并且自己最后也归纳总结,进行了解答,让我对这些知识点有了大致的了解。正常情况下这个代码是不会被运行的。
2024-05-15 22:52:32
544
原创 20231911 马星 2023-2024-2《网络攻防实践》第8周作业
恶意代码的分类标准主要是代码的独立性和自我复制性,独立的恶意代码是指具备一个完整程序所应该具有的全部功能功能,能够独立传播、运行的恶意代码,这样的恶意代码不需要寄宿在另一个程序中。任务:分析的数据源是用Snort工具收集的蜜罐主机5天的网络数据源,并通过编辑去除了一些不相关的流量并将其组合到了单独的一个二进制网络日志文件中,同时IP地址和其他特定敏感信息都已经被混淆以隐藏蜜罐主机的实际身份和位置。这样一来,不仅严重危害了客户的私人利益,也损害了公司的宝贵资源和企业形象,从而对企业造成致命创伤。
2024-05-08 11:55:59
578
原创 20231911 马星 2023-2024-2 《网络攻防实践》第7周作业
防守方:使用 tcpdump/wireshark/snort 监听获得网络攻击的数据包文件,结合 wireshark/snort 分析攻击过程,获得攻击者的IP、目标IP和端口、攻击发起时间、攻击利用漏洞、使用Shellcode、以及成功之后在命令行输入的信息。本次实践主要学习了Linux操作系统攻防,以及渗透攻击的攻击过程,深刻理解了网络攻防的一般步骤,同时还要多加强理论知识的学习,并投入大量时间去实践,才能把网络攻防技术掌握的更好。进程可以在前台运行,将输出显示在屏幕上,也可以在后台运行,隐藏到幕后。
2024-04-25 19:28:27
549
原创 20231911 2023-2024-2《网络攻防实践》实践六报告
本次实践主要学习了Windows的安全机制,以及渗透攻击的攻击过程,但是还有很多王老师的要求可能没有实现完全,这方面知识水平欠缺,我也会找时间弥补自己的缺漏。
2024-04-18 19:54:02
598
原创 20231911 马星 2023-2024-2 《网络攻防实践》实践报五告
本次实践我学会了防火墙的配置、动手实践Snort以及分析虚拟网络攻防环境中蜜网网关的防火墙和IDS/IPS配置规则。对蜜网网关是如何利用防火墙和入侵检测技术完成其攻击数据捕获和控制需求也有进一步的认识。
2024-04-11 19:02:41
896
原创 20231911马星 2022-2023-2 《网络攻防实践》实验四
(1)ARP欺骗(ARP spoofing),又称ARP毒化(ARP poisoning,网络上多译为ARP病毒)或ARP攻击,是针对以太网地址解析协议(ARP)的一种攻击技术,通过欺骗局域网内访问者PC的网关MAC地址,使访问者PC错以为攻击者更改后的MAC地址是网关的MAC,导致网络不通。另一方,ARP协议为提高效率,设计ARP缓存机制,以及会将主动的ARP应答视作有效信息进行接受,这使得ARP缓存出常容易被注入伪造的IP地址到MAC地址的映射关系,从而进行欺骗。
2024-03-28 21:02:44
991
原创 20231911 2022-2023-2 《网络攻防实践》实验三
打开电科院官网,可以看到访问 https://www.besti.edu.cn 过程中访问问4个Web服务器,ip分别为152.195.38.76,34.107.221.82,203.208.50.98以及最后一个电科院的ip123.121.151.1。他们的IP地址都是什么?”,因此说明这一段中,攻击者通过ARP广播的方式进行了活跃主机检测。还有处TCP之外的一些其他协议,这说明攻击者通过与检测出的端口进行上层的交流,检测到了一些网络服务,可以得出,攻击者在这一次攻击中扫描了服务。
2024-03-24 10:06:56
752
原创 Linux
Linux进程间通信机制IPC管道有名管道可以在任意俩个进程间通信创建管道文件 mkfifo fifo,但是它的大小永远为0.因为它只起到传输作用,写入的东西都写到内存里了a.c#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<string.h>#include<assert.h>#include<fcntl.h>int main()
2022-04-03 23:33:24
1802
原创 迭代器实现
#ifndef XING_LIST_H#define XING_LIST_Hnamespace xing{template <class _Ty>class list{private: struct _Node; typedef struct _Node* _Nodeptr; struct _Node { _Nodeptr _Prev, _Next; _Ty _Value; }; struct _Acc; struct _Acc { typedef
2022-02-06 02:34:12
127
原创 判断单链表是否回文
这里面展示俩种方法,一种是把链表的值存到动态开辟的空间里,然后设置左右指针判断其值是否一致;第二种方法是找到中间结点(偶链表的话找中间靠左的),然后将右边的链表逆置,再设置左右指针判断其值是否相等;bool Huiwen(LinkList* plist){ assert(plist != nullptr); bool res = true; if (plist->head == NULL || plist->head->next == NULL) { return res;
2021-10-25 16:05:20
158
原创 旋转单链表数据
第一种是老师大概说了下思路,我就暂停了,自己写出来的,后来听完老师讲后,还是它的简单,我不需要设置很多指针,还是不行呀呀呀void Circle_K1(LinkList* plist, int k){ assert(plist != nullptr); //int len = Getsize(plist) - k; ListNode* pre = plist->head; ListNode* p = plist->head->next; int n = 0; while (
2021-10-20 11:11:35
54
原创 判断单链表是否有环,有环返回其初始环结点
这里使用了快慢指针,快指针比慢指针多走一步,等它俩相遇后,根据数学公式可以表示出,快指针走的是慢指针走的加上n圈环,所以确定有环后,让慢指针回到最初位置,然后快慢指针都走一步,等相遇后,那个点就是环切点ListNode* CycleBegin(LinkList* plist){ assert(plist != nullptr); ListNode* slow = plist->head->next; ListNode* fast = plist->head->next-&g
2021-10-20 11:09:52
100
原创 带头结点的单链表的逆置
我这里写了四种,最后一种是递归,但是大家掌握头插那种就够了;ListNode* Reverse(ListNode* p){ if (p == nullptr || p->next == nullptr) { return p; } ListNode* firstnode = Reverse(p->next); p->next->next = p; p->next = nullptr; return firstnode;}void Reverse4(L
2021-10-20 11:05:49
498
原创 打印带头单链表倒数K个结点的数据
第一种就是用正常思想,倒数第K个,就是正数第N-K个;第二种用了快慢指针,快指针先走差值K,等快指针为空了,慢指针正好到了我们要找到的倒数第K个结点;第三种是自己设计了栈,都入栈后,倒数第K个,出栈的时候就是正数了void Print_Last_KA(LinkList* plist, int k){ assert(plist != nullptr); if (k<1 || k>plist->cursize) exit(1); ListNode* p = plist->h
2021-10-20 11:01:19
79
原创 八大排序你值得拥有
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<assert.h>template<class Type>void Swap(Type& a, Type& b) //函数模板{ Type tmp = a; a = b; b = tmp;}void BubbleSort(int* ar, int len) //冒泡排序
2021-09-06 10:06:11
90
原创 链式队列的实现
#include<stdio.h>#include<stdlib.h>#include<assert.h>#include<string.h>typedef int ElemType;typedef struct Node{ ElemType data; struct Node* next;}QueueNode;typedef struct Head{ struct Node* front; struct Node* rear;
2021-08-19 11:27:53
68
原创 顺序(循环)队列的实现
#include<stdio.h>#include<stdlib.h>#include<assert.h>#include<string.h>#define MAXSIZE 20//#define QUEUEINCREMENT 10typedef int ElemType;typedef struct Queue{ ElemType* elem; int front; int rear;}Queue,*Squeue; void
2021-08-19 11:26:19
92
原创 链栈的实现
可以设置将栈的结构体设置俩个别名,一个Stack,另一个*Lstack,也可以新创建一个栈的结构体,放它的头指针和长度,也可以设置头结点或者不设置,但这里设置用途不大,读者可据喜好自行设计。#include<stdio.h>#include<stdlib.h>#include<assert.h>#include<string.h>typedef int ElemType;typedef struct Stack{ ElemType data;
2021-08-18 23:25:13
60
原创 顺序栈的实现
一种是结构体中直接定义数组,一种我们动态开辟内存。typedef int ElemType;typedef struct Stack{ ElemType data[STACK_INIT_SIZE]; int top;}Stack,*Sxtack;void Init_Stack(Sxtack pstack){ assert(pstack != nullptr); pstack->top = 0;}bool IsFull(Sxtack pstack){ assert(psta
2021-08-18 20:23:47
74
原创 链式队列的实现
我尾部进入,头部出#include<stdio.h>#include<stdlib.h>#include<assert.h>#include<string.h>typedef int ElemType;typedef struct Node{ ElemType data; struct Node* next;}QueueNode;typedef struct Head{ struct Node* front; struct Nod
2021-08-17 10:04:12
42
原创 哈希表的链式建立以及查找等实现
#include<stdio.h>#include<stdlib.h>#include<assert.h>#include<string.h>#define MAXSIZE 10typedef int ElemType;typedef struct HashNode{ ElemType elem; struct HashNode* next;}HashNode;typedef struct{ HashNode* Hashtable
2021-08-16 20:16:36
252
原创 输出系统日期和时间
我们引入头文件time.h,提供时间存储定义类型,以及系统时间结构体–tm。#include<stdio.h>#include<stdlib.h>#include<time.h>int main(){ int commond[] = { 0,1,2,3 }; int num; struct tm sysTime; printf("如需帮助请输入数字0!\n"); printf("请输入命令符:\n"); while (1) { scanf_s
2021-08-12 18:48:49
611
1
原创 文件的复制
把当前文件复制到另一个文件中,这怎么复制呢,刚开始那会是懵的,感觉很简单,但又很难想到,后面想到了,要复制到另一个文件,我们先从这个文件里面读取一个字符,然后把这个字符写入到要复制的文件中,知道被读取文件到达文件末,好,行动!int main(){ FILE* fp; errno_t res = fopen_s(&fp, "Tst文件.cpp", "r"); FILE* fw; errno_t res1 = fopen_s(&fw, "xing.txt", "w"); if (
2021-08-03 11:53:37
186
原创 双向循环链表啊啊啊啊
上次写的是双向链表,我就说书上为啥返回的是当前节点,因为人家是循环的,可能我没搞清楚老师的要求,写了好久的双向链表,然后进行插入删除,然后到了头插头删出现了问题,最后在里面用了条件判别,下面就是双向循环链表,哇哦嗷嗷#include<stdio.h> // pirntf; scanf;#include<stdlib.h> // malloc free exit #include<assert.h> // assert;#include<string.h&
2021-07-30 23:30:27
95
1
原创 双向循环链表的头插尾插,头删尾删
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<assert.h>typedef int ElemType;typedef struct ListNode{ ElemType data; struct ListNode* prev; struct ListNode* next;}ListNode;typedef struct{ struct ListNod
2021-07-28 13:38:21
166
原创 单链表的实现
#include<stdio.h> // pirntf; scanf;#include<stdlib.h> // malloc free exit #include<assert.h> // assert;#include<string.h>#if 0typedef int ElemType;typedef struct ListNode{ int data; struct ListNode* next;}ListNode;typed
2021-07-28 11:20:04
50
原创 带头结点的头插,尾插
带了头结点的尾插比不带头结点的尾插好写,不需要考虑刚开始r->next不存在的情况;LinkList Init_head(){ LinkList head = (LinkList)malloc(sizeof(LNode)); if (head == nullptr)return nullptr; head->next = nullptr; for (int i = 1; i < 10; ++i) { LinkList s = (LinkList)malloc(sizeof
2021-07-28 11:09:27
166
原创 双向链表的实现
书上是返回当前结点,但是这样头插和尾插的前驱会是null,所以为了在一个程序里实现头插,尾插,随便插的功能,我返回了其前驱,然后插入时用if进行选的插入的方法,也许返回当前结点也可以插入,但我还是没有想到来着,啊哦,哈?#include<stdio.h> // pirntf; scanf;#include<stdlib.h> // malloc free exit #include<assert.h> // assert;#include<string.
2021-07-28 10:47:39
99
原创 无头结点的头插,尾插
下面个人缩写,如有代码繁琐或错误请勿喷,如果可以的话,请指出,谢谢#include<stdio.h>#include<stdlib.h>#include<assert.h>#include<string.h>typedef int ElemType;typedef struct LNode{ ElemType data; struct LNode* next;}LNode, *LinkList;LinkList Tail_Insert
2021-07-28 10:44:12
64
原创 不定长顺序表
顺序表在生活中不怎么使用,人们一般用顺序表的话,我感觉就都用成了数组。#include<stdio.h>#include<stdlib.h>#include<assert.h>#include<string.h>#define LIST_INIT_SIZE 100#define LISTINCREMENT 10#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define
2021-07-25 17:50:01
49
原创 C语言--扫雷游戏
编写一个扫雷游戏,我们首先要清楚游戏规则:扫雷就是要把所有非地雷的格子揭开即胜利;踩到地雷格子就算失败。游戏主区域由很多个方格组成。使用鼠标左键随机点击一个方格,方格即被打开并显示出方格中的数字;方格中数字则表示其周围的8个方格隐藏了几颗雷;如果点开的格子为空白格,即其周围有0颗雷,则其周围格子自动打开;如果其周围还有空白格,则会引发连锁反应;在你认为有雷的格子上,点击右键即可标记雷;如果一个已打开格子周围所有的雷已经正确标出,则可以在此格上同时点击鼠标左右键打开其周围剩余的无雷格。转化为c语言的东西就
2021-07-12 23:21:06
254
2
原创 冒泡排序,插入排序,快速排序
排序#include<stdio.h>#include<stdlib.h>#include<assert.h>#include<time.h>void Swap(int &x, int &y){ int tmp = x; x = y; y = tmp;}void Init_Ar(int* ar, int n){ assert(ar != nullptr); srand((size_t)time(nullptr));
2021-06-06 14:38:09
92
原创 用结构体移动数组
#define ARSIZE 10struct MoveArray{ int data[ARSIZE]; int curpose; int maxsize;};int GetElem(struct MoveArray* str, int index){ return str->data[(str->curpose + index) % str->maxsize];};void Init_Array(struct MoveArray* str){ scanf_s(
2021-06-03 12:17:46
234
原创 上机题2020_5_29(水仙花数,猴子偷桃等)
1、输入一行字符,分别统计出其中英文字母,空格,数字和其他字符的个数。这个问题我之前博客写过,我们最普通的就是用ASCII码作为判断依据,输入一个字符看它在哪个范围内,然后就累计加一,可以翻看我之前的博客,但显然出题人是想让我们用c附录后面的库函数<ctype.h>,具体操作如下void Total(char ar[]){ int alpha = 0, digit = 0, space = 0, others = 0; for (int i = 0; ar[i] != '\0'; ++
2021-05-30 18:12:39
359
原创 c语言--查表法
定义大小为100的整型数组,使用随机函数给数组元素赋值。数值范围1…100,并且排序,使用冒泡排序实现。我们可以将其再分开实现,先给数组赋值,然后再用冒泡排序给它排个序就欧克了。void Print(int* br, int n){ for (int i = 0; i < n; ++i) { printf("%4d", br[i]); if ((i + 1) % 10 == 0) { printf("\n"); } }}int FindValue(int* br,
2021-05-26 23:57:58
7777
原创 用C语言判断--某年某月某日是这一年的第几天
C判断输入的年月日是这一年的第几天这道题我们主要是练就思路问题,然后是解题方法。比如我们看到题目,接下来就应该想到一些特殊情况:一年中的月份有大月和小月,而且还有最特殊的是二月,在闰年是28天,平年是29天,然后继续想,就会知道我们接下来要做的就是想到判断闰年的条件,然后把月份以某种形式表达出来,比如用switch,或者数组,然后就可以开始写代码了。#define YEAR_ERROR -1 //告诉人们这是年份输入错误,不然返回-1也不知道哪里错了,使其更具有可读性#defin
2021-05-26 00:44:04
1982
1
原创 学会使用库函数,让代码高级起来。
判断一个字符属于什么类型例:我们初始化一个字符型变量,然后输入它的值,判断它属于什么类型,control类型还是digit类型等;int main(){ char ch='\0'; printf("please input a character:"); ch=getchar();//此处可以用getchar尽量少用scanf,不易出错; if(ch<=32) { printf("this is a control character\n"); } else if(ch>
2021-05-20 00:06:43
107
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人