太久没更博客了,放假的时候放懒了,属于是放假前XXX放假后XXX了。下次暑假不能再在家里闲着了,得去打打HVV了。由于太久没更博客也不知道更些什么,就更一些刷题的过程吧。

ctfshow web489

这一题和web488很像算是升级版,所以我就记一下这一题。
首先我们可以再参数action下发现文件读取漏洞

但是经过尝试发现其并不会报错而web488存在报错,将源码扒下来。

回发现其再file_class.php添加了error_reporting(0);这导致网页没有报错。
我们审计代码会发现

extract($GET)而这个函数就存在了参数覆盖,即我们可以直接覆盖sql这个变量来进行sql注入或者绕过登陆
但这还无法得到flag,这道题目需要我们根目录的flag。
进一步审代码会发现file_class.php下存在file_put_contents函数

那么思路就有了,我们一步步向上审代码



最终会再index.php发现只要我们成功登陆就可以通过操作username的值来操控content的值
而缓存cache::create_cache会在cache/md5(‘index’).php,下写入。
那么我们只要尝试绕过登陆。然后通过操控$username来写入webshell来读取文件
查看该代码会发现只要能查到内容即可以绕过验证我们直接使用select+id+from+user+where+username='1'+union+select+1即可
而后再username传入webshell即可成功上马。

ctfshow web490

与上一题相似但是其将extract()放在了$sql定义的上面导致无法使用变量覆盖来操控sql的值,但是其user处存在sql注入,而传入的$template变为了$user->username因为可以sql注入所有我们可以操控$user->username的值即我们可以写入webshell

而其shade进行了更改,其写入的value被<?=?>包裹即我们写入的webshell要进行更改

1
?action=check&username=1111'+union+select+'eval($_POST[1])'--+&password=aaa


成功写入webshell后读取flag即可

web491

这题我们可以发现其无法再写入webshell了但是其还是存在sql注入,那么我们就可以尝试使用sql注入来读取文件,而因为这是盲注,所以我们可以使用脚本跑也可以产生些文件到/tmp这个低权限目录



web492

我们可以发现上述代码无法进行sql注入了。但是我们可以发现其user变量的值是再if条件里进行赋值的,那么我们只要使其无法被赋值的话,我们就可以使用extract函数来进行变量覆盖了