0%

信息收集是渗透测试的第一步,本文总结目前信息收集的具体操作步骤。

网站信息

whois信息

可以收集到的信息有:

  • 联系人
  • 邮箱(可以到社工库进一步查询)
  • 电话

收集途径有:

阅读全文 »

复习一下PHP中常见的危险函数:

文件读取

  • file_get_contents(),该函数可以读取其他协议造成SSRF

    1
    2
    3
    $src=$_GET['src'];
    $homepage = file_get_contents($src);
    echo $homepage;
  • highlight_file(),高亮显示文件内容

  • show_source(),highlight_file()的别名
  • fopen()、fread(),fgets()、fgetss()、fpassthru()等
    • fread(fopen($filename,”r”), $size); //读取$size长度的文件
    • fgets(fopen($filename, “r”)); //读取一行
    • fgetss(fopen($filename, “r”)); //读取一行并过滤HTML标记
    • fpassthru(fopen($filename, “r”)); //读取到文件结束
  • readfile(),读取文件并返回至页面

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <?php
    $file = $_GET['file'];

    if (file_exists($file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename="'.basename($file).'"');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    readfile($file);
    exit;
    }
    ?>
  • file(),把文件读进数组中

  • php_strip_whitespace(),读取一个php文件并返回一个去掉注释和换行的文本,有意思的是,该函数可以去掉任意语言的注释,只要这个语言的注释风格与php相同并且在文件头加入<?php就行可:
    1549526799636
  • parse_ini_file(),只能读取ini文件
阅读全文 »

本地文件包含

1
<?php include($_GET['file']);?>

文件读取

本地文件包含可以作为文件读取使用:

1
2
3
4
5
$ curl http://127.0.0.1/include.php?file=/etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
...
阅读全文 »

SSRF成因

SSRF是指存在漏洞的服务器存在对外发起请求的功能,而请求源可由攻击者控制并且服务器本身没有做合法验证,诸如如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?PHP
$url = $_GET['url'];
$ch = CURL_INIT();
CURL_SETOPT($ch, CURLOPT_URL, $url);
CURL_SETOPT($ch, CURLOPT_HEADER, FALSE);
CURL_SETOPT($ch, CURLOPT_RETURNTRANSFER, TRUE);
CURL_SETOPT($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
// 允许302跳转
CURL_SETOPT($ch, CURLOPT_FOLLOWLOCATION, TRUE);
$res = CURL_EXEC($ch);
// 设置CONTENT-TYPE
CURL_CLOSE($ch) ;
//返回响应
echo $res;
?>
阅读全文 »

CSRF成因

GET型

脆弱代码

存在CSRF的GET型请求如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@app.route('/get', methods=['GET'])
def get():
if session.get('user','')=='admin':
ret = "Admin do something!"
else:
ret = "No Privilege..."
return ret

@app.route('/login', methods=['GET'])
def login():
user=request.args.get("user", "Null")
session["user"]=user
template="""
<h3> Login as {{ user }}... </h3>
"""
return render_template_string(template, user=user)


if __name__ == '__main__':
app.run(host='127.0.0.1', port=8888, debug=True)
阅读全文 »

JSONP原理

JSONP(JSON with Padding)是一种跨域获取数据的方法,因为带src属性的标签如<script>允许跨域(1. 在CSP没有设置的情况下, 2.跨域时是可以带cookie的),因此前端可以设置一个callback请求并生成一个访问后台某个<script>的链接,后台在链接中动态的将数据包裹在先前的callback函数中,作为参数返回给前台,这样就完成了跨域获取数据的效果。

阅读全文 »

HTTP 请求

  • GET 用于获取数据,无请求body

  • POST 用于添加数据

    其content-type不同,body中的格式也不同

  • PUT 用于添加或更新数据

    Request:

    1
    2
    3
    4
    5
    6
    PUT /new.html HTTP/1.1
    Host: example.com
    Content-type: text/html
    Content-length: 16

    <p>New File</p>

    Response:

    若资源不存在需要创建,那么服务器需响应201表明内容已创建:

    1
    2
    HTTP/1.1 201 Created
    Content-Location: /new.html

    若资源存在则返回200204:

    1
    2
    HTTP/1.1 204 No Content
    Content-Location: /existing.html
  • PATCH 用于更新数据

    Request:

    1
    2
    3
    4
    5
    6
    7
    PATCH /file.html HTTP/1.1 
    Host: www.example.com
    Content-Type: application/example
    If-Match: "e0023aa4e"
    Content-Length: 100

    {"op":"move", "from":"/a/b/c", "to":"/a/b/d"}

    Response:

    正确回应应该为204因为200会带返回body

    1
    2
    3
    HTTP/1.1 204 No Content
    Content-Location: /file.txt
    ETag: "e0023aa4f"
  • DELETE 用于删除数据

    Request:

    1
    DELETE /file.html HTTP/1.1

    Response:

    202已经接受但操作未执行完,204或者200(需返回body)

    1
    2
    3
    4
    5
    6
    7
    8
    HTTP/1.1 200 OK 
    Date: Wed, 21 Oct 2015 07:28:00 GMT

    <html>
    <body>
    <h1>File deleted.</h1>
    </body>
    </html>
  • HEAD 用于获取GET请求的响应头,无请求body

  • OPTIONS 用于描述通信选项,如CORS使用或者获取服务器所支持的方法

  • TRACE 回显服务器收到的请求

阅读全文 »

本文首次发表在Freebuf:https://www.freebuf.com/articles/web/195925.html

同源策略

准确的说,同源策略是指,浏览器内部在发起如下请求时,该来源必须是当前同源的HTTP资源:

  1. 以跨站点的方式调用XMLHttpRequest或者Fetch API。
  2. Web字体(用于CSS中@ font-face的跨域字体使用)
  3. WebGL textures
  4. 使用drawImage绘制到canvas的图像/视频帧。
  5. 样式表(用于CSSOM访问)
阅读全文 »

简介

内容安全策略 (CSP) 是一个额外的安全层,用于允许站点的管理者控制页面上哪些资源能够被用户代理程序加载。以阻止包括跨站脚本 (XSS) 、数据注入等攻击。

使用

在HTTP头部指定策略

1
Content-Security-Policy: policy

使用meta标签指定策略

阅读全文 »