Background
想来想去,把它作为将来自己的培训内容也可把233,也当复习了整理一遍
part0
环境搭建:phpstudy&&phpstorm
part1 html+css基础知识
正常的<title><body>
然后有序无序列表<ol><ul>
<a href 超链接 伪协议xss
关注一下target的参数 blank self
<img src 引进图片 onerror事件xss
引进图片的方式可以浅谈一下绝对路径和相对路径
多媒体标签
<audio src
表格标签
<table border属性有表格框 cellspacing表格缝隙 th表头
背景颜色bgcolor
<form>表单 比较重点的<iframe>
嵌入也可以造成xss之类的
css基础知识
内嵌式css
<p style="border: 1px solid red; padding: 5px">
第二种
<style type="text/css">
/*
css
*/
p{
border: solid 1px red;
padding: 30px
}
</style>
第三种外部引进
css 通过选择器来定位
demo
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>测试css2</title>
<style type="text/css">
.div1{
border: solid;red 1px;
background-color: #f00;
color:#000;
width: 400px;
height: 200px;
}
</style>
</head>
<body>
<div class="div1">
php漏洞挖掘
</div>
</body>
</html>
boostrap jquery下载
拖出boostrap.min.css boostrap.min.js jquery .js
新建一个html
导入这几个东西
<script type="text/javascript" src ="./jueqry-3.6.0.js" ></script>
<script type="text/javascript" src="./bootstrap.min.js"></script>
<link rel="stylesheet" type="text/css" href="./bootstrap.min.css">
然后用一些写好的东西
bootstrap一个登录框的实例
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>留言板</title>
<script type="text/javascript" src ="./jueqry-3.6.0.js" ></script>
<script type="text/javascript" src="./bootstrap.min.js"></script>
<link rel="stylesheet" type="text/css" href="./bootstrap.min.css">
</head>
<body>
<nav class="navbar navbar-default">
<div class="container-fluid">
<!-- Brand and toggle get grouped for better mobile display -->
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#">留言板</a>
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav">
<li><a href="#">我要留言</a>
</ul>
<form class="navbar-form navbar-right">
<div class="form-group">
<input type="text" class="form-control" placeholder="Search">
</div>
<button type="submit" class="btn btn-default">搜索留言</button>
</form>
</div><!-- /.container-fluid -->
</nav>
<div class="row">
<div class="col-md-4"></div>
<div class="col-md-4">
<legend>用户注册</legend>
<form class="form-horizontal">
<div class="form-group">
<label for="inputusername" class="col-sm-2 control-label">Username</label>
<div class="col-sm-10">
<input type="username" class="form-control" id="inputusername" placeholder="username">
</div>
</div>
<div class="form-group">
<label for="inputEmail3" class="col-sm-2 control-label">Email</label>
<div class="col-sm-10">
<input type="email" class="form-control" id="inputEmail3" placeholder="Email">
</div>
</div>
<div class="form-group">
<label for="inputPassword3" class="col-sm-2 control-label">Password</label>
<div class="col-sm-10">
<input type="password" class="form-control" id="inputPassword3" placeholder="Password">
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<div class="checkbox">
<label>
<input type="checkbox"> Remember me
</label>
</div>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-primary">Sign in</button>
</div>
</div>
</form>
</div>
<div class="col-md-4">
</div>
</div>
</body>
</html>
part2 php知识
平常的学习中要经常搜索函数的用法,现用现查
变量命名 $ 由字母数字下划线开头 不能以数字开头
php的注释 和c语言大致相同
数据类型
整型
浮点型
字符型 单引号双引号都行
bool型 真假
array 数组 索引数组 关联数组
NULL 空类型
资源类型和对象类型
先说三个函数
isset()来判断变量是否存在 返回值是true和false
var_dump()打印数据类型
gettype()取数据类型
第一个在挖掘漏洞的大知识点
弱类型等于
弱类型
var_dump("1"==1);
var_dump("1a"==1);
强类型等于
然后第一个比较让人晕的知识点 三元运算符
结果为0
三元运算符的方法是前面的不等式成立则是冒号前面的值 不然就是冒号后面的值
主要结构
选择结构循环结构
if ..else..
switch..case..
php最常用的东西字符串详解
字符串变量用.拼接
双引号可以解析变量 单引号不行
strlen()函数 计算长度
一个汉字占三个字符
mb_strlen() 第二个参数是解码形式
strpos()第一个参数待查字符串 第二个是要查的字符串 返回值是false或者数字位置
stripos()不区分大小写的strpos
str_replace()替换
strstr()返回字符串查找到元素和元素之后的字符串
stristr不区分大小写
substr截取子串 字符串,初位置,末位置
strrchr()取文件后缀名
split正则分割
explode 数组分割
implode 将数组转换为字符串
trim()去除首尾的空格
ltrim()左
rtrim()右
addslashes 用反斜线引进字符串 防止 sql
htmlspecialchars 过滤xss
数组
索引数组和关联数组
遍历数组
第一种 for循环打印
也可以用foreach
foreach ($arr as $key => $value) {
echo $key."---".$value;
}
超全局变量
$GLOBALS 其实是个包含以下数组的二维数组
$_SERVER 服务器信息
$_GET 浏览器传参/表单传参
$_POST 浏览器传参/表单传参
$_REQUEST $_GET + $_POST
php常量
define
超全局刚才说过
全局
局部 函数如果用&符号传参是可以改函数外的值
php的cookies和session
setcookies设置失效时间
小坑(用cookies的特性写一个页面访问次数)
<?php
$num =0;
if(empty($_COOKIE["acces"]))
{
setcookie("access",1);
//echo $_COOKIE["access"];
echo "1";
}
else
{
$num = $_COOKIE["access"];
$num++;
setcookie("access",$num);
//echo $_COOKIE["acces"];
echo $num;
}
?>
setcookies第一次会失效
$_SESSION使用之前要session_start()
$_SESSION 登陆测试
SESSIOn.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>session 登陆测试</title>
</head>
<body>
<form action="session.php" method="post">
用户名<input type="text" name="name1">
密码<input type="password" name="pass1">
<input type="submit" name="登陆">
</form>
</body>
</html>
session.php
<?php
session_start();
if(empty($_POST))
{
echo "No";
}
else{
$name = $_POST['name1'];
$pass = $_POST['pass1'];
if($name =="admin" && $pass =="123")
{
$_SESSION["name"] ="admin";
echo 1;
}
else
{
echo "无法登陆";
}
}
?>
文件操作
require(报错中止执行)
include(报错不执行)
require_once
include_once
当然 有的ctf 有绕过require_once的
文件上传
__DIR__当前目录
echo dirname(__DIR__)上层目录
realpath真实目录
unlink删除函数
file_get_contents
file_put_contents
MYSQL
基础命令不想再提了。。
约束类型
not null
defaulet...
alter table add 给表加列
delete 和drop区别 drop会删除表的结构
mysql查询操作
like '%xx'模糊
group+ having
连接查询
join on
内置函数
floor()向下取整
database() user() version() loadfile()
OOP
static
A::$location调用
static是可以重新赋值的
const不可以
子类中可以这样子
parent::show()
调用父类函数
final之后不能重写
抽象类和接口
抽象类和接口都不能实例化
复用类也不可以,这些在pop链中至关重要
单例模式(只用一个类,类不可以继承)
mysql和php搭配写一个增删改查
<?php
abstract class aDB
{
abstract public function conn();
abstract public function getAll($sql);
abstract public function getRow($sql);
abstract public function getOne($sql);
abstract public function Exec($sql);
abstract public function lasiId();
}
class Mysql extends aDB
{
public $link = null;
public function __construct()
{
$this->link = new mysqli("localhost", "root", "root", "admin", 8889);
}
public function conn()
{
return $this->link;
}
public function getAll($sql)
{
$res = $this->link->query($sql);
$data = array();
while ($row = $res->fetch_assoc()) {
$data[] = $row;
}
return $data;
}
public function getRow($sql)
{
// TODO: Implement getRow() method.
$res = $this->link->query($sql);
$row = $res->fetch_assoc();
return $row;
}
}
?>
PDO预编译