记录学习Web安全从入门到入土的第一天
安全术语
今天一个同专业的学长告诉我,要想入这一行就得最起码先把专业术语搞明白,然后我就去百度了许多Web安全方面的术语,下面罗列部分。
一句话木马
一句话木马短小精悍,而且功能强大,隐蔽性非常好,在入侵中始终扮演着强大的作用。
中国菜刀
“中国菜刀”是一款由台湾技术大牛开发的web shell后门。只论技术性,“中国菜刀”配置简便、功能强大、使用方便,可以说是一款强大好用的“web管理工具”。
0day
0DAY漏洞 最早的破解是专门针对软件的,叫做WAREZ,后来才发展到游戏,音乐,影视等其他内容的。0day中的0表示zero,早期的0day表示在软件发行后的24小时内就出现破解版本,现在我们已经引申了这个含义,只要是在软件或者其他东西发布后,在最短时间内出现相关破解的,都可以叫0day。 0day是一个统称,所有的破解都可以叫0day。
payload
它的本意是负载的意思,在安全方面是指进行有害操作的部分。例如:数据销毁、发送垃圾邮件等。
EXP
它是exploit的缩写,意为利用,在安全方面意为漏洞利用,指的就是利用程序中的某些漏洞,来得到计算机的控制权(使自己编写的代码越过具有漏洞的程序的限制,从而获得运行权限)
反弹shell
与标准shell对应,本质上是网络概念的客户端与服务端的角色反转。通俗理解就是假设我们攻击了一台机器,打开了该机器的一个端口,攻击者在自己的机器去连接目标机器(目标ip:目标机器端口),这是比较常规的形式,我们叫做正向连接,但是有很多情况,正向链接不能使用,例如下面的情况。
1.某客户机中了你的网马,但是它在局域网内,你直接连接不了。
2.目标机器的ip动态改变,你不能持续控制。
3.由于防火墙等限制,对方机器只能发送请求,不能接收请求。
对于病毒,木马,受害者什么时候能中招,对方的网络环境是什么样的,什么时候开关机等情况都是未知的,所以建立一个服务端让恶意程序主动连接,才是上策。
所以这时候反弹shell就起作用了,它的作用就是攻击者指定服务端,受害者主机主动连接攻击者的服务端程序,就叫反弹连接。
提权
提高自己在服务器中的权限,主要针对网站入侵过程中,当入侵某一网站时,通过各种漏洞提升WEBSHELL权限以夺得该服务器权限。
序列化和反序列化
序列化(serialization)在计算机科学的数据处理中,是指将数据结构或对象状态转换成可取用格式(例如存成文件,存于缓冲,或经由网络中发送),以留待后续在相同或另一台计算机环境中,能恢复原先状态的过程。依照序列化格式重新获取字节的结果时,可以利用它来产生与原始对象相同语义的副本。对于许多对象,像是使用大量引用的复杂对象,这种序列化重建的过程并不容易。面向对象中的对象序列化,并不概括之前原始对象所关系的函数。这种过程也称为对象编组(marshalling)。从一系列字节提取数据结构的反向操作,是反序列化(也称为解编组、deserialization、unmarshalling)。
序列化在计算机科学中通常有以下定义:
对同步控制而言,表示强制在同一时间内进行单一访问。
在数据储存与发送的部分是指将一个对象存储至一个存储介质,例如文件或是存储器缓冲等,或者透过网络发送数据时进行编码的过程,可以是字节或是XML等格式。而字节的或XML编码格式可以还原完全相等的对象。这程序被应用在不同应用程序之间发送对象,以及服务器将对象存储到文件或数据库。相反的过程又称为反序列化
以上内容参考自:
https://www.cnblogs.com/iouwenbo/p/11277453.html
https://www.jianshu.com/p/892300bcf273
百度百科、维基百科、知乎
HTTP请求与响应报文
Request
GET
GET /562f25980001b1b106000338.jpg HTTP/1.1
Host img.mukewang.com
User-Agent Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36
Accept image/webp,image/*,*/*;q=0.8
Referer http://www.imooc.com/
Accept-Encoding gzip, deflate, sdch
Accept-Language zh-CN,zh;q=0.8
第一部分:请求行,用来说明请求类型,要访问的资源以及所使用的HTTP版本.
GET说明请求类型为GET,[/562f25980001b1b106000338.jpg]为要访问的资源,该行的最后一部分说明使用的是HTTP1.1版本。
第二部分:请求头部,紧接着请求行(即第一行)之后的部分,用来说明服务器要使用的附加信息
从第二行起为请求头部,HOST将指出请求的目的地.User-Agent,服务器端和客户端脚本都能访问它,它是浏览器类型检测逻辑的重要基础.该信息由你的浏览器来定义,并且在每个请求中自动发送等等
第三部分:空行,请求头部后面的空行是必须的即使第四部分的请求数据为空,也必须有空行。
第四部分:请求数据也叫主体,可以添加任意的其他数据。
这个例子的请求数据为空。
POST
POST / HTTP1.1
Host:www.wrox.com
User-Agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)
Content-Type:application/x-www-form-urlencoded
Content-Length:40
Connection: Keep-Alive
name=Professional%20Ajax&publisher=Wiley
第一部分:请求行,第一行明了是post请求,以及http1.1版本。
第二部分:请求头部,第二行至第六行。
第三部分:空行,第七行的空行。
第四部分:请求数据,第八行。
Response
example
HTTP/1.1 200 OK
Date: Fri, 22 May 2009 06:07:21 GMT
Content-Type: text/html; charset=UTF-8
<html>
<head></head>
<body>
<!--body goes here-->
</body>
</html>
第一部分:状态行,由HTTP协议版本号, 状态码, 状态消息 三部分组成。
第一行为状态行,(HTTP/1.1)表明HTTP版本为1.1版本,状态码为200,状态消息为(ok)
第二部分:消息报头,用来说明客户端要使用的一些附加信息
第二行和第三行为消息报头.
Date:生成响应的日期和时间;Content-Type:指定了MIME类型的HTML(text/html),编码类型是UTF-8.
第三部分:空行,消息报头后面的空行是必须的.
第四部分:响应正文,服务器返回给客户端的文本信息。
空行后面的html部分为响应正文。
以上内容摘自:https://www.cnblogs.com/ranyonsue/p/5984001.html
MySQL基本操作
连接MySQL
首先要配置MySQL变量(我有一篇介绍过了,不妨可以去看看),然后打开cmd,先打开到你MySQL的安装目录。
然后输入mysql -h localhost -u root -p
(-h是主机名默认为localhost,-u是用户名默认为root,如果你的数据库没有密码,那么你可以直接输入mysql然后回车就进入到了数据库,如果有密码那么输入完-p后回车会让你输入你的数据库密码,然后就进入了数据库)
出现下图就代表成功连接数据库
MySQL是基于SQL语句的,由于SQL语句在windows系统上不区分大小写所以以下大写均可以换为小写
查看数据:
SELECT column_name,column_name FROM table_name;(表内指定列的内容)
SELECT column_name,column_name
FROM table_name
WHERE column_name operator(运算符大部分情况都是等号) value;(查找表内列的指定内容,最详细)
SELECT * FROM table_name;(表内所有内容)
增加数据(插入数据):
第一种:无需指定要插入数据的列名,只需提供被插入的值即可:
INSERT INTO table_name
VALUES (values1,values2,…);
第二种:需要指定列名及被插入的值:
INSERT INTO table_name (column1,column2,column3,…)
VALUES (value1,value2,value3,…);
删除数据:
有三种:DELETE、DROP、TRUNCATE;
删除表内指定内容
DELETE FROM table_name
WHERE some_column=some_value;
删除整个表内内容
DELETE FROM table_name;
DROP table_name;
会把整个表删除,且释放空间(不可逆)
TRUNCATE table_name;
同样会删除表内所用内容,但不删除表的结构(可逆,能找回)
更新数据:
更新表内指定内容
UPDATE table_name
SET column1=value1,column2=value2,…
WHERE some_column=some_value;
更新表内所有内容
UPDATE table_name
SET column1=value1,column2=value2,…;
去掉重复值
SELECT DISTINCT语句可以过滤掉表内重复信息
SELECT DISTINCT column_name,column_name
FROM table_name;