印象筆記

閱讀后我們發(fā)現(xiàn)要找到flag就要找到和‘QNKCDZO’md5加密后相同的字符串。顯然“碰撞”找對應(yīng)字符串是幾乎不可能的,那么推測應(yīng)該是利用PHP語言的弱類型的特性:

1)將QNKCDZO進(jìn)行MD5加密,密文為0e830400451993494058024219903391,發(fā)現(xiàn)密文為0e開頭,PHP在進(jìn)行比較運(yùn)算時(shí),如果遇到了0e\d+這種字符串,就會(huì)將這種字符串解析為科學(xué)計(jì)數(shù)法。

2)因?yàn)?exx都等于0,所以讓兩者相等我們只需再找到一個(gè)MD5加密后開頭為0e的字符串即可

3)相關(guān)字符串:

md5('s878926199a')=0e545993274517709034328855841020

md5('s155964671a')=0e342768416822451524974117254469

//php中“==”和“===”的區(qū)別:“==”只比較數(shù)據(jù)的值是否相等,而“===”比較的是數(shù)據(jù)類型和值是否相等,

比如整數(shù)0和浮點(diǎn)數(shù)0.0

用==比較返回TRUE

用===比較返回FLASE

文件包含:

http://4.chinalover.sinaapp.com/web7/index.php

了解php://filter 元封裝器

文件讀取操作:

include “test.php”php文件包含,在執(zhí)行流中插入寫在其他文件中的有用的代碼。讀取的時(shí)候也是數(shù)據(jù)流形式,因此可以使用php://filter進(jìn)行過濾,返回值為0,1。

readfile(“test.php”)是將文件以數(shù)據(jù)流的形式讀取過來,并不會(huì)執(zhí)行,但會(huì)在前臺(tái)瀏覽器上進(jìn)行解析。返回值是字節(jié)數(shù)多少。

file_get_contents(“test.php”)返回值為文本內(nèi)容

典型的文件包含漏洞我們可以通過構(gòu)造含有漏洞的語句,查看想要看的代碼

構(gòu)造語句:file=php://filter/read=convert.base64-encode/resource=index.php

1.php://filter/可用于處理打開的數(shù)據(jù)流,起到過濾作用。如果源文件為.php則很有可能在前臺(tái)顯示不出來。

2.此時(shí)我們采用的方法是,先讓文件轉(zhuǎn)化為base64格式(convert.base64-encode)然后再輸出,這樣不論是什么格式的文件都可以在前臺(tái)輸出。

3.再次解碼就可得到源代碼

了解php://filter詳細(xì)內(nèi)容:http://php.net/manual/zh/wrappers.php.php


ereg函數(shù):

ereg()函數(shù)用指定的模式搜索一個(gè)字符串中指定的字符串,如果匹配成功返回true,否則,則返回false。搜索字母的字符是大小寫敏感的。//正則表達(dá)式

stripos函數(shù):strpos('i love php','php'),匹配‘i love php’中是否有"php",有則返回字符所在位置

題目源碼如下:


if?(isset?($_GET['nctf']))?{

if?(@ereg?("^[1-9]+$",?$_GET['nctf'])?===?FALSE)

echo?'必須輸入數(shù)字才行';//利用ereg函數(shù)對輸入的字符進(jìn)行匹配,若是數(shù)字返回真,否則返回FALSE,此時(shí)可以用%00進(jìn)行對字符截?cái)啵?00截?cái)嗉坝龅?00則默認(rèn)為字符串的結(jié)束

else?if?(strpos?($_GET['nctf'],?'#biubiubiu')?!==?FALSE)

die('Flag:?'.$flag);

else

echo?'騷年,繼續(xù)努力吧啊~';

}

?>

一、此時(shí)可以輸入1%00%23biubiubiu,ereg?("^[1-9]+$",?$_GET['nctf'])匹配出1,而strpos匹配到原字符,可輸出flag

二、輸入a[]=1,此時(shí)為數(shù)組不符合ereg匹配的類型,繞過了ereg函數(shù),此時(shí)strpos獲得的是“Array”,也繞過了strpos函數(shù)


變量覆蓋:

源碼:



extract($_POST);

if?($pass==$thepassword_123)?{?>




很明顯,當(dāng)$pass和$thepassword_123的值相等時(shí),輸出flag,此時(shí)抓包修改post的值就可以得到flag

//extract函數(shù),extract() 函數(shù)從數(shù)組中將變量導(dǎo)入到當(dāng)前的符號(hào)表

例如


$a?=?"Original";

$my_array?=?array("a"?=>?"Cat","b"?=>?"Dog",?"c"?=>?"Horse");

extract($my_array);

echo?"\$a?=?$a;?\$b?=?$b;?\$c?=?$c";

?>

輸出結(jié)果為:$a = Cat; $b = Dog; $c = Horse


pass check:


$pass=@$_POST['pass'];

$pass1=***********;//被隱藏起來的密碼

if(isset($pass))

{

if(@!strcmp($pass,$pass1)){

echo "flag:nctf{*}";

}else{

echo "the pass is wrong!";

}

}else{

echo "please input pass!";

}

?>

tip:strcmp(array,string)=null=0

strcmp為字符串比較函數(shù),s=trcmp(string1,string2),當(dāng)string1與string2相等時(shí)s=0,string1



sql注入4:

源碼:


#GOAL:?login?as?admin,then?get?the?flag;

error_reporting(0);

require?'db.inc.php';

function?clean($str){

if(get_magic_quotes_gpc()){

$str=stripslashes($str);

}

return?htmlentities($str,?ENT_QUOTES);

}

$username?=?@clean((string)$_GET['username']);

$password?=?@clean((string)$_GET['password']);

$query='SELECT?*?FROM?users?WHERE?name=\''.$username.'\'?AND?pass=\''.$password.'\';';

$result=mysql_query($query);

if(!$result?||?mysql_num_rows($result)?<?1){

die('Invalid?password!');

}

echo?$flag;

-->

函數(shù)說明:

magic_quotes_gpc()開啟時(shí)為獲得的字符中的單引號(hào)等字符進(jìn)行轉(zhuǎn)義,get_magic_quotes_gpc()為檢查magic_quotes_gpc()是否開啟

stripslashes函數(shù)為字符串中刪除由addslashes函數(shù)添加的反斜杠

htmlentities()函數(shù): htmlentities() 函數(shù)把字符轉(zhuǎn)換為 HTML 實(shí)體

htmlentities($str,?ENT_COMPAT);?//?只轉(zhuǎn)換雙引號(hào)

htmlentities($str,?ENT_QUOTES);?//?轉(zhuǎn)換雙引號(hào)和單引號(hào)

htmlentities($str,?ENT_NOQUOTES);?//?不轉(zhuǎn)換任何引號(hào)

即htmlentities以編碼格式將單引號(hào)或雙引號(hào)編碼后再解碼到html文本中(我是這樣理解的:))

在mysql查詢語句中轉(zhuǎn)義字符不參與閉合

當(dāng)輸入admin=\&password=or 1=1#'的時(shí)候源碼變?yōu)?/p>

select * from users where name=\''\'\'ANDpass=\''or 1=1#''\',所以第二個(gè)引號(hào)與第六個(gè)引號(hào)閉合,繞過檢測

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容