Bugku Web37
提示:hint:union,命令执行
先瞅瞅
进入环境,看到了一个登陆页面,自然而然的想到了SQL注入
随便输入一个数看一下,只有一个登陆失败,试一下1’,还是登陆失败,没有任何回显,看来是一个盲注
然后用burp抓了一下包,看了一下只是简单的POST传参,然后看了下F12里的网络请求,发现有一段类似base64加密的字符串(用burp的repeater也能看到)
解密之后得到了如下SQL语句,也就是我们需要构造payload,使得返回值为我们输入的password的MD5。
$sql="SELECT username,password FROM admin
WHERE username='".$username."'";
if (!empty($row) && $row['password']===md5($password)){}
构造payloadusername=1' union select 1,md5(1)#
,password=1
,然后登陆成功。此处的1'
是为了闭合前一条SQL语句,后面 union select 1
是为了先输出一行然后让password能对应上md5(1)
这一行。后面#是为了注释掉之后的语句
点确定之后就进入到一个新的页面,进程监控系统,随便输入一个1,看到如下页面
应该是执行了ps命令,可以用|
拼接执行我们的命令,尝试1|ls
,发现没有回显
试一下能不能把结果写入到文件里1|ls >haha
,然后访问http://114.67.246.176:15380/haha
,看到了ls的结果,很显然flag不在当前目录,一般来说flag都在根目录,试一下1|ls />haha
,再去看haha,发现有了flag
之后尝试1|cat /flag>haha
,再访问haha,就看到了flag
还有另外一种获得flag的方式是反弹式shell,但是需要公网ip,so以后走投无路再试这个