Kali 系统自带字典目录wordlists

路径:/usr/share/wordlists/

dirb
big.txt #大的字典
small.txt #小的字典
catala.txt #项目配置字典
common.txt #公共字典
euskera.txt #数据目录字典
extensions_common.txt #常用文件扩展名字典
indexes.txt #首页字典
mutations_common.txt #备份扩展名
spanish.txt #方法名或库目录
others #扩展目录,默认用户名等
stress #压力测试
vulns #漏洞测试

dirbuster
apache-user-enum-** #apache用户枚举
directories.jbrofuzz #目录枚举
directory-list-1.0.txt #目录列表大,中,小 big,medium,small

fern-wifi
common.txt #公共wifi账户密码

metasploit
… #各种类型的字典

webslayer
general #普通字典目录
admin-panels.txt #后台路径 字典
….

Injections #注入字典目录
All_attack.txt #全部攻击
bad_chars.txt #字符注入
SQL.txt #sql注入
Traversal.txt #路径回溯
XML.txt #xml注入
XSS.txt #xxs注入

others #扩展目录
common_pass.txt #通用密码字典
names.txt #用户名字典

stress #压力测试目录

vulns #漏洞测试目录
apache、iis、cgis…

webservicces #web服务目录
ws-dirs.txt #路径测试
ws-files.txt #文件测试

wfuzz #模糊测试,各种字典…

Kali漏扫自动化集成多个漏扫脚本

Kali漏扫自动化集成多个漏扫脚本,每次都要用多个漏洞扫描软件,要打开多次终端,执行命令,通过同事的帮忙,把工具汇集到一起了,尽可能的做的自动化,但是有些情况还是不可以的,普通的web站点问题是不大,定制的项目,规则也要定义,就需要手工去配置了。

#website
name='www.0535code.com'
#url ip 获取url对应的ip
url_ip=`ping -c1 $name|awk -F'[(|)]' 'NR==1{print $2}'`
#port端口
port='80'

#检查DNS域传送漏洞
#dnsmap $name && dnsdict6 -4 $name
#fierce -dns $name
gnome-terminal -t "title-0:fierce" -x bash -c "fierce -dns $name;exec bash;"

#NMAP主机扫描
#nmap -sS -sU -T4 -A -v -PE -PP -PS80,443 -PA3389 -PU40125 -PY -g 53 --script "default or (discovery and safe)" localhost
#nmap -T4 -A -v $name
gnome-terminal -t "title-1:nmap" -x bash -c "nmap -T4 -A -v $name;exec bash;"

#探测应用程序指纹
#curl -I $name && whatweb $name
gnome-terminal -t "title-2-1:curl" -x bash -c "curl -I $name;exec bash;"
gnome-terminal -t "title-2-2:curl" -x bash -c "whatweb $name;exec bash;"

#web漏洞扫描集合,必要的时候,默认页面不是index需要手工执行 替换$name变量
#开源扫描框架golismero
#golismero scan $url -o report.html
gnome-terminal -t "title3:golismero" -x bash -c "golismero scan $name;exec bash;"
#开源 web漏洞扫描器
#grabber -x -u $url
gnome-terminal -t "title4:grabber" -x bash -c "grabber -x -u $name;exec bash;"
#joomscan web扫描软件
#joomscan -u $url
#gnome-terminal -t "title5:joomscan" -x bash -c "joomscan -u $name;exec bash;"
#Web应用程序漏洞检查工具
#wapiti $url --v 2
gnome-terminal -t "title6:wapiti" -x bash -c "wapiti $name --v 2;exec bash;"

#目录文件扫描
#dirb $url
gnome-terminal -t "title7:dirb" -x bash -c "dirb $name;exec bash;"
#开源的(GPL)网页服务器扫描器
#nikto -host $url_ip -port $port
gnome-terminal -t "title8:nikto" -x bash -c "nikto -host $url_ip -port $port;exec bash;"

#手动扫描
#uniscan-gui 一款图形化界面
#sqlmap 扫描注入点
#burpsuite 嗅探数据包
#W3af 格式化漏扫软件
#metasploit wmap 漏扫

关于Cookies和Session的有效时间分析

今天突然有一个疑问,Cookies的有效期和Session的有效期通过php是在服务端设置的,如果过期了,客户端访问是不是就不生效了,还是服务端在内存中会销毁Session,客户端取消了Cookies字段呢?如果加上带cookies访问会有什么效果呢?用php实现测试了下,代码如下:
Cookies有效期设置:

<?php
//测试这个cookies有效期会根据客户端访问的时间,决定是不是有这个cookies字段
//这种方式不靠谱,记录cookies字段发包就可以绕过cookies有效期限制了。
setcookie("user", "ly55521", time()+6);
?>
<?
//第一个实例 cookies有效期演示
echo "user----------".$_COOKIE["user"]."----------<br>";
var_dump($_COOKIE);
?>

通过上面打印cookies,可以发现,在客户端设定了cookies,当cookies的字段过期后,在客户端就没有这个cookies字段了,如果加上这个cookies字段去访问,依然可以得到原来的结果,这里是单纯的cookies,如果是单纯的cookies验证肯定不靠谱,可以做欺骗。
Session有效期设置:

<?
session_start();
$id = "ly55521";
$_SESSION['id'] = $id;
setcookie("PHPSESSID_FUNCTION",$_SESSION['id'], time()+6);
?>
<?
echo $_SESSION["id"]."---------".$_SESSION['pw'];
?>

理论上学习的Session是服务端的,经过实际分析,Session可以放在内存中,也可以自定义放到数据库或者文件中,客户端有一个PHPSESSION或者自定义一个cookies字段保持cookies与session的通讯,cookies放的PHPSESSION是服务端的session做效验的,通过抓包分析,SESSION注销时,客户端Cookies中的PHPSESSION标识将过时,因为内存中没有了,设定了有效期也是一样的,如果没有设置会一直生效貌似,或者默认有个有效时间,具体默认多久有效时间就没研究了。

python飞信发短信接口实现

最近做了个乌云漏洞邮件推送,朋友想用短信实现,据现在了解乌云的漏洞,如果收短信的话,每天会收到不少短信,现在推送的邮件也只看看标题,有时候重要资料泄漏的时候,也可以去拿下重要资料,这个很重要哦。说不定以后一些数据会用得到,虽然一直没有用到过的,也没什么数据,今天主要是实现短信接口,不考虑花钱的了,有免费的为嘛不用,记得之前赶集网一直是用的飞信推送的消息,应该是可以利用飞信免费发短信的,其次就是139邮箱也可以短信邮件通知,之前记得用php做一个表单的时候用过139邮箱,限制了发送频率,而飞信没有限制,估计飞信的难度会比139邮箱低一些。决定研究飞信了,网上看了下飞信官方没有api,只有一些破解版的api,试了下破解版的都不生效了。估计是飞信为了不要他们这么做改版或做限制了。通过抓包分析仍然是很容易破解飞信短信接口的,更重要的是飞信在验证手机号的时候还有重放,这么大的一个产品应该完善的好一些吧。可以重放没关系,至少加个随机数,加个验证码,降低被恶意利用。
发短信的HTTP数据包如下:

“””
POST /WebIM/SendMsg.aspx?Version=12 HTTP/1.1
Host: webim.feixin.10086.cn
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate, br
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
Referer: https://webim.feixin.10086.cn/main.aspx
Content-Length: 91
Cookie: WT_FPC=id=2fcb23760e2cd13e7331459683774250:lv=1459685850316:ss=1459683774250; CmLocation=100|100; CmProvid=bj; mobileNo1=eea9cd7d4a5fc1c3842c95b5597b5bcea80a0c8e@@fab16175347ef6cd6129d6075f9831033a6cd311@@1459683976386; VerificationCode=0e36621b8501448f9299ac8e4eba0c0e; IsCookiesEnable=true; webim_loginCounter=1461335530651; ccpsession=776e58ca-4056-49ef-aa3c-c934f8ef8e2e; webim_usersid=267905802; webim_userstatus=0; webim_login_status=1; webim_remindmsgs=267905802–0-d7b163171d6b447d9c507e24387900a5
Connection: keep-alive

To=1393465590&IsSendSms=1&Msg=111&ssid=952890508p30377-d7b16317-1d6b-447d-9c50-7e24387900a5
“””

下面用python模拟下:

# coding:utf-8
import requests,sys,random
#解决输出问题
reload(sys)
sys.setdefaultencoding( "utf-8" )
#设置头信息
headers={
"Host": "webim.feixin.10086.cn",
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0",
"Accept": "application/json, text/javascript, */*; q=0.01",
"Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",
"Accept-Encoding": "gzip, deflate, br",
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
"X-Requested-With": "XMLHttpRequest",
"Referer": "https://webim.feixin.10086.cn/main.aspx",
"Content-Length": "91",
"Cookie": "WT_FPC=id=2fcb23760e2cd13e7331459683774250:lv=1459685850316:ss=1459683774250; CmLocation=100|100; CmProvid=bj; mobileNo1=eea9cd7d4a5fc1c3842c95b5597b5bcea80a0c8e@@fab16175347ef6cd6129d6075f9831033a6cd311@@1459683976386; VerificationCode=0e36621b8501448f9299ac8e4eba0c0e; IsCookiesEnable=true; webim_loginCounter=1461335530651; ccpsession=776e58ca-4056-49ef-aa3c-c934f8ef8e2e; webim_usersid=267905802; webim_userstatus=0; webim_login_status=1; webim_remindmsgs=267905802--0-d7b163171d6b447d9c507e24387900a5",
"Connection": "keep-alive",
}
#定义访问cookies实例
sid = requests.session()
api = "http://webim.feixin.10086.cn"
#tradeNo = random.randint(11,99)
#API 1
api_1 = api + "/WebIM/SendMsg.aspx?Version=12"
params_1 = {??????????? 'To':'1393465590', #发送人手机号ID
'IsSendSms':'1',
'Msg':'test', #发送的内容
'ssid':'952890508p30377-d7b16317-1d6b-447d-9c50-7e24387900a5',
#appId,key
}
test = requests.post(api_1,params_1,headers = headers)
print test.content

打印出成功响应:{“rc”:200}
预测,目前可能会存在cookies的有效期问题,要保持Cookies的有效时间,针对这个有两种解决方案:
1.如果飞信在服务端没有设置cookies的有效期,则是关闭浏览器后失效的,保持浏览器开着页面的状态就好了,如果做了有效期设置或者访问时效设置,做个客户端定时刷新页面就好了;
2.这个是登陆页面,https://webim.feixin.10086.cn/login.aspx,需要手机接受验证码,可以判断返回信息如果不是200,则去请求验证码,然后输入验证码再次提交保持cookies分析cookies发短信,虽然有点繁琐,但是这种方式能分析出原理。
 

记一次web api接口渗透测试

web api渗透测试,没有界面,其实和有界面都一样,只不过有界面更直观一些,没有界面就需要对比html页面了,这次接触的api,包括appid,token,certificate每次发请求可以通过burpsuite或w3af都可以构造请求,而且请求的参数又提供了一个接口,如果提供的接口数据是自动的,可以获取第一个接口的数据去提交到另一个接口,可是提供数据的接口不是自动化的,也是需要手工配合的,这样只能实现半自动化测试了。用python每次都去对比html的话,不太方便。于是就用django实现了下。因为这次测试环境pc不能访问,还需要伪造微信的User-Agent和Cookies。也便于以后写poc吧。代码如下:

def tests(request):
    headers={
    "Host":"0535code.com",
    "User-Agent":"Mozilla/5.0 (Linux; Android 6.0.1; MI 4LTE Build/MMB29M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/46.0.2490.76 Mobile Safari/537.36 MicroMessenger/6.3.16.49_r03ae324.780 NetType/WIFI Language/zh_CN",
    "Accept":"application/json, text/javascript, */*; q=0.01",
    "Accept-Language":"en-us,en;q=0.8",
    "Accept-Encoding":"gzip, deflate",
    "Content-Type":"application/x-www-form-urlencoded; charset=UTF-8",
    "X-Requested-With":"com.tencent.mm",
    "Origin": "http://0535code.com",
    "Connection":"keep-alive",
    "Referer":"http://0535code.com/",
    "Cookie":"JSESSIONID=ABF49C644F089D00FE6A303D05417AB3; iwowo_weixin_session=b5ab0561-7d6e-47c2-b702-c38a16c51f82",
    }
    sid = requests.session()
    api = "http://0535code.com/poc/"
    api_1 = api + "coder.html"
    params_1 = { 'point':'99',
    'tradeNo':'88888888', #tradeNo,
    'version':'1.0',
    'appId':'90c3d705e46049ea7cb9a56be69f4cf1',
    'sign':'976fb26afe8aa3bbdf26b600611ebc53',
    'QRCodeExpireDate':'2016-05-01 00:00:00',
    #appId,key
    }
    test = requests.get(api_1,params = params_1,headers = headers,verify = False)
    html =  test.content
    echo_html = html.replace(""/", ""http://0535code.com/")
    return HttpResponse(echo_html)

WEB API接口渗透测试

#http://www.csdn123.com/html/itweb/20131113/220009.htm

1.注入(Injection):SQL注入、LDAP注入、OS命令注入
2.无效认证和Session管理方式:cookies欺骗、通过xxs+csrf劫持session等
3.跨站脚本:反射xxs、存储xxs、dom xxs
4.直接引用非安全对象:垂直越权、平行越权类,绕过未授权操作等
5.错误的安全配置:代码异常报错、HTTP请求方法、危险的web组件、IIS文件解析漏洞等
6.暴露敏感数据:fuzz构造请求,爆出接口数据,%20截断看数据库链接等
7.功能级权限控制缺失:功能级越权操作
8.伪造跨站请求:crsf
9.使用已知安全隐患组件:比如java反序列化、bash+cgi远程命令执行等
10.未验证跳转:url任意跳转,未做判断
貌似接口安全主要检查这几个,比如越权有些是在调用接口时产生的漏洞,或者sql注入也可能,接口只是在上级web层作出一些安全隐患检查。

多种方式安装django搭建环境

三种安装方式:
1.pip方式
apt-get install python-pip #安装pip
pip install Django #或者 pip install Django==1.6.10 或者 pip install Django==***
2.系统源获取安装
apt-get install python-django -y #源方式 安装
3.下载本地安装
#https://www.djangoproject.com/download/ 下载 django-***.tar.gz
tar -xvzf django-***.tar.gz
cd django-***
python setup.py install

win下安装使用命令方法:
cd python27/Script/#在该目录下执行
python django-admin.py startproject demo #创建demo项目,在当前目录下会生成demo名称的项目
python django-admin-script.py startapp testapp #创建app项目,与上面会在同级目录下是错误的,app应该在项目路径下

#当前项目管理路径
python manage.py migrate #数据库同步
python manage.py flush? #数据库清空

python manage.py createsuperuser #创建超级管理员
python manage.py changepassword username #修改用户密码

python manage.py dumpdata appname > appname.json #导出数据
python manage.py loaddata appname.json #导出数据

python manage.py shell #项目环境终端
python manage.py dbshell #数据库命令行

Kali下安装django使用命令方法:
django-admin startproject app_pro #创建app_pro项目 /root/app_pro
django-admin startapp testapp #创建app? /root/testapp,应该切换到项目目录,同级目录下创建app是错误的

#当前项目路径,默认为:/root/当前目录下项目管理 app_pro

./manage.py runserver 8000 #不写端口则默认为8000端口,也可以自定义
./manage.py flush #清空当前数据库,要配置数据库后才能操作
./manage.py createsuperuser #创建超级管理员,同上
#dumpdata appname > appname.json && loaddata appname.json #导出数据
#支持的命令如下:
[auth]
changepassword
createsuperuser

[django]
cleanup
compilemessages
createcachetable
dbshell
diffsettings
dumpdata
flush
inspectdb
loaddata
makemessages
reset
runfcgi
shell
sql
sqlall
sqlclear
sqlcustom
sqlflush
sqlindexes
sqlinitialdata
sqlreset
sqlsequencereset
startapp
startproject
syncdb
test
testserver
validate

[staticfiles]
collectstatic
findstatic
runserver

Python 中级进阶学习笔记

面对对象部分:
class Student(object) #Student继承object类
def __init__(self, name, score): #类似前置函数、构造函数
self.name = name? #设置属性
self.score = score
#self.__plus = plus #private局部变量的写法,__变量名
#感觉python的多态和派生都和c++差不多,具体在django用一下才晓得
python的类可以多重继承,也可以派生(object1,object2,…)java不能派生,c++可以派生
python还有抽象类,即 类库的模版,以后要写接口的时候,可以再配个实例

调试部分:
try:
#执行语句
except:
#异常时执行
logging.basicConfig(filename=’error.log’)
logging.exception(“Exception Logged”) #logging.exception(e) 为记录错误
finally:
#按照程序流程,执行完上面的后再执行这里的语句
#调试方法+经验 print() exit() type() 下断点,拿出数据检查

文件部分:
文件读写防止IO产生错误的写法#无需关闭文件
with open(‘/file’, ‘a’) as fp:
print(fp.read())
#fp.close()
fp.readline() #每次读取文件的一行
fp.readlines() #返回一个列表,每一个元素为一行
for line in fp.readlines():
print(line.strip()) # 把末尾的’\n’删掉
fp.write() #写操作
memory_fp = StringIO() #在内存中写文件
memory_fp.getvalue() #获取内存的文件数据
BytesIO() #在内存中写二进制文件

系统部分:
os.uname() #查看当前操作系统
os.environ #查看当前操作系统环境变量
os.mkdir() #创建目录
os.rmdir() #删除目录
os.path.join() #合并路径,处理不同操作系统兼容性
os.path.split()#拆分路径
os.path.abspath(‘.’)#查看当前绝对路径
os.path.splitext() #获取文件的扩展名
os.rename(‘test.txt’, ‘test.py’) #重命名文件名
os.remove(‘test.py’) #删掉文件

pickle.dumps() #把任意对象序列化写入内存
pickle.dump() #序列化后写入指定文件
pickle.loads() #内存中读取反序列化对象
pickle.load()? #文件中读取反序列化对象
json.dumps() #打印json对象
json.dump() #把json对象写入文件

进程部分:
os.getpid()#获取父进程id,类似c++的句柄
pid = os.fork() #子进程,只能用于linux内核,win内核是消息循环机制
from multiprocessing import Process #跨平台的多进程库Process()/start()/join()
Queue #进程通讯库
threading #线程库,要给线程睡眠时间
current_thread()#当前线程
MainThread #主线程 实例名
lock = threading.Lock() #线程锁 lock.acquire() 获取锁、lock.release() 释放锁 #容易造成死锁
threading.local() #全局线程对象

网络部分:
#长连接
#导入socket库:
import socket
#创建一个socket:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#建立连接:
s.connect(‘127.0.0.1′, 80)
#发送数据:
s.send(b’GET / HTTP/1.1\r\nHost: localhost\r\nConnection: close\r\n\r\n’)
#接受数据
d = s.recv(1024) #接受字节数
#关闭连接:
s.close()
#监听端口:
s.bind((‘127.0.0.1’, 9999))
#连接最大数
s.listen(5)
#接受一个连接
s.accept()
#UDP短连接

数据库部分:
sqlite3 #sqlite库
mysql.connector #mysql驱动库
还是觉得mysql合适,做客户端的时候再考虑用sqlite了。

Kali WEB漏洞扫描工具 Metasploit wmap使用

Metasploit 初识:
Aux 辅助模块
Exploits 攻击模块
Post 后攻击模块
Payloads 攻击载荷模块
Npps 空指令模块
Encoders 编码器模块

主动渗透攻击 例如 sql注入,端口
被动渗透攻击 例如 xxs,浏览器漏洞

armitage 图形化启动命令
msfcli 命令行启动

use 攻击模块路径
show payloads 显示攻击负荷
show options 显示攻击选项
set RHOST 目标主机IP
RHOST => 目标主机IP
exploit 开始攻击

RPORT 目标端口
LPORT 攻击负荷监听端口

Ka li下使用Metasploit? wmap

service postgresql start #通过kali图形化可以自启动,会变慢每次开机速度,我取消了开机启动
service metasploit start
#启动数据库,开始metasploit服务会自动创建msf3数据库
msfconsole -> db_status
#在msf终端内,输入db_status,查看数据库状态。

load wmap
wmap_sites -h #查看帮助
wmap_sites -a http://0535code.com
wmap_sites -l #查看站点列表
wmap_targets -h #查看帮助
wmap_targets -d 0 #定义目标ID
wmap_targets -l #查看目标列表

wmap_run -h #运行帮助
wmap_run -e #
#查找所有漏洞
vulns

Nessus Home 使用初识

安装完了后,每次启动的时候都要检查加载插件,需要几分钟甚至更长的时间,看了下web界面蛮简洁的。
service nessusd start #启动服务
https://主机:8834 #访问web管理界面
一般用虚拟机搭建好了,本地直接访问好了。
网上有Nessus 6.0的使用说明,貌似是用翻译软件翻译的。实际使用还是要琢磨一下, 在这里写下使用流程。
导航主要分为3块,scans(扫描项目),Policies(扫描模块),其次就是右边的登陆状态、设置和通知等。主要用到scan和policies。scan里面已经有默认的扫描模块模版了,可以直接用扫描模版扫描主机,每个模版都不一样,有针对BASH破壳漏洞的扫描,有针对主机的扫描,如果要对这些项都扫描一遍,用默认的模版就满足不了需求了。需要新建Policies扫描模块,可以配置扫描那些项目,可以使用第三方的api授权等。新建好模块后,点scans会发现下面有自己创建的扫描模块了,用新建的扫描模块即可。
在scans扫描模块下,有些图标标记为绿色的不能使用,貌似需要专业版的。在扫描模块下不支持直接填写http://ip:port,只能填写域名或ip,针对非80端口的某一页面检测的话就不方便了。