BUUCTF | [RoarCTF 2019]Easy Calc


看一下頁面源碼,發現了提示:

calc.php?num=encodeURIComponent($("#content").val())

$("#content").val() 是什么意思:

獲取id為content的HTML標簽元素的值,是JQuery,     $("#content")相當於document.getElementById("content");       $("#content").val()相當於 document.getElementById("content").value;

但是無論怎么注入都是400,403和500,這里用的是一個新的點:PHP的字符串解析特性

步驟:

1.掃一下根目錄,發現flagg文件:

? num=1;var_dump(scandir(chr(47)))

 2.列出flagg:

?%20num=1;var_dump(file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)))

 

 解析:

 為什么要在num前加一個空格?

答:假如waf不允許num變量傳遞字母,可以在num前加個空格,這樣waf就找不到num這個變量了,因為現在的變量叫“ num”,而不是“num”。但php在解析的時候,會先把空格給去掉,這樣我們的代碼還能正常運行,還上傳了非法字符。

發現過濾怎么辦?

答:用char()轉ascii再進行拼接

 

PHP的字符串解析特性是什么?

答: PHP需要將所有參數轉換為有效的變量名,因此在解析查詢字符串時,它會做兩件事:1.刪除空白符  2.將某些字符轉換為下划線(包括空格)【當waf不讓你過的時候,php卻可以讓你過】

 


 

這題還可以用:http走私

用post模式發一個請求,出現源碼

 

 

 然鵝我這里復現失敗了Orz,這里貼一份師傅的

方法二

利用HTTP請求走私

當我們向代理服務器發送一個比較模糊的HTTP請求時,由於兩者服務器的實現方式不同,可能代理服務器認為這是一個HTTP請求,然后將其轉發給了后端的源站服務器,但源站服務器經過解析處理后,只認為其中的一部分為正常請求,剩下的那一部分,就算是走私的請求,當該部分對正常用戶的請求造成了影響之后,就實現了HTTP走私攻擊。

添加Transfer-Encoding: chunked,在消息體加幾個回車

分塊傳輸編碼(Chunked transfer encoding)是超文本傳輸協議(HTTP)中的一種數據傳輸機制,允許HTTP由網頁服務器發送給客戶端的數據可以分成多個部分。分塊傳輸編碼只在HTTP協議1.1版本(HTTP/1.1)中提供

作者:gtfly

 師傅用的應該是CL-TE:

所謂CL-TE,就是當收到存在兩個請求頭的請求包時,前端代理服務器只處理Content-Length這一請求頭。后端服務器會遵守RFC2616的規定,忽略掉Content-Length,處理Transfer-Encoding這一請求頭。


參考:

https://blog.csdn.net/weixin_44077544/article/details/102630714

https://www.freebuf.com/articles/web/213359.html

https://paper.seebug.org/1048/

https://mp.weixin.qq.com/s?__biz=MzkwNzAwMDYyNQ==&mid=2247483858&idx=1&sn=19234bf6611400ae9da5d9a49a233cde&chksm=c0deaf8cf7a9269a32d928617d0c3eb11720914c591e0dc4d017450b9ef3809f2ed6a348a1b8&mpshare=1&scene=23&srcid=1016GXIy2HOar4STCzN93JIO&sharer_sharetime=1571219697654&sharer_shareid=71cadfa52e2be93573b54a69aeddea8b#rd

http://www.gtfly.top/2019/10/19/RoarCTF-wp.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM