寒假学web--day02

简介

今天学习的是php的一些东西,仍然比较基础

php基础知识

php是一种脚本语言,文件的后缀名为php

它是执行在服务器上的,通过url访问来解释执行

特点:简单易学,部署简单,开发快速,多平台兼容,适合中小企业网站开发

安装环境

使用phpstudy,或者网上的一些php在线运行网站,可以使用菜鸟工具(PHP 在线工具 | 菜鸟工具

开发环境:vscode

get与post

bp里面可以在repeater中右键,直接把get改为post方式

可以同时发get和post的数据,但是不能同时发get和post的包

telnet手动发包

注意:你需要现在程序和功能中开启telnet客户端

  1. telnet google.com 80
  2. 在telnet窗口按下ctrl+] ,就能获得提示,再按下enter打开回显
  3. 输入GET / HTTP/1.1,再连按两次回车
     

php的命令执行

CTF比赛中很多环境都是linux,所以更多的是linux的命令

php可以执行系统命令的函数

  • system
  • passthru
  • exec
  • shell_exec
  • popen
  • pcntl_exec
  • `

php命令执行的应用

比如 ping -c 1 www.baidu.com

  •  命令可控 比如我们可以控制ping这个字符串
  • 参数可控 比如-c这个参数
  • 参数值可控 1和www.baidu.com
  • 整体可控,但是要突破过滤

我们遇到命令执行时,首先要判断可控位置,再突破过滤,如果被包裹的是字符串,我们要考虑怎么逃逸出去,不然永远都只是字符串,无法进行命令执行

这里说一下为什么有时候读到的flag不显示在页面中,而是需要查看源代码

是因为浏览器不认识<?php,所以把他当成了注释,不显示在页面上

一些连接符号

 &&        前后两个命令并列执行,前面执行成功后面才会执行

||        前后两个命令有一个执行成功就可以,前面执行成功则后面的不执行

;        独立的两条,命令执行

黑名单过滤

替换过滤:

比如把cat替换为空,那么我们可以双写绕过,比如双写为ccatat,替换之后就变成了cat

过滤特定字符串:

比如过滤了flag关键字,那么我们可以使用通配符*或者占位符?

*表示任意长度的字符串,可以用于一条命令处理多个文件,如fl*

?表示一个字符,比如fl?ag可以匹配到flag而不能匹配到flaaag

读取文件的命令

cat tac more

利用反引号 

ls `echo '/bin'`

执行该命令可以列出/bin目录下的所有文件

比如我们要cat flag时,flag被ban了

我们可以对flag进行编码绕过

首先

echo 'flag' |base64

得到结果ZmxhZw==

那么我们就可以利用下面的命令来读取flag

cat `echo 'ZmxhZw=='|base64 -d`

符号过滤

过滤空格
<>

读文件时,可以用<>来代替空格 tac<>flag.php

${IFS} ,$IFS$9,{cmd,args}

也可以使用${IFS}或者$IFS$9来代替空格,bash下也可以使用{cmd,args}来代替空格

控制字符串绕过空格

比如%09,%0b,%0c

字符串截断

比如,a=abcd,我想输出字符c,那么我就可以写${a:2:1}

        在做题时,可以先cmd=env,读取环境变量,然后找一个有空格的环境变量,然后找到空格的位置,利用字符串截断来获取空格,这与python的切片操作尤其相似

posted @ 2025-01-18 00:43  onehang  阅读(7)  评论(0)    收藏  举报  来源