基础web开启征程1
记住查看页面源代码
ASCII 码十进制编码
&#数字; 格式 加密、解密
禁用js
某些网站会有一些动态弹窗影响阅读,或必须登录才能浏览内容,等等。对正常网页使用造成负担等
在火狐浏览器中,您可以通过以下步骤来禁用JavaScript:
- 在地址栏中输入“about:config”并按回车。
- 搜索“javascript.enabled”。
- 双击搜索结果,将其值从true改为false。
头等舱!!! 响应头
F12 网络 响应头
get传参 /?what=flag
英文符号!!!
POST传参
HackBar,选中“Post data”,输入: what=flag 最后选中“Execute”按钮,就能得到flag。
source 渗透测试
==**base64编码 ** 4的倍数 、 结尾常带 ===
当没有啥信息后,可以扫描一下目录
dirsearch -u url
看看有没有啥特殊信息
wget -r url 下载目录里面的内容
ls 查看
git reflog 查看日志
git show xxxxx 一个一个查看日志里面的具体信息
php基本知识
php中变量必须以$开头!!!
is_numeric() 是 PHP 内置函数,用于判断变量是否为数字或纯数字字符串(比如 '123' 会被判定为 true)。
! 取反
php == 弱类型 如果一个数值和字符串进行比较的时候,会将字符串转换成数值
字符串转数值的底层逻辑(PHP 特有)
PHP 对字符串进行数值转换时,只会识别字符串开头的数字部分:
- 如果字符串以数字开头(如 "123admin"),会提取开头的数字部分转为数值(结果为 123);
- 如果字符串完全不含数字(如 "admin"),或者数字不在开头(如 "a123"),转换结果为 0;
- 空字符串("")转换结果也为 0。
备份是个好习惯
md5值
- 长度固定是32位
- 字符集仅仅有0-9和a-f组成
备份文件一般是 .bak 或者 .swp
关注出来扫描的文件后缀!!!
就是dirsearch -u url的时候,可以稍微为等一等,如果还是长时间没有扫描出来的话,可以先中止,然后在进行扫描!!!!
PHP 中 md5() 函数处理数组的 “特性” 和 弱比较(==)的规则
“MD5 碰撞” 校验场景
// 接收两个 GET 参数:key1 和 key2$key1 = $_GET['key1'];$key2 = $_GET['key2'];// 校验条件:// 1. key1 和 key2 必须不同(!=)// 2. key1 的 MD5 值 和 key2 的 MD5 值必须相同(==)if ($key1 != $key2 && md5($key1) == md5($key2)) {echo "绕过成功!flag{...}";} else {echo "失败";}
- 用数组绕过是最简单的场景
md5() 它只能处理 “字符串 / 数字”,不能处理 “数组”。
因为 key1 和 key2 都是数组,md5() 处理它们时都会返回 NULL
PHP 中弱比较(==)会认为 “两个 NULL 是相等的”(NULL == NULL → true)
http://目标地址/?key1[]=a&key2[]=b
还是要好好分析代码啊!!!!
代码审计 双写绕过!!!
str_replace(“敏感词”,“ ”,$input) 过滤敏感内容,但只执行一次
- 输入敏敏感词感词(双写敏感词)
- 第一次替换掉中间的「敏感词」,剩下 敏感词(刚好是有效内容)
利用「单次替换不递归」的漏洞
双写绕过的核心是让过滤后能 “残留有效关键字”
替换过程:str_replace 找到中间的 key 并替换为空 → 剩下 k + ey → 组合起来是 key(刚好是我们需要的关键字)。
hash值比较漏洞
两个密码经过哈希以后,值如果是 0E 开头后面都必须是数字,那么 == 和 != 会认为他们相等
php解析结果均为0
MMHUWUV
NOOPCJF
QNKCDZO
240610708
s878926199a
如果一个字符串以 0e 开头,且后面全是数字(比如 0e123456),PHP 会把它当作「科学计数法」,计算结果是 0(因为 0e 后面不管跟多少数字,都是 0 × 10^n = 0);
变量1
flag In the variable !<?php error_reporting(0);//关闭php错误显示include "flag1.php";//引入flag1.php文件代码highlight_file(__file__);//对文件进行语法高亮显示if(isset($_GET['args'])){$args = $_GET['args'];if(!preg_match("/^\w+$/",$args)){die("args error!");}eval("var_dump($$args);");}?>
分析代码
if(!preg_match("/^\w+$/",$args))
以 /^ 开始,\w 表示任意一个单词字符
[a-zA-Z0-9] , +将前面的字符匹配一次或多次
$/ 结尾
正则表达式!!!
preg_match(正则, 字符串) 正则函数
$GLOBALS 只有大写字母和下划线
$$ 双变量
$$args这个用法,如果说$args="hello",$hello="world",那么echo $$args结果是world,相当于打印一次$args,然后将它的值作为一个变量再次打印。
PHP 中的许多预定义变量都是“超全局的”
$GLOBALS
$GLOBALS 这个超全局变量可以打印出当前文件范围内所有变量和值
globals 单词要写正确!!!
本地管理员 admin 127.0.0.1
base64 !!!! (结尾有==等于号!!!!)
base64 加密解码
admin 之类的!!!
IP 禁止访问之后,其实就不会了……
怎么解决呢???
X-Forwarded-For XFF http请求头字段
记录客户端的真实ip和请求经过的代理链路
X-Forwarded-For: 192.168.1.100, 10.0.0.1, 203.0.113.10“客户端真实 IP → 第一层代理 IP → 第二层代理 IP …”
后端服务器 ”怎么获取客户端真实ip “
服务器和客户端通信,本质是TCP连接
一、直连
二、经过代理
客户端经过代理服务器来访问服务器,代理服务器会在转发请求时,自动添加一个HTTP请求头(XFF),把客户端真实ip写进去!!!
X-Forwarded-For 是 可以手动伪造的!
只允许本地 IP(127.0.0.1)访问的限制,你就可以手动添加请求头 X-Forwarded-For: 127.0.0.1,让服务器误以为你是本地访问 —— 这就是常说的 “XFF 伪造绕过”~
Invalid credentials 用户名、密码或验证信息不正确