XCTF ICS-07 WP

dr003   ·   发表于 11天前   ·   CTF&WP专版

XCTF ICS-07 WP

代码审计

admin权限模块

  1. <?php
  2. if (isset($_GET[id]) && floatval($_GET[id]) !== '1' && substr($_GET[id], -1) === '9') {
  3. include 'config.php';
  4. $id = mysql_real_escape_string($_GET[id]);
  5. $sql="select * from cetc007.user where id='$id'";
  6. $result = mysql_query($sql);
  7. $result = mysql_fetch_object($result);
  8. } else {
  9. $result = False;
  10. die();
  11. }
  12. if(!$result)die("<br >something wae wrong ! <br>");
  13. if($result){
  14. echo "id: ".$result->id."</br>";
  15. echo "name:".$result->user."</br>";
  16. $_SESSION['admin'] = True;
  17. }
  18. ?>
  • substr($_GET[id], -1) === ‘9’ 最后一位是9
  • floatval($_GET[id]) !== ‘1’ 取浮点数不为1
  • $sql=”select * from cetc007.user where id=’$id’”; sql查询id一般是0,1,2之类的 所以构造末尾为九但值会被当作0/1/2 用1-9解决

文件上传模块

  1. <?php
  2. if ($_SESSION['admin']) {
  3. $con = $_POST['con'];
  4. $file = $_POST['file'];
  5. $filename = "backup/".$file;
  6. if(preg_match('/.+\.ph(p[3457]?|t|tml)$/i', $filename)){
  7. die("Bad file extension");
  8. }else{
  9. chdir('uploaded');
  10. $f = fopen($filename, 'w');
  11. fwrite($f, $con);
  12. fclose($f);
  13. }
  14. }
  15. ?>

传参con file 满足preg_match(‘/.+.ph(p[3457]?|t|tml)$/i’, $filename)

preg_match

<!--参考文献-->

!--https://www.php.net/manual/zh/function.preg-match.php--

!--https://www.runoob.com/php/php-preg_match.html--

函数
  1. int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] )
  • $pattern: 要搜索的模式,字符串形式。
  • $subject: 输入字符串。
  • $matches: 如果提供了参数matches,它将被填充为搜索结果。 $matches[0]将包含完整模式匹配到的文本, $matches[1] 将包含第一个捕获子组匹配到的文本,以此类推。
  • $flags:flags 可以被设置为以下标记值:
    1. PREG_OFFSET_CAPTURE: 如果传递了这个标记,对于每一个出现的匹配返回时会附加字符串偏移量(相对于目标字符串的)。 注意:这会改变填充到matches参数的数组,使其每个元素成为一个由 第0个元素是匹配到的字符串,第1个元素是该匹配字符串 在目标字符串subject中的偏移量。
  • offset: 通常,搜索从目标字符串的开始位置开始。可选参数 offset 用于 指定从目标字符串的某个未知开始搜索(单位是字节)。
标记符
  • [ ] 模式分隔符后的”i”标记这是一个大小写不敏感的搜索

  • [ ] 模式中的 \b 标记一个单词边界,所以只有独立的单词会被匹配

  • [ ] \A Start of string

  • [ ] \z End of string

  • [ ] . Any single character

  • [ ] \s Any whitespace character

  • [ ] \S Any non-whitespace character

  • [ ] \d Any digit

  • [ ] \D Any non-digit

  • [ ] \w Any word character (letter, number, underscore)

  • [ ] \W Any non-word character

  • [ ] $ End of line

题目分析

/.+\.ph(p[3457]?|t|tml)$/i

大小写不敏感

.php结尾不行及其拓展名

fwrite($f, $con); f 文件名 con文件内容

chdir() 函数改变当前的目录。

payload

POST

con=一句话木马

file=文件/.
.会被忽略
/不影响读取

GET

id=1-9

page=flag.php

submit=submit

用户名金币积分时间理由
veek 30.00 0 2021-02-18 10:10:48

打赏我,让我更有动力~

0 Reply   |  Until 11天前 | 35 View
LoginCan Publish Content
返回顶部 投诉反馈

掌控者 © 2016 - 2021. All Rights Reserved. 掌控者

Powered by 掌控者