Tasteless challenges hard WP

hard

Level 5- Fred CMS

十有八九是注入,不過測試引號和轉義符並沒發現什麼,因而跑了下密碼字典,居然發現網頁提示 sql injection detected! ,而後發現原來是密碼中存在or關鍵字php

測試了username處發現未攔截關鍵字,那注入點應該只存在於password,那麼應該就是username填admin,password處構造SQL語句條件爲真便可html

試了好久才發現原來是考寬字節注入,payload以下mysql

username=admin&password=%df'<>1#sql

後臺語句則會是less

SELECT * FROM users WHERE username='admin' AND password='?'<>1

password='?' 爲假即0,0<>1爲真,因此整條語句爲真函數

 

Level 8- Unsolvable

SQL約束攻擊測試

註冊一個帳號編碼

admin                                                                                                                                             xxx  (中間多幾個空格)spa

123456789code

而後以admin:123456789登陸

 

Level 12- Goldjunge

 一開始瞎嘗試毫無頭緒,後才發現有源碼泄露

http://chall.tasteless.eu/level12/lucky.php~

 代碼爲

<?php
    $k=$_GET['emit'];
    $a=substr(sprintf("%8x%05x\n",floor($k),($k-floor($k))*1000000),0,-3);
    $b=substr(uniqid(),0,-2);
    if($a==$b){
        print "WTF?! YOU REALLY DID IT <3<br /> flag is: t1m1ng4tt4ck";
    }
    else {
        print "VAR a is ".$a."<br />";
        print "VAR b is ".$b."<br />";
    }
?>

...

沒錯flag就在源碼裏,t1m1ng4tt4ck

不過仍是要研究一下這題的正常解法

$a=substr(sprintf("%8x%05x\n",floor($k),($k-floor($k))*1000000),0,-3);

$a前8位是floor($k),後5位是($k-floor($k))*1000000),即後5位取決於小數部分,而後被substr,只取前11位

 

$b=substr(uniqid(),0,-2);

uniqid() 函數基於以微秒計的當前時間,生成一個惟一的 ID

 $b的11位都取決於當前時間

 

因此就要構造一個比當前時間大一點的payload,而後用burp不斷髮包,直到恰好撞上

 

Level 13- Leetmore

  待更

 

 

Level 14- Lifeless

  待更

 

 

Level 16- Bodies

 待更

 

 

Level 17- Unsolvable V2

字符集的問題

註冊的時候admin後面加上\xC2

登陸以admin便可

參考:Mysql字符編碼利用技巧

 

Level 20- Do you comment?

http://chall.tasteless.eu/level20/index.php?view=flag as Quality from level20_flag join level20`

實驗室的小夥伴試出來的,我以前有想過join,可是題目ban了註釋符,就一直沒想到繞過方法,至於爲何這裏反引號能當註釋用,目前仍是不清楚,正在研究。。。

更:mysql中起別名用as,但as能夠省略,而在能夠起別名的地方,用上反引號,其後的內容都會做爲別名

詳見:為什麼`(backtick)能作"註釋符"

相關文章
相關標籤/搜索